Kubernetes Federation 部署和使用体验

发布时间 2023-07-05 15:07:13作者: wanghongwei-dev

Kubefed是一个用于实现 Kubernetes集群联邦的项目,它允许用户在多个集群之间同步资源和配置。
Kubefed项目已经停止了活跃的开发和维护,因为它没有足够的社区参与和支持。Kubefed存储库已经于2023年4月25日被归档为只读状态,不再接受任何新的问题或拉取请求。Kubefed项目的继任者是 Karmada ,它是一个新的开源项目,旨在提供更先进和灵活的集群联邦能力。

k8s集群联邦需要一个主集群或若干个成员集群,主集群也可以作为成员集群加入联邦。Federation v2 的安装分两个部分,分别是 Controller Plan 和 kubefedctl。

控制平面安装

helm repo add kubefed-charts https://raw.githubusercontent.com/kubernetes-retired/kubefed/master/charts/
helm repo list
kubectl create namespace kube-federation-system
helm install kubefed --namespace kube-federation-system kubefed-charts/kubefed

默认在kube-federation-system命名空间创建了一些用于实现联邦控制平面的资源,包括

FederatedTypeConfig:定义了 Federated<API Type> 和 Kubernetes API 资源的关联关系,用于扩展联邦化的资源类型。
Federated<API Type>:定义了如何在多个集群中同步和调度对应的 Kubernetes API 资源。
ReplicaSchedulingPreference:定义了工作负载实例在不同集群中的分布策略。
KubeFedCluster:存储了注册的集群的基本信息,如 API Endpoint、CA Bundle 等,用于访问和管理联邦集群成员。
KubeFedController:协调不同集群之间的状态,如同步 Federated 资源与策略,并建立 Kubernetes 组件至对应集群上。

安装kubefedctl工具

wget https://github.com/kubernetes-retired/kubefed/releases/download/v0.10.0/kubefedctl-0.10.0-linux-amd64.tgz

tar -zxvf kubefedctl-0.10.0-linux-amd64.tgz -C /usr/local/bin/

