Kubernetes 多集群管理:Kubefed(Federation v2)

Kubernetes 多集群管理:Kubefed(Federation v2) 最先发表在 blog.ihypo.net/15716465002…html

Kubefed(Federation v2)即 Kubernetes 联邦,是目前社区正在难产的多集群解决方案,目前的版本是 0.1.0,若是考虑到 Federation v1 的话,Kubefed 也算是有个出师未捷身先死的大兄弟了。git

Federation v1 为何被弃用

Federation v1 在Kubernetes v1.6 时进入了 Beta 阶段,但以后就没有更进一步的发展,一直到 Kubernetes v1.11 左右正式被弃用。至于被废弃的缘由是由于开发团队认为集群联邦的实践比想象中还要困难,有许多问题是 v1 架构没被考虑进去的,好比:github

  • 控制平面组件会由于发生问题,而影响总体集群效率。
  • 没法兼容新的 Kubernetes API 资源。
  • 没法有效的在多个集群管理权限,如不支持 RBAC。
  • 联邦层级的设定与策略依赖 API 资源的 Annotations 内容,这使得弹性不佳。

从 Federation v1 架构上看,Federation 主要由 API Server、Controller Manager 和外部存储 etcd 构成。web

Federation API Server 基本复用了 Kube Api Server,对外提供统一的资源管理入口,但只容许使用 Adapter 拓展支持的 Kubernetes 资源。bash

Controller Manager 协调不一样集群之间的状态,经过与成员集群的 Api Server 通信,来统筹管理全部的 Kubernetes 成员集群。架构

Federation v1 总体的架构和 Kubernetes 自身的架构仍是很像的,并将成员集群做为一种资源进行管理。可是由于 v1 一开始并无设计到灵活的添加新 Kubernetes 资源以及 CRD,以致于每当建立一种新资源都要新增 Adapter。ide

原本资源设计的就很是不灵活,加之 RBAC 的支持问题,使得没法作到多集群资源的权限管理,于是流产,并为 v2 积累了宝贵的教训。post

Federation v2 设计

Federation v2 利用 CRD 实现了总体功能,经过定义多种自定义资源(CR),从而省掉了 v1 的 API Server,但也所以引入了 Host Cluster 的概念。ui

基本概念

  • Federate:联邦(Federate)是指联结一组 Kubernetes 集群,并为其提供公共的跨集群部署和访问接口
  • KubeFed:Kubernetes Cluster Federation,为用户提供跨集群的资源分发、服务发现和高可用
  • Host Cluster:部署 Kubefed API 并容许 Kubefed Control Plane
  • Cluster Registration:经过 kubefedctl join 使得成员集群加入到主集群(Host Cluster)
  • Member Cluster:经过 KubeFed API 注册为成员并受 KubeFed 管理的集群,主集群(Host Cluster)也能够做为成员集群(Member Cluster)
  • ServiceDNSRecord: 记录 Kubernetes Service 信息,并经过 DNS 使其能够跨集群访问
  • IngressDNSRecord:记录 Kubernetes Ingress 信息,并经过 DNS 使其能够跨集群访问
  • DNSEndpoint:一个记录(ServiceDNSRecord/IngressDNSRecord 的) Endpoint 信息的自定义资源

架构

虽然 Federation v2 在设计上作了很是大的变动并省掉了 API Server ,但整体架构变更并不大,当将 Federation Control Plan 部署完成以后能够看到由两个组件构成:spa

$ kubectl -n kube-federation-system get deploy
NAME                         READY   UP-TO-DATE   AVAILABLE   AGE
kubefed-admission-webhook    1/1     1            1            3s
kubefed-controller-manager   2/2     2            2            3s
复制代码

admission-webhook 提供了准入控制,controller-manager 处理自定义资源以及协调不一样集群间的状态。

工做原理

在逻辑上,Federation v2 分为两个大部分:configuration 和 propagation。

configuration 的设计明显吸收了 v1 的教训,将不少会变化的内容配置化,configuration 主要包含两个配置:

  • Type configuration:用来描述将被联邦托管的资源类型
  • Cluster configuration:用来保存被联邦托管的集群的 API 认证信息

对于 Type configuration,联邦 v2 是下足了功夫,包含三个关键部分:

  • Templates 用于描述被联邦的资源
  • Placement 用来描述将被部署的集群
  • Overrides 容许对部分集群的部分资源进行覆写

以上基本上完成了资源的定义并为 propagation 提供了资源描述。除此以外,Federation v2 还支持定义部署策略和调度规则,实现更精细的管理。

上手

Kubefed 使用参考:《使用 Kubernetes 联邦(Kubefed)进行多集群管理

参考

相关文章
相关标签/搜索