首页 > 技术文章 > Kubernetes高可用集群搭建方式

determined-K 2021-05-08 16:23 原文

 

第一种  对叠拓扑也是Kubeadm中的默认拓扑

 

堆叠(Stacked) HA 集群是一种这样的拓扑,其中 etcd 分布式数据存储集群堆叠在 kubeadm 管理的控制平面节点上,作为控制平面的一个组件运行。

每个控制平面节点运行 kube-apiserverkube-scheduler 和 kube-controller-manager 实例。

kube-apiserver 使用负载均衡器暴露给工作节点。

每个控制平面节点创建一个本地 etcd 成员(member),这个 etcd 成员只与该节点的 kube-apiserver 通信。这同样适用于本地 kube-controller-manager 和 kube-scheduler 实例。

这种拓扑将控制平面和 etcd 成员耦合在同一节点上。相对使用外部 etcd 集群,设置起来更简单,而且更易于副本管理。

然而,堆叠集群存在耦合失败的风险。如果一个节点发生故障,则 etcd 成员和控制平面实例都将丢失,并且冗余会受到影响。您可以通过添加更多控制平面节点来降低此风险。(和etcd集群特性有关)

因此,您应该为 HA 集群运行至少三个堆叠的控制平面节点。(三个主节点后测试发现即使没一个etcd或者管理平面也没影响,不过etcd这种始终是用容器部署的,而且管理挂了,虽然看pod正常,但是控制器之类的会有相关异常体现)

这是 kubeadm 中的默认拓扑。当使用 kubeadm init 和 kubeadm join --control-plane 时,在控制平面节点上会自动创建本地 etcd 成员。

 

特别注意:在Kubeadm init的时候有一个--control-plane-endpoint,意思为控制平面指定一个稳定的 IP 地址或 DNS 名称。而这种高可用急需这个参数,如果制定的是单独的IP那么主api-server挂了就彻底访问不了了,如果是VIP确是另一副场景

 

 

 

第二种  所谓的外部etcd集群

 

 

具有外部 etcd 的 HA 集群是一种这样的拓扑,其中 etcd 分布式数据存储集群在独立于控制平面节点的其他节点上运行。

 

就像堆叠的 etcd 拓扑一样,外部 etcd 拓扑中的每个控制平面节点都运行 kube-apiserverkube-scheduler 和 kube-controller-manager 实例。同样, kube-apiserver 使用负载均衡器暴露给工作节点。但是,etcd 成员在不同的主机上运行,​​每个 etcd 主机与每个控制平面节点的 kube-apiserver 通信。

 

这种拓扑结构解耦了控制平面和 etcd 成员。因此,它提供了一种 HA 设置,其中失去控制平面实例或者 etcd 成员的影响较小,并且不会像堆叠的 HA 拓扑那样影响集群冗余。

 

但是,此拓扑需要两倍于堆叠 HA 拓扑的主机数量。

 

具有此拓扑的 HA 集群至少需要三个用于控制平面节点的主机和三个用于 etcd 节点的主机。

 

 

 

 

参考:Kubernetes官网

 

推荐阅读