云原生系列(六)

简介: 云原生系列(六)

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拓扑

939887de56a2ed6dd97fc90c51661bc5.png

主要特点:

①、具有外部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

相关文章
|
敏捷开发 运维 Kubernetes
云原生到底是什么?
前言 最近老是看到云原生这个概念,闲暇之余也去了解了一下!看了很多文章,对云原生的解释总是迷迷糊糊,看完云里雾里,经过博主的大量查阅,用我的理解总结一下。
1089 0
云原生到底是什么?
|
Kubernetes Cloud Native Serverless
什么是云原生?聊聊云原生的前世今生
什么是云原生,云原生是在一个怎么样的背景下被提出来的,云原生和传统所说的云计算概念有什么不同?聊聊云原生的前世今生那些事。
2466 0
|
1月前
|
运维 Kubernetes Cloud Native
探索云原生应用的未来之路
【10月更文挑战第2天】在数字化浪潮中,云原生技术如同一艘扬帆起航的巨轮,正引领着企业和应用开发者驶向更广阔的大海。本文将深入浅出地探讨云原生的核心概念、优势及其在实际中的应用案例,同时提供代码示例,帮助读者更好地理解和运用云原生技术,共同迎接数字化转型的新浪潮。
|
2月前
|
Kubernetes Cloud Native API
云原生系列(五)
云原生系列(五)
|
2月前
|
Kubernetes Cloud Native 调度
云原生系列(八)
云原生系列(八)
|
2月前
|
Kubernetes Cloud Native API
云原生系列(七)
云原生系列(七)
|
2月前
|
Cloud Native 调度 数据库
云原生系列(九)
云原生系列(九)
|
2月前
|
Cloud Native Linux 网络安全
云原生系列(二)
云原生系列(二)
|
2月前
|
Cloud Native 持续交付 Docker
云原生系列(一)
云原生系列(一)
|
存储 弹性计算 运维
云原生应用有哪些
云原生应用有哪些
208 0