构造kubeconfig文件

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1EVXdOakEzTXpjek1sb1hEVE15TURVd016QTNNemN6TWxvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTmEwCkhKc3FQWGJ1OFVDa0s4RzU0NkJHUUowWW1KWUlKeW4xOGV0dmZFcTdpaWxaOHZlYVhlRGM0aFNKYURIZWtiREoKak43WUxWaDl6dmhMeHBxWWdETnpld3U0cTM1cHdZQi85R2RBaXpqaU1mc1MzazFKMVhmYjNkU1ZIcHZRVFV3cwpUOWJLamgwYVhXWjZIWGpVYjIwbFRKeGFZai9vQmtaK0w0TmxaS0hYUlhKRFFBK0NKNEU0QnZzWk5ncVpqbm9UCm03RUoxMG1LZUVHaTM5QWhuU1IyK05FZW5weWpxN01vRTFGRjBrUkVlSDA4b3YvQnFNSmRieUIrNC9tUHAySTQKckRDbTQ4TkxzaWdUOE5ObytXQ01LUHhnM3pQSnl1VzFHc0s5NWx5MTVIdjhlUXRwNzVqcWVvSk5qSjRuOEswKwo3VG5YWkFEaUh5cDRkWDZvRytVQ0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZEaGhxdnk4NzRtQ2xGVmFrN09XbXBWdHUxSDVNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBRmpsZ0hwd1RyUmd6aGk4b3I1SgpaWUZCWHBKaGIzM0pWNlJRNzBBbzhZWitTV3U0L1dmekEwNEIrSm4wYlFORXd5S2gwZ1ZSUFJqYXZBUUFldmVRCjFWaVJ6TDhjVzFLN0Exa3BPdHhyUVlvSFh0Vi9jUHltYm1WNU55ZWd2a1krdklZZ1FTaXBTNGpqVmEreDR2SzUKdVViZjRwdzZJZkxNQVo3QTNjUkRsVVdWTG9adlZJaDUyQkFDTThpeUJwa25ORGpPNTJ2QmdJQTNuNGs0OFQxQwpJZzc1K2VNdm5XWndnMndlV1JOY1lWUEU4Q0Q2VENNazRmUTYzZWNMNnpoKzE1cGFxemhXTm0yZzBmVG5aOFZOCnJiNWE2a0lGTEthQVdPNVdEK25QMTcrVzE4ZUJBV21PRk9wcDcrTmFWVThnc1NDSEVOL29VUTZ3STlmREVDeHkKUkF3PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
    server: https://172.18.1.50:6443
  name: cluster1
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJek1EY3dOVEF6TlRjMU1Gb1hEVE16TURjd01qQXpOVGMxTUZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTWRuCkZwV0pnUzZFTVJiazJBUXczSW5TaXQ3N1NKQndkQzh4NFZ2RUk3aHB5NWE3elplUGpSVU1leEZ4bjBnbFNtMDkKdUlDZlppQlg0NFlickJNU3pkbGZNc0ZGZzBWOUtvT01JaTlIbGVDUlRaeWtnRW5nUTNOcnVyb0tpSERneEI0MQp5U1BCc2NzRm9zQS9sZnRsaXJ4YUVtOFMybDl6RndHZXZ5cHhNYW9ZRUdSY1NLYVlMNml0bGJiZVcyOUxuZnh1CnYxVmNRN3g0QWNXY3BiVjFhVTVpcnBiN3NHbDRydU54UzRkQkZDR3VINThQRG9vL1oxSEtyZVgrRGRkMktGVUcKN2JDVWNGM0FmdU5hakpmMUFpTjdVcnJWRCtScTVqNUpxVDNHNVFJQXhGK0sxZlNkYzFlQkN0djVPWjFDVE91ZwpEU3l1VXZoOGhjVjlGc0d2NFQwQ0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZIdzcxQmk1SnVoYW1uaUxFL01waTNEMXdpY1pNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBQm1maWloREZYODRyY053dFNoNgo5OU1yZE4yczRSaGhxVXFEaGhyUi9iNUFVaThaRTFJUlUxWDJyWmFWUlc0Qnp1TnhsUU8yZXpPNVEyeVRMZWg2CkNSTXRCdGthUXk4RWRuOHllT3llUGtJYU9mZ3V6YTF5NXdsMVhYTUVmaXcvNTMwZlZPcTNjWndMeGNGNjBJREoKUHptdmZnc1d3Tm1QZWZ1QXN2QnE0VWE0bVZnTmM3S0hrcERzb1lOOXpCdkJMS1pWcDYvbUNrdzRqMVUyTlNVaAprazRLQ3R3b1dCd0U3aGFuRG1VK1pQNXRuMlVXQ2xLMFlsUGNnaHFUMEViSHB5MUU2RHBFZ2plaFBndjZVS0xZCjRzc25JRThXbHRZVlFEU1FPSWRNbFErVG9MWCtvWU15U1pRZFZ6NlhaTWNBQXEveFlMOWUzcTMzQXF4K284bkQKOU8wPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
    server: https://172.18.1.100:6443
  name: cluster2

