通过kubefed实现kubernetes集群的联邦

223 阅读3分钟

1. 前言

本文主要介绍了如何通过kubefed实现多套kubernetes集群的联邦,由于资源的限制,在本文的演示过程中 使用的是通过kind创建的3套容器化的kubernetes集群,资源充足的朋友们可以使用非容器化创建的kubernetes 集群进行验证,但是效果本质上是一样的

1.使用kind创建3套kubernetes集群

clusters-list.png

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

kubefedctl.png

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
 ````