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

2019/10/21 16:28 pm posted in  Kubernetes

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

Federation v1 为什么被弃用

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

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

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

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

Controller Manager 协调不同集群之间的状态,通过与成员集群的 Api Server 通讯,来统筹管理所有的 Kubernetes 成员集群。

Federation v1 整体的架构和 Kubernetes 自身的架构还是很像的,并将成员集群作为一种资源进行管理。但是因为 v1 一开始并没有设计到灵活的添加新 Kubernetes 资源以及 CRD,以至于每当创建一种新资源都要新增 Adapter。

本来资源设计的就非常不灵活,加之 RBAC 的支持问题,使得无法做到多集群资源的权限管理,因而流产,并为 v2 积累了宝贵的教训。

Federation v2 设计

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

基本概念

  • 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 部署完成之后可以看到由两个组件构成:

$ 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 还支持定义部署策略和调度规则,实现更精细的管理。

使用

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

参考