搭建高可用k8s集群

模式1:Stacked etcd topology

搭建高可用k8s集群
堆叠式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成员

模式2:External etcd topology

搭建高可用k8s集群
具有外部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节点的主机。