本页面介绍了用于配置高可用 (HA) Kubernetes 集群拓扑的两种选项。
您可以按以下方式搭建 HA 集群:
在搭建 HA 集群之前,您应该仔细考虑每种拓扑的优缺点。
堆叠式 HA 集群是一种拓扑结构,其中 etcd 提供的分布式数据存储集群堆叠在由 kubeadm 管理的运行控制平面组件的节点所形成的集群之上。
每个控制平面节点都会运行 kube-apiserver、kube-scheduler 和 kube-controller-manager 的一个实例。kube-apiserver 通过负载均衡器暴露给工作节点。
每个控制平面节点都会创建一个本地 etcd 成员,该 etcd 成员仅与当前节点的 kube-apiserver 通信。本地的 kube-controller-manager 和 kube-scheduler 实例也是如此。
这种拓扑将控制平面和 etcd 成员耦合在同一节点上。与使用外部 etcd 节点的集群相比,它更易于设置,且在复制管理方面也更简单。
然而,堆叠式集群存在耦合失效的风险。如果一个节点宕机,etcd 成员和控制平面实例都会丢失,冗余也会受到影响。您可以通过增加更多的控制平面节点来降低这种风险。
因此,对于 HA 集群,您至少应该运行三个堆叠式控制平面节点。
这是 kubeadm 中的默认拓扑。当使用 kubeadm init 和 kubeadm join --control-plane 时,会自动在控制平面节点上创建本地 etcd 成员。
具有外部 etcd 的 HA 集群是一种拓扑结构,其中 etcd 提供的分布式数据存储集群位于运行控制平面组件的节点所形成的集群外部。
与堆叠式 etcd 拓扑一样,外部 etcd 拓扑中的每个控制平面节点也会运行 kube-apiserver、kube-scheduler 和 kube-controller-manager 的一个实例。且 kube-apiserver 同样通过负载均衡器暴露给工作节点。然而,etcd 成员在独立的主机上运行,每个 etcd 主机与每个控制平面节点的 kube-apiserver 进行通信。
这种拓扑将控制平面和 etcd 成员解耦。因此,它提供了一种 HA 设置,在这种设置中,丢失一个控制平面实例或 etcd 成员的影响较小,不像堆叠式 HA 拓扑那样严重影响集群冗余。
然而,这种拓扑所需的主机数量是堆叠式 HA 拓扑的两倍。对于采用此拓扑的 HA 集群,至少需要三个控制平面节点主机和三个 etcd 节点主机。