K8S的高可用部署架构
可以设置HA集群
①、使用堆叠(stacked)控制平面节点,其中etcd节点与控制平面节点共存。
②、使用外部etcd节点,其中etcd节点与控制平面不同的节点上运行
在设置HA集群之前,应该仔细考虑每种拓扑的优缺点。
堆叠(Stacked) etcd拓扑
主要特点:
①、etcd分布式数据存储集群堆叠在kubeadm管理的控制平面节点上,作为控制平面的一个组件运行。
②、每个控制平面节点运行kube-apiserver,kube-scheduler和kube-controller-manager实例。
③、kube-apiserver使用LB暴漏给工作节点
④、每个控制平面节点创建一个本地的etcd成员(member),这个etcd成员只与该节点的Kube-apiserver通信。这同样适用于本地kube-controller-manager和kube-scheduler实例。
⑤、简单概括:每个master节点上运行一个apiserver和etcd,etcd只与本地apiserver通信。
⑥、这种拓扑将控制平面和etcd成员耦合在同一个节点上,相对使用外部etcd集群,设置起来更简单,而且更易于副本管理。
⑦、然而堆叠集群存在耦合失败的风险,如果一个节点发生故障,则etcd成员和控制平面的实力都将丢失,并且冗余会受到影响,可以通过添加更多平面节点来降低此风险,应该为HA集群运行至少三个堆叠的控制平面节点(防止脑裂)
⑧、这是kubeadm中的默认拓扑,当使用kubeadm init和kubeadm join --control-plane时,在控制平面节点上会自动创建本地etcd成员、
⑨、工作节点 worker node通过负载均衡组件load balancer,由于worker节点和master节点之间的通讯协议是Http协议,无论是http1.0还是1.2都是通过nginx来做负载均衡的,LoadBalancer可以使nginx如果要保证load balancer的高可用,还需要在nginx加上keep Alive,来保证nginx的高可用,然后由woker来访问高可用的nginx的虚拟IP:来实现APIServer的高可用。
⑩、那么在资源足够的情况下:每个master节点是个独立的虚拟机器,如果其中一个挂了,那么这个集群是可用的。如果资源不够的情况下,这三个节点也可以通过业务资源pod调度的每个工作节点大概120G的内存,大概有5个,16核的CPU。
外部etcd拓扑
主要特点:
①、具有外部etcd的HA集群是一种这样的拓扑,其中etcd分布式数据存储集群在独立于控制平面节点的其他节点上运行
②、就像堆叠的etcd拓扑一样,外部etcd拓扑中的每个控制平面节点都运行Kube-apiserver,kube-scheduler和kube-controller-manager实例。
③、同样kube-apiserver使用负载均衡器暴漏给工作节点,但是,etcd成员在不同的主机上运行,每个etcd主机与每个控制平面节点的kube-apiserver通信。
④、简单概括:etcd集群运行在单独的主机上,每个etcd都与apiserver节点通信。
⑤、这种拓扑结构解耦了控制平面和etcd成员。
因此,它提供了一种HA集群,其中失去控制平面实例或者etcd成员的影响较小,并且不会像堆叠的HA拓扑那样影响集群冗余。
1、但是,此拓扑需要两倍于堆叠HA拓扑的主机数量,具有此拓扑的HA集群至少需要2个用于控制平面节点的主机和二个用于etcd节点的主机
2、需要单独设置外部etcd集群, 把元数据存储的组件给解耦 etcd,类似zookeeper,通过配置属性里面写好etcd的地址,master就不管etcd了,使用外部的etcd,这个时候有一个好处,比如说etcd给其他组件:hot key用。不是被k8s独占,这种方式是更加高可用的。
var first_sceen__time = (+new Date()); if ("" == 1 && document.getElementById('js_content')) { document.getElementById('js_content').addEventListener("selectstart",function(e){ e.preventDefault(); }); }
阅读 22