1。背景集群联邦(Federation)的目的是实现单个集群对多个Kubernetes集群的统一管理机制。这些集群可能是跨地域(Regions)的,或者是在不同的公有云提供商上,或者是公司内部搭建的集群。一旦集群被联邦化,FederationAPI资源可以用来统一管理多个集群的KubernetesAPI资源,比如定义Deployment在不同集群上的部署方式,集群需要的副本数等等在。通过集群联邦,我们可以:简化对多个集群的Kubernetes组件的管理,如Deployment、Service等在多个集群中分发工作负载,提高应用程序的可靠性将应用程序部署在不同的集群中,使应用程序迁移更快、更容易跨集群服务发现,服务可以在地理上感知以减少延迟(不一定使用kubefed实现)实践多云或混合云(混合云)部署使用场景跨集群同步资源:如您所料,同步资源是部署人员面临的核心挑战联合或分布式Kubernetes集群。Kubernetes中的机制可以自动同步在本地或远程系统的多个集群上运行的部署,而不是在云中。跨集群服务发现:这解决了自动配置DNS服务器和负载平衡器的能力。本文主要记录跨集群资源同步的内容,新开一条跨集群服务发现的文章记录。2.安装Federationv2安装分为两部分,一是ControllerPlan和kubefedctl。ControllerPlan是基于helm安装的,所以我们先安装helm。helm安装可以自己找文档安装。ControllerPlanControllerPlan可以使用Helm部署(目前Helm还是使用v2版本),参考官方安装文档:https://github.com/kubernetes-sigs/kubefed/blob/master/charts/kubefed/README.md添加源$helmrepo添加kubefed-chartshttps://raw.githubusercontent.com/kubernetes-sigs/kubefed/master/chartssearch$helmsearchrepokubefedinstall$helm--namespacekube-federation-systemupgrade-ikubefedkubefed-图表/kubefed--version=0.6.1--create-namespaceRelease“kubefed”不存在。Installingitnow.NAME:kubefedLASTDEPLOYED:WedAug516:03:462020NAMESPACE:kube-federation-systemSTATUS:deployedREVISION:1TESTSUITE:Nonekubefedctlkubefedctl它是一个二进制程序,你可以在Release上找到最新版本的下载地址Github页面:https://github.com/kubernetes-sigs/kubefed/releases$wgethttps://github.com/kubernetes-sigs/kubefed/releases/download/v0.6.1/kubefedctl-0.6.1-linux-amd64.tgz$tar-zxvfkubefedctl-0.6.1-linux-amd64.tgz$mvkubefedctl/usr/local/bin/3.主集群中的集群操作参考我之前的文章《kubernetes switch context》kubectlconfigget-contextskubectl来自集群上下文信息的configuse-contextn1kubectlconfiguse-contextcontext-cluster1-admin从集群加入主集群的基本方式是:kubefedctljoin--cluster-context--host-cluster-context<主机集群的上下文名称>例如:kubefedctljoinn1--cluster-contextn1--host-cluster-contextcontext-cluster1-admin--v=2kubefedctljoinn2--cluster-contextn2--host-cluster-contextcontext-cluster1-admin--v=2unbindkubefedctlunjoinn2--cluster-contextn2--host-cluster-contextcontext-cluster1-admin--v=2从集群中获取集群信息Kubefed使用CRD来存储你需要的数据,所以当你使用kubefedctljoin时,你可以查看宿主机集群中的集群信息:资源并将它们存储在kube-federation-system命名空间中,kubectl-nkube-federation-systemgetkubefedclusters-oyamln14.跨集群同步资源启用资源联邦对于KubeFed来说,资源管理分为两类,一类是资源类型管理,一类是联邦资源管理。对于资源类型,kubefedctl提供enable使新的资源能够被federation管理:kubefedctlenable其中可以使用如下描述:type,即Kind(如Deployment)复数名词(如deployments)withapigroup复数资源名词(如deployment.apps)被缩写(如deploy),因为Kubefed通过CRD来管理资源。因此执行enable后,可以看到在HostCluster中新增了一个名为federatedvirtualservices的CRD:$kubectlgetcrd|grepfederated默认启用联合资源:也可以为自定义CRD资源启用联合。kubefedctlenable完成资源类型的管理,需要联邦资源管理根据新建的CRD进行编辑。但是,在部署资源之前,您需要创建联合命名空间。多集群资源只会部署到kubefed管理的命名空间。资源操作示例使用官方demo,可以快速体验示例:https://github.com/kubernetes-sigs/kubefed/tree/master/example/sample1createnskubectlapply-fexample/sample1/namespace.yaml-fexample/sample1/federatednamespace.yaml创建测试资源kubectlapply-R-fexample/sample1注意官方专门预留了一个资源让我们手动开启。运行上述命令后,会出现如下提示:unabletorecognize"example/sample1/federated.yaml":nomatchesforkind"Federated"inversion"types.kubefed.io/v1beta1",需要为ClusterRoleBinding类型启用联合。kubefedctlenableClusterRoleBindingkubectlapply-R-fexample/sample1最后在n1n2集群上运行结果如下:确认正常运行:commoncommandmemohelmlist--all-namespaces//installclusterhelm--namespacekube-federation-system-666upgrade-ikubefedkubefed--version=0.3.0--create-namespacekubefedctljoin<集群名称>--cluster-context<上下文名称>--host-cluster-context<上下文名称>--v=2//contextkubectlconfigget-contextskubectlconfiguse-contextn1kubectlconfiguse-contextcontext-cluster1-admin//getclusterkubectl-nkube-federation-systemgetkubefedclusters//获取集群信息kubectlapi-resources|grepkubefed//查看集群api信息$helm--namespacekube-federation-systemupgrade-ikubefedkubefed-charts/kubefed--version=0.6.1--create-namespacekubefedctlunjoinn1--cluster-contextn1--host-cluster-contextm1--v=2kubectlconfigget-contexts//卸载集群kubectl-nkube-federation-systemdeleteFederatedTypeConfig--allhelm--namespacekube-federation-systemuninstallkubefed