kind: Config
preferences: {}
users:
- name: cluster1-admin
  user:
    client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURJVENDQWdtZ0F3SUJBZ0lJUW9jV25CQTJrVE13RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TWpBMU1EWXdOek0zTXpKYUZ3MHlOREEyTWprd05qUTFOVEZhTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQTNBdnc0d08rMGoyS2VBclEKbVNqWlR6TkdYNDdFTlppcG43U2ZydTZMQTN4T0E0aVdjWEJzRENNSm9tUEo4SDhqUVFFSUlub3JwSnNMMERZUQpqdGpMT0EvYmFTOEgyMjM5djRCSkdGMFg4QzZ6UzJYYUp4eE1PYmJYZmFmcTB4enU3dTBuUUN5eXNCaVFEblEvCjR6U1poWUxNQmtzdDMzTTdVOGZ4dzRpNTV0bzlBWVM5RU9hRWZ0azZ5M2lvWWM1Ym9WMGdYSElmc3hUWERRekMKWHBXc09hN0o3NDZzd1hKeVZNOGN3T0FUSGVaVk1VTjA0ckVGazUrTnBhbU9MMmlDTTJUaloxTCtMQm9ic0hvQwpPOFdBZGhMaGpEa3A1WWE3VG5JRVNUQi9TZlY3SE5XZ1BVNG1vaHBQN1FwRm1hRjhJdnUvN2R1MjZrUzB5TjA3CkdzdWc3UUlEQVFBQm8xWXdWREFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RBWURWUjBUQVFIL0JBSXdBREFmQmdOVkhTTUVHREFXZ0JRNFlhcjh2TytKZ3BSVldwT3pscHFWYmJ0UgorVEFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBaHBvTkczaC8xcmlWM3lrTWIzeTFQWVdCZW5LRExpRzdFT3IxClU1dnJ2OWhkVGNrTk1ER3JOaE95WXBDZUttSWp2U1c1Y3hQTHlHQTF1VmdMZUhvcDBlZUl2WCtkYjJhV2h1Q0oKbi9GSmJjVFJNZllieVdTMjBuN1VqTUE0SWpGeERDWEhpOUxodUl6RkZvYVBJc1g0b25JUjBteVpiQVJyTlNpRgpNc0RZTGMyeDR4WkwzU2s4eWg2NC9Ia1dzT2VBcTk3ZHpxd2k1aG8rTVpZd2NBSnFobklZSVBCU1dJeFo4UFkxCkZic2F2OURwWE92cU8yTVNqSVhPRVFwWkUzdmRMcmJab1c3S1VhSmJURkovSG8xZ2g3eUVtZzNXdnJqS21QR0EKbWp3SlBqY1ZuTXNweTVRT2NTbVRqSld5U2xscUQxalhpM1Nva2U0OEd3MU5OYmFwSHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
    client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBM0F2dzR3TyswajJLZUFyUW1TalpUek5HWDQ3RU5aaXBuN1NmcnU2TEEzeE9BNGlXCmNYQnNEQ01Kb21QSjhIOGpRUUVJSW5vcnBKc0wwRFlRanRqTE9BL2JhUzhIMjIzOXY0QkpHRjBYOEM2elMyWGEKSnh4TU9iYlhmYWZxMHh6dTd1MG5RQ3l5c0JpUURuUS80elNaaFlMTUJrc3QzM003VThmeHc0aTU1dG85QVlTOQpFT2FFZnRrNnkzaW9ZYzVib1YwZ1hISWZzeFRYRFF6Q1hwV3NPYTdKNzQ2c3dYSnlWTThjd09BVEhlWlZNVU4wCjRyRUZrNStOcGFtT0wyaUNNMlRqWjFMK0xCb2JzSG9DTzhXQWRoTGhqRGtwNVlhN1RuSUVTVEIvU2ZWN0hOV2cKUFU0bW9ocFA3UXBGbWFGOEl2dS83ZHUyNmtTMHlOMDdHc3VnN1FJREFRQUJBb0lCQUNseU5sVU1CNDBoK2tyUgovcWhhZ1ZQaG5JZXpKRkhVQjE4RmJtNU1qL0tBSDFHYkVIc2RhYngvZlBrUlFxQUIwbW9ULzZ3K3hxbWlhbjgxCkw3azRMRTdLN2RES0F2alpwc25ES0FGbXgzTjkyRmVEUDZ2T01LMU9PeGgzNEVzVFVBM0FyWHZ3NzFjcnlUWnYKdnZqVWwzWUdSTmVLb1lGTSt3ZTB5VnpEREFEbkVNakhUbnRDaFRvRGF1YnZTWGtsUHQ4ZkFFYnUyMWc5aEkwSwpTUlJPOFl0M1VjRkNKZHR2WURPS3V5YkRlQUJzNmtkOE14M1FjSEdDTTI0Qk9kNDJpZ1Ira3dCOWlvRndzNVRGClU1UmNmdFZxSGJDeG16SkRMRlZTdXZpcGpQMVpDNWs2STlXRlFZcUF5YTRnV21qd21yNFZOQWlvL2dWOXBGWTYKWCt5d3VTRUNnWUVBOTdrbHAvaXROaDhpV1RFZjRlRTN2QnFVbi9BV0IyRFhvbGFmNVhNOEd2VG1hQ2NFRS9YWAo0QVJPQitYZXJ4UlJXQTZmTmtBaWt0cjhqQnUrR3FrS3N1Vk9SQ29OWWE1OXRGL2EvbDlVdExaVDB1ZXhaalJRCmp2NW5ib2dLd0hnNmJqSWNJN3VPenFLaXF3YVhDRHkyeC93dEI5aFVEamtQRjZzRzNZOUN1emNDZ1lFQTQyWVIKU1NNbk5qa0xPbEQ0Q29SRDFWdGIxN3d1UWFiVjZRRWI4QWM0N1hjSkpReFJZRVVia3hWaEZudk5KNUN5ZHYwQwo3UGNZMm9wMWNiQ2xjSXpVR1dkMTNYbW04RXZ2Nnhtdm1VKy9OSkNicDJOWGtkYTl3RXRxVHl3UTQ2eWJnZ0NyCjhWQ2RoSGVKenJ0djZRMjNCM2RHZG0yR01XOFozbWV4dk13UGZ2c0NnWUJoUXJVeExPYTg0QjU1VEZ0TE1VVFQKdXMvdHQ3SytkTnhVNVpQajM0bVN2K0tTcy9iYTYyUTFsUnNaNkx1MG05S1FNelY1ZEZiZXQ5SCtKSXBRSjF5RwovcGJyRm1Pb25YekhTL2RNZGh0bzFFazIvamJkZk43QU5jeGdUbE9DVy9IOC8vbWlZZXBnNE9QaktEUTJUTGdxCjdxeXpidEVad0hkWGdKT3llNlBrb3dLQmdDOUhkMnlYYkgydm1wQURhYTcyRlF4MU5FRkVsUEY5ZUpnN2JNMloKRXRMOG51QWZFWVJNbWhFWXJ0ajM0STNMWGUrelp6cFJuYzlDWG16RzUzN2hLUEFuUExCUnJNM2xXL3FybW9Ecgp2YnQySFliTjl0VVJxdDRpVC9ZcUdWRGRBSEFsSjVyQ3doMWFwVUpnWWtJNFljZWhtdnJnaHJnY2UycHNjTjNxCko0YWxBb0dBRkJSVHpMMEVqRVV6NS9kOWVuZnpVNm80SnQvN3ZEdUJlM1g0TUhLTThVTW9qbDdLNUlEdTF1TkMKaVBXQXRCandtdXNWUnB4R1RGSUlWY3FJbHBqdHM5TzhuS0FmZTNhenRseE9kdDFBbDc5UjljMEFNTFVRZWVhTwpGZkRqWnRZWEFmU0R2SmZJL1NDZVdYU2NuS1YrbGpyY05wUnl5SXpqR3lKYm5vUFdxUVE9Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==

