集群联邦

本文将介绍如何安装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.103

  • a-cluster:联邦下的一个集群 192.168.2.101

  • b-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,使kubectlkubefed2能连接到其他两个集群,内容如下:

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-managera-clusterb-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?