Kubernetes 联邦机制介绍

个人博客连接:http://blog.geekidentity.com/k8s/concepts/cluster-administration/federation-cn/git

Federation(联邦)

此页面解释了为何以及如何使用联邦来管理多个Kubernetes集群。github

为何联邦

联合能够轻松管理多个群集。 它经过提供2个主要构件来实现:web

  • 跨群集同步资源:联邦可使多个群集中的资源保持同步。 例如,能够确保多个群集中部署相同的程序。后端

  • 跨群集发现:联邦提供了自动配置DNS服务器和负载均衡器与全部群集后端的功能。例如,您能够确保可使用全局VIP或DNS记录来访问多个群集的后端。api

联邦的一些其它用处以下:安全

  • 高可用:经过在群集之间传播负载并自动配置DNS服务器和负载平衡器,联邦会将群集故障的影响降至最低。
  • 避免提供者锁定(lock-in):经过更轻松地跨群集迁移应用程序,联邦会阻止群集提供者锁定(lock-in)。

除非有多个集群,不然联邦并无任何用。你可能须要多个集群的一些缘由有:服务器

  • 低延迟:让多个区域中的集群经过向距离它们最近的集群提供服务来最大限度地减小延迟。
  • 故障隔离:最好有多个小型集群而不是一个单独人大型集群来进行故障隔离(例如:云提供商的不一样可用区域中有多个集群)。
  • 可扩展性:单个kubernetes集群具备可扩展性限制(大多数用户不该该这样作,更多详情请参阅Kubernetes Scaling和Performance Goals)。
  • 混合云:能够在不一样的云提供商或本地数据中心上拥有多个群集。

注意事项

虽然联邦有不少有吸引力的用处,但也有一些注意事项:网络

  • 增长网络带宽和成本:联邦控制台监视全部群集以确保当前状态符合预期。若是集群在云提供商或不一样云提供商的不一样区域(regions)运行,这可能会致使显着的网络成本。
  • 减小跨群集隔离:联邦控制台中的错误可能影响全部群集。经过将联邦控制台中的逻辑保持最简,能够缓解这一问题。 只要可能,它大部分都会委托给控制台的kubernetes集群中。 设计和实施也在安全方面作了不少考虑,并避免发生错误时多集群停机。
  • 成熟度:联邦项目相对较新,不太成熟。 并不是全部资源均可用,许多资源仍然是alpha状态。 Issue 88列举了团队忙于解决的系统已知问题。

混合云功能

Kubernetes集群联邦能够运行在不一样云提供商(例如Google Cloud,AWS)和本地(例如OpenStack)中的集群。 Kubefed是部署联邦集群的推荐方式。负载均衡

此后,您的API资源能够跨越不一样的集群和云提供商。运维

设置联邦

为了可以联合多个集群,首先须要设置联邦控制台。按照设置指南进行设置。

API 资源

一旦设置了控制台,就能够开始建立联邦API资源。 如下指南详细解释了一些资源:

API参考文档列出了联邦apiserver支持的全部资源。

级联删除

Kubernetes 1.6版支持级联删除联邦资源。当从联邦控制台中删除资源时,还会删除全部基础集群中的相应资源。

在使用REST API时,级联删除在默认状况下不会启用。要启用它,请在使用REST API从联邦控制台中删除资源时设置DeleteOptions.orphanDependents=false选项。 使用kubectl delete能够在默认状况下启用级联删除。还能够经过运行kubectl delete –cascade=false来禁用它

注意:Kubernetes版本1.5包括对联邦资源子集的级联删除支持。

单个群集的范围

在诸如Google Compute Engine或Amazon Web Services之类的IaaS供应商中,虚拟机存在于zone 或AZ中。 咱们建议Kubernetes集群中的全部虚拟机应位于相同的可用区域中,由于:

  • 与具备单个全局Kubernetes集群相比,单点故障的数量更少。
  • 与跨越可用区域的集群相比,更容易推断单区域群集的可用性属性。
  • 当Kubernetes开发人员正在设计系统时(例如对延迟,带宽或相关故障进行假设),他们假设全部机器都位于单个数据中心或链接很是近。

建议在每一个可用区域运行更少的虚拟机群集; 但能够在每一个可用区域运行多个群集。

选择每一个可用区域较少群集的理由是:

  • 在某些状况下,在一个群集中有更多节点(更少的资源),能够改进Pod的装箱包装。
  • 下降了运维开销(尽管随着操做工具和流程的成熟,优点没那么明显了)。
  • 下降每一个集群固定资源花费的成本,例如, apiserver虚拟机(但对于大中型集群总体集群成本的比例很小)。

有多个集群的缘由包括:

  • 严格的安全策略要求将一类工做与另外一类工做隔离(但请参阅下面的分区集群)
  • 测试群集canary 到新Kubernetes版本或其余群集软件。

选择正确数量的集群

选择Kubernetes集群的数量通常是不会变的,只是偶尔会从新审视(revisited occasionally)。 相比之下,集群中的节点数量和服务中的pod数量可能会随着负载和业务增加频繁变化。

要选择集群数量,首先须要肯定您须要在哪些区域(region)进行部署,以便在Kubernetes上运行的服务为全部最终用户提供最低的延迟,(若是使用内容分发网络,则CDN- 托管内容不须要考虑)。 法律问题也可能会对此产生影响。 例如,一家拥有全球客户群的公司可能会决定在美国,欧盟,美联社和南非地区拥有集群。须要使用的区域的数量为R。

其次,肯定在不影响总体业务的状况下,最多能够容忍有多少个群集同时不可用。将不最多不可用集群数量设为U.若是您不肯定,那么U=1是一个不错的选择。

若是容许负载平衡在发生集群故障时将流量引导至任何区域,则至少须要较大的R或U + 1集群。 若是不是(例如,若是要确保发生群集故障时全部用户的延迟较低),则须要具备R *(U + 1)群集(每一个R区域中的U + 1)。 不管如何,尝试将每一个集群放入不一样的区域。

最后,若是须要构建一个比Kubernetes的最大建议节点数量多的集群,则可能须要多个群集。 Kubernetes v1.3支持最多1000个节点的群集。 Kubernetes v1.8支持多达5000个节点的集群。 有关更多指导,请参阅构建大型集群

What’s next