- name: cluster2-admin
  user:
    client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURJVENDQWdtZ0F3SUJBZ0lJYjdhQytYNFIzV0V3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TXpBM01EVXdNelUzTlRCYUZ3MHlOREEzTURRd016VTNOVEphTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXZQM0laYk1CL0krV3BDeDMKZ2c2d0RYeEZOVTZ4Vyt0THNSK0FJc0RBbndiai9mMXEwakpkV2JCK1RrdHNJcDMwK2I5dzVEZkVlNkhpNDM4cQpJRHZNNCtLaWVBeFltV2p5bWlrM0FiSWZxT2ExWlpZWVJ6aXIwY1NMZSswVkpuTGY3TW1JNHA2bk1YeUJBSithCnBHZitDb2h6TXRGRXZQdVlXVkloZTZQV0tXTlpzVFJKcXB4S1NSd2NyNldGemlXdFNsdjVFRHZjMHBYQkcvV3oKQWF4YzFxS09LTmtjaHo3b2M3blJlL0kwSnN6cEJoYXhOYkY0d0NyZXI1eE1VcWZkbG5nZXRQek5QUXljOEZleQpaVkJuTDBRVmFVUHB1eTZiS1pVNGg3eVN6M1JUVHllRkM4b2hiYlQ3ZS8rRWhvOUdpVWRqaHRteXRuM2NUaXRDCnVyVm1Od0lEQVFBQm8xWXdWREFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RBWURWUjBUQVFIL0JBSXdBREFmQmdOVkhTTUVHREFXZ0JSOE85UVl1U2JvV3BwNGl4UHpLWXR3OWNJbgpHVEFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBb0xXOU5hL0Uycnl6V1lpaE8zcGZVQ1lNbktkcXNOY2RTTEJICmtVRUF0UC9sNWNCb0JaTTI2N3lCVU5ncDEwbVE0ZUdleWlNelVNV3d1N0NSSndQbzlQcS9Hb1J1R1dZSWl2VkIKeWZKQWJEdDRWdnBudllOd1NxR05CeHpSaWttdjhXTU93cTRMVmtyL1Jqa1JZNGVneER6ZEVNc2VQdnU4ZUM1UQowaGdsWE5nTXZqTkt2N3FYZ1lzY2lvczQyeTQ3cFR0WloxWFZiYUpleUEwS0R3cE41R2x3S3lsb1g3MHhlMk96Cmx3UThOMWp6QTB3V2ZtSElia2V5aTUyYTFNSzF6UG1NMnB1SzdhL0NlaFRNOGI4RXhtUHc3RDA4dzJsZk1zK1UKenBVV1ExdHZPd29Cb0dkL3dyOERoQTd0QWx2ZTIrdk1pakJta3RJSG54cGd6aW1IclE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
    client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBdlAzSVpiTUIvSStXcEN4M2dnNndEWHhGTlU2eFcrdExzUitBSXNEQW53YmovZjFxCjBqSmRXYkIrVGt0c0lwMzArYjl3NURmRWU2SGk0MzhxSUR2TTQrS2llQXhZbVdqeW1pazNBYklmcU9hMVpaWVkKUnppcjBjU0xlKzBWSm5MZjdNbUk0cDZuTVh5QkFKK2FwR2YrQ29oek10RkV2UHVZV1ZJaGU2UFdLV05ac1RSSgpxcHhLU1J3Y3I2V0Z6aVd0U2x2NUVEdmMwcFhCRy9XekFheGMxcUtPS05rY2h6N29jN25SZS9JMEpzenBCaGF4Ck5iRjR3Q3JlcjV4TVVxZmRsbmdldFB6TlBReWM4RmV5WlZCbkwwUVZhVVBwdXk2YktaVTRoN3lTejNSVFR5ZUYKQzhvaGJiVDdlLytFaG85R2lVZGpodG15dG4zY1RpdEN1clZtTndJREFRQUJBb0lCQUhzSFhuaE44c0llR3p1ZQpzdUdZZkNVYk85WjY5dHhXclR5TnZCVmprMEV5OUNKNDRSd2FxMGhpcTZaK1ZOT29ManlTMG9QT2hmclJwT2poCjlHTnRhbkVETFM2bkl0b2pScUx5cDV0VUFHWXNZZlBTcE5WZ1lBRzdSKzRScFU0VlJBNWFGK0VtMU1KVFFZdE4KV3hjaGwyLzE2Y0F3R09aSmhxREc1WU1lWWFFb3F4VlJUcmRoMGZYWlFQcnlLMGdHSTFHMFRqWldsZVVYbGlMTAo0VzRSNnUxbXdXeUtBNXdnWVMrWG90NXBQOEVKT2duOWp2dXNSM2svdzcrMUMxaXphbTR4RGo1OWFDbXZhTmc1Cis0UmFHb00vbXZUQ0RDbFltNURDanBzUDNMbXRob1FPVTRpbHZNNklrWGVieWNCZkxPMTZKbGR1cEJjWjZReWIKa0lyWXdRRUNnWUVBOGwxVmlmaEVxOXV0TmxHcmllRllVL2U0b2xTTllTOGpKSWhhYlowcmlnMWlSUkZGR2YrSgpYenJoSFdHazczWWZIZVdCbTBOaU5rWUZ3NS9aam1rdGQ4MzRNTkM1TFdxdHh3UG1MSE9iT2RQNDVZZzFrNTFCCkpnYy9pVEl6RjRpVkNlMFQzaWtpS0h4Wi93L3JnZHhSZXkyaXZFSnl5bGNlWXNqL09SVjFOTGNDZ1lFQXg1KzkKQUhBbHVQYTN2RE5GR21tWHBHb0pTMGZBdVI4bXhRM0Qwam1ZOGdwNC9jN1FNejNRRmlCWGFlVGljSzJmN293SgpPRWs4elJ3Z241TDVxSUo4bDg1TW4wc3JTYzNHMEwzSTA0WFlRRUdSbTV3MlNjNjNWVnZ6YjY3VmVyY3VyeTh6CkIvTXEvYkFGQVM5KzFGV0ZRanJ6ci9EQlFSd1cwMWE4Z1ZSTzJvRUNnWUVBM2xJWmhpODBKd1dqRlNIRG5mNFYKUFNrT3QvR2hvdFZQZ2xLRnlPa1VxRlZ3b0hTZ0U2SWhqRGFCaTZjbldmWGJ3MXZsRU55MStaMHY2bXYyY0RrdwoyU1lhRmdWUTZFVmtWUnZSaDFNZ3YrSWUvY1o5aHdRSVgrN2tMR0RkRnloVnRyNC9yRm5GR0toQkVjU3p2dkt2CjE3TmNCUjliRnhybEo2N0MxOFZFTjI4Q2dZQXNRZ3dqUnJuMlVpeldPdis5SldBTGdiN2h3OXpFcmxWb0p1OGQKY3N1b0RnNVpKenNkd1R5YlN6eFdLL3JRUkk1SzB4MVFMMXlkbFBqZXFEVlYyT2hLdCtCaENNZG1LNHRDeUhENApCSnEzVkZJMkQrSXhadlZhcFhKSmRwZTZCMWNBWEJTU1ZLVlpiV2NPcGpzV1ZJZWc4WFVKc3ZVRnZIYUxFSlhtCmpveVZBUUtCZ0VxM1k1VmFrNFFrVkwzSjJtWHZYVmF4NjEwK2NLKzA2SVRWbUxzOVZjeU1qVTgxVytRamdmdXcKek9mWC9YZ3J0em1qdy9GeGVRRys3SkJ2UXlDc0N3LzJzcS9sUG5PcVhMQ2hsQ2RuUzh2OTgxWXlVZThHL00rZApSYWtLZklhSnFtcUs4Z2NsbVFPY0pocUVnRWZIS3J2MlltQ2g5QlhCL0Jrdi9iQ1FrNjNjCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==

