集群联邦
本文将介绍如何安装federation-v2。注意:本文要参考https://github.com/kubernetes-sigs/kubefed/blob/v0.0.10/docs/userguide.md,不要参考https://github.com/kubernetes-sigs/kubefed/blob/master/docs/userguide.md
前置条件
准备三个kubernetes集群,它们的用处分别为
f-cluster:用来部署kubefed的组件, 192.168.2.103a-cluster:联邦下的一个集群 192.168.2.101b-cluster:联邦下的一个集群 192.168.2.102
版本信息如下:
k8s版本:
federation-v2要求kubernetes的版本在v1.11或以上,本教程使v1.14.0版本。集群安装方法:kubeadm安装
helm:f-cluster集群中已安装好tiller,本教程使用的helm的版本为
v2.13.1
在f-cluster主机上配置好KUBECONFIG,使kubectl、kubefed2能连接到其他两个集群,内容如下:
在f-cluster主机上执行命令kubectl config get-clusters查看集群信息
$ kubectl config get-clusters
NAME
b-cluster
f-cluster
a-cluster执行kubectl config get-contexts查看上下文信息
安装kubefed-v2的控制平面
这里我们使用helm来安装。下载chart,链接为https://github.com/kubernetes-sigs/federation-v2/releases,这里我们选择最新的v0.0.10版本(这就是为什么文章一开始说要参考v0.0.10版本的文档而不要参考最新的文档,因为有很多不一样),下载后文件名为federation-v2-0.0.10.tgz。然后执行以下的命令安装:
安装好之后,f-cluster中会有如下两个Pod在运行:
同时,里面会有一系列的CRD资源生成:
以及FederatedTypeConfig
卸载
如果要卸载控制平面,首先删除FederatedTypeConfig
然后删除所有关于联邦的CRD
然后删除release
下载kubefedctl二进制文件
下载kubefedctl客户端工具,链接为https://github.com/kubernetes-sigs/federation-v2/releases,由于上面federation的控制平台我们安装的是0.0.10,所以我们也下载这个版本的客户端。下载下来后是一个kubefedctl.tgz,解压并核实版本信息:
添加集群到联邦
在添加集群前,要先在f-cluster中创建命名空间kube-multicluster-public
然后在f-cluster上执行如下命令添加a-cluster至联邦中
然后查看a-cluster的状态,应该是Ready,如果不是请查看两个Podfederation-controller-manager-xxxxxxxxxx-yyyy的日志(见FAQ)
添加成功后会有a-cluster中自动创建一个命名空间federation-system。
接着我们继续添加b集群
确定两个集群都添加成功
删除集群
如果有需要,可以使用以下的命令来删掉一个集群
发布一个资源
接下来我们发布一个FederatedDeployment。首先创建好该资源所属的命名空间test-namespace:
然后创建FederatedNamespace,让federation-controller-manager在a-cluster与b-cluster中也创建命名空间test-namespace
federatednamespace.yaml文件内容如下:
验证在三个集群中都已存在test-namespace这个命名空间。
然后,我们创建一个FederatedDeployment
federateddeployment.yaml的内容如下,它的意思是:在a-cluster与b-cluster中发布一个Deployment,每个集群的副本数都为1
接下来,我们查看a集群与b集群上命名空间test-namespace下的Deployment,发现与期望的一致
FAQ
Q:执行命令kubectl get federatedcluster -n federation-system发现a-cluster不是Ready状态?
A:查看Podfederation-controller-manager-7779795856-wvbfq的日志如下,说连不上a-cluster的apiserver
进入到该Pod中去ping 192.168.1.101发现也不通,于是开始解决网络问题。由于federation-controller-manager-7779795856-wvbfq的IP是172.26.0.18,当它去访问192.168.1.101时并没有做SNAT,所以导致包去了回不来,我们在192.168.1.101上有抓包为证:
这个与calico的配置有关,这里我们先在f-cluster上执行如下的命令暂时解决这个问题
Reference
Last updated
Was this helpful?