本文将介绍用于配置高可用(highly available (HA))Kubernetes 集群拓扑的两个选项
在配置高可用集群之前,应该仔细考虑每种拓扑的优缺点
注意:
kubeadm
会静态地启动 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 拓扑中的每个控制平面节点都会运行 kube-apiserver
、kube-scheduler
和 kube-controller-manager
实例
同样,kube-apiserver
使用负载均衡器暴露给工作节点
但是 etcd 成员在不同的主机上运行
每个 etcd 主机与每个控制平面节点的 kube-apiserver 通信
这种拓扑结构解耦了控制平面与 etcd 成员
因此它提供了一种高可用设置,失去控制平面实例或 etcd 成员的影响较小
并且不会像堆叠的高可用拓扑那样影响集群冗余
但这种拓扑需要两倍于堆叠高可用拓扑的主机数量
这种拓扑的高可用集群至少需要 3 个作为控制平面节点的主机和 3 个作为 etcd 节点的主机