contexts:
- context:
    cluster: cluster1
    user: cluster1-admin
  name: cluster1
- context:
    cluster: cluster2
    user: cluster2-admin
  name: cluster2

current-context: cluster1

将集群加入k8s联邦(将cluster1作为主集群,cluster1和cluster2作为成员集群加入k8s联邦)

kubefedctl join cluster1 --host-cluster-context cluster1 --v=2 --kubeconfig=./config
kubefedctl join cluster2 --host-cluster-context cluster1 --v=2 --kubeconfig=./config

查看联邦成员

kubectl -n kube-federation-system get kubefedclusters

启用想在联邦集群中同步的资源类型

kubefedctl enable deployments.apps
kubefedctl enable services
kubefedctl enable configmaps
kubefedctl enable ingresses
kubefedctl enable jobs
kubefedctl enable namespaces
kubefedctl enable replicasets
kubefedctl enable secrets
kubefedctl enable serviceaccounts
kubefedctl enable clusterroles

查看联邦集群中启用的资源类型

kubectl get federatedtypeconfigs -n kube-federation-system

查看可以启用的资源类型

kubectl api-resources --api-group=types.kubefed.io

禁用联邦资源类型

kubefedctl disable <ResourceType>

将命名空间加入到所有的联邦集群

kubefedctl federate namespace test-namespace

