高可用拓扑选项
本页解释了配置高可用(HA)Kubernetes 集群拓扑结构的两种选项。
你可以设置一个高可用集群
- 使用堆叠式控制平面节点,其中 etcd 节点与控制平面节点部署在一起
- 使用外部 etcd 节点,其中 etcd 运行在独立于控制平面的节点上
在设置高可用集群之前,你应该仔细考虑每种拓扑结构的优缺点。
注意
kubeadm 静态引导 etcd 集群。请阅读 etcd 集群指南了解更多详情。堆叠式 etcd 拓扑结构
堆叠式高可用集群是一种拓扑结构,其中 etcd 提供的分布式数据存储集群堆叠在由运行控制平面组件的 kubeadm 管理的节点形成的集群之上。
每个控制平面节点运行一个 kube-apiserver
、kube-scheduler
和 kube-controller-manager
实例。kube-apiserver
通过负载均衡器暴露给工作节点。
每个控制平面节点创建一个本地 etcd 成员,此 etcd 成员仅与该节点的 kube-apiserver
通信。本地的 kube-controller-manager
和 kube-scheduler
实例也是如此。
这种拓扑结构将控制平面和 etcd 成员耦合在同一节点上。与使用外部 etcd 节点的集群相比,它更易于设置,也更易于管理复制。
然而,堆叠式集群存在耦合失败的风险。如果一个节点发生故障, etcd 成员和控制平面实例都将丢失,冗余性也会受到影响。你可以通过添加更多控制平面节点来降低此风险。
因此,对于高可用集群,你至少应该运行三个堆叠式控制平面节点。
这是 kubeadm 中的默认拓扑结构。使用 kubeadm init
和 kubeadm join --control-plane
时,控制平面节点会自动创建一个本地 etcd 成员。
外部 etcd 拓扑结构
使用外部 etcd 的高可用集群是一种拓扑结构,其中 etcd 提供的分布式数据存储集群独立于运行控制平面组件的节点形成的集群。
与堆叠式 etcd 拓扑结构类似,外部 etcd 拓扑结构中的每个控制平面节点也运行一个 kube-apiserver
、kube-scheduler
和 kube-controller-manager
实例。并且 kube-apiserver
通过负载均衡器暴露给工作节点。然而,etcd 成员运行在独立的宿主机上,并且每个 etcd 宿主机与每个控制平面节点的 kube-apiserver
通信。
这种拓扑结构将控制平面与 etcd 成员解耦。因此,它提供了一种高可用设置,其中丢失一个控制平面实例或一个 etcd 成员的影响较小,并且不像堆叠式高可用拓扑结构那样严重影响集群冗余性。
然而,这种拓扑结构所需的宿主机数量是堆叠式高可用拓扑结构的两倍。使用此拓扑结构的高可用集群至少需要三个用于控制平面节点的宿主机和三个用于 etcd 节点的宿主机。