1. 前言
本文主要介绍了如何通过kubefed实现多套kubernetes集群的联邦,由于资源的限制,在本文的演示过程中 使用的是通过kind创建的3套容器化的kubernetes集群,资源充足的朋友们可以使用非容器化创建的kubernetes 集群进行验证,但是效果本质上是一样的
1.使用kind创建3套kubernetes集群
2.安装kubefedctl客户端工具
可以直接从官网下载二进制文件 github.com/kubernetes-…
然后执行如下命令
tar -zxvf kubefedctl-0.10.0-linux-amd64.tgz
chmod u+x kubefedctl
sudo mv kubefedctl /usr/local/bin/ # make sure the location is in the PATH
3.通过helm安装kubefed
3.1 将kubefed chart仓库添加到本地仓库
[root@localhost ~]# helm repo add kubefed-charts https://raw.githubusercontent.com/kubernetes-sigs/kubefed/master/charts
[root@localhost ~]# helm repo list
NAME URL
kubefed-charts https://raw.githubusercontent.com/kubernetes-sigs/kubefed/master/charts
3.2 查看可用的chart版本
[root@localhost ~]# helm search repo kubefed
NAME CHART VERSION APP VERSION DESCRIPTION
kubefed-charts/kubefed 0.10.0 KubeFed helm chart
3.3 选择要作为控制集群的集群,并切换到该集群
比如我要把kind-host集群作为控制集群
[root@localhost ~]# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
kind-host kind-host kind-host
kind-member-cluster-1 kind-member-cluster-1 kind-member-cluster-1
* kind-member-cluster-2 kind-member-cluster-2 kind-member-cluster-2
[root@localhost ~]# kubectl config use-context kind-host
Switched to context "kind-host".
3.4 将kubefed控制面板通过helm chart 安装到控制集群中
[root@localhost ~]# helm --namespace kube-federation-system upgrade -i kubefed kubefed-charts/kubefed --version=0.10.0 --create-namespace
Release "kubefed" does not exist. Installing it now.
NAME: kubefed
LAST DEPLOYED: Thu Dec 7 13:40:11 2023
NAMESPACE: kube-federation-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
[root@localhost ~]# helm list -n kube-federation-system
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
kubefed kube-federation-system 1 2023-12-07 13:40:11.770763249 +0800 CST deployed kubefed-0.10.0
注意, 如果直接从helm chart仓库安装比较慢或者安装失败,可以直接从 github.com/kubernetes-… 下载安装包,执行helm install kubefed kubefed-0.10.0.tgz --namespace kube-federation-system --create-namespace安装kubefed
3.5 将集群加入联邦集群
3.5.1 设置联邦集群中的控制集群
注意此处-cluster-context和host-cluster-context是同一个,因为要把kind-host作为联邦集群的管理集群
````shell
[root@localhost ~]# kubefedctl join kind-host --cluster-context kind-host \
--host-cluster-context kind-host --v=2
I1207 15:55:43.798326 32102 join.go:162] Args and flags: name kind-host, host: kind-host, host-system-namespace: kube-federation-system, kubeconfig: , cluster-context: kind-host, secret-name: , dry-run: false
I1207 15:55:43.842456 32102 join.go:243] Performing preflight checks.
I1207 15:55:43.844580 32102 join.go:249] Creating kube-federation-system namespace in joining cluster
I1207 15:55:43.847969 32102 join.go:407] Already existing kube-federation-system namespace
I1207 15:55:43.847988 32102 join.go:256] Created kube-federation-system namespace in joining cluster
I1207 15:55:43.847996 32102 join.go:429] Creating service account in joining cluster: kind-host
I1207 15:55:43.853121 32102 join.go:439] Created service account: kind-host-kind-host in joining cluster: kind-host
I1207 15:55:43.858492 32102 join.go:449] Created service account token secret: kind-host-kind-host in joining cluster: kind-host
I1207 15:55:43.858516 32102 join.go:476] Creating cluster role and binding for service account: kind-host-kind-host in joining cluster: kind-host
I1207 15:55:43.879110 32102 join.go:485] Created cluster role and binding for service account: kind-host-kind-host in joining cluster: kind-host
I1207 15:55:43.879141 32102 join.go:888] Creating cluster credentials secret in host cluster
I1207 15:55:43.884338 32102 join.go:982] Created secret in host cluster named: kind-host-nzrfv
I1207 15:55:43.903864 32102 join.go:301] Created federated cluster resource
````
查看kind-host集群加入联邦集群的状态为成功
[root@localhost ~]# kubectl -n kube-federation-system get kubefedclusters
NAME AGE READY KUBERNETES-VERSION
kind-host 40s True v1.25.3
3.5.2 将其他两个集群加入到联邦集群中
[root@localhost ~]# kubefedctl join kind-member-cluster-1 --cluster-context kind-member-cluster-1 \
--host-cluster-context kind-host --v=2
[root@localhost ~]# kubefedctl join kind-member-cluster-2 --cluster-context kind-member-cluster-2 \
--host-cluster-context kind-host --v=2
查看集群联邦状态都为成功
[root@localhost ~]# kubectl -n kube-federation-system get kubefedclusters
NAME AGE READY KUBERNETES-VERSION
kind-host 48m True v1.25.3
kind-member-cluster-1 9m3s True v1.25.3
kind-member-cluster-2 117s True v1.25.3
````