或将命名空间加入到指定的联邦集群(此处指定了cluster1和cluster2)

apiVersion: types.kubefed.io/v1beta1
kind: FederatedNamespace
metadata:
  name: test-namespace
  namespace: test-namespace
spec:
  placement:
    clusters:
    - name: cluster1
    - name: cluster2

创建联邦资源对象(每个集群都会创建3个nginx的pod)

apiVersion: types.kubefed.io/v1beta1
kind: FederatedDeployment
metadata:
  name: nginx
  namespace: test-namespace
spec:
  placement:
    clusters:
    - name: cluster1
    - name: cluster2
  template:
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx
            name: nginx

创建联邦资源对象(将3个nginx的pod分散在两个集群中)

apiVersion: types.kubefed.io/v1beta1
kind: FederatedDeployment
metadata:
  name: nginx
  namespace: test-namespace
spec:
  placement:
    clusters:
    - name: cluster1
    - name: cluster2
  template:
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx
            name: nginx
  overrides:
  - clusterName: cluster1
    clusterOverrides:
    - path: "/spec/replicas"
      value: 2
  - clusterName: cluster2
    clusterOverrides:
    - path: "/spec/replicas"
      value: 1

解散k8s联邦

kubefedctl unjoin cluster2 --host-cluster-context cluster1 --v=2 --kubeconfig=./config
kubefedctl unjoin cluster1 --host-cluster-context cluster1 --v=2 --kubeconfig=./config
helm uninstall kubefed --namespace kube-federation-system
kubectl delete ns kube-federation-system