集群架构、部署和配置——K8S高可用部署方案

K8S的高可用性分成以下三个方面:

1. 应用层的高可用性

2. etcd数据存储的高可用性

3. Kubernates Master组件的高可用性

应用层的高可用性:

Kubernates作为容器应用的管理平台,通过对Pod的运行状况进行监控,并且根据主机或容器失效的状态将新的Pod调度到其他Node上,实现了应用层的高可用性。

etcd数据存储的高可用性:

etcd在整个Kubernates集群中处于中心数据库的地位。一方面,etcd需要以集群的方式进行部署,以实现etcd数据存储的冗余、备份与高可用,官方建议是规划至少三台节点的etcd集群;另一方面,etcd存储的数据本身也应考虑使用可靠的存储设备,RAID磁盘阵列、高性能存储设备、共享存储文件系统,或者使用云服务商提供的存储系统等来实现。

Kubernates Master组件的高可用性

Master扮演着总控中心的角色,主要的三个服务kube-apiserver, kube-controller-manager, kube-scheduler通过不断与工作节点上的kubelet和kube-proxy进行通信来维护整个集群的健康工作状态。

(1)Kubernetes API Server的核心功能是提供Kubernetes各类资源对象(如Pod、RC、Service等)的增、删、改、查及Watch等HTTP Rest接口。

(2)Controller Manager通过API Server提供的(List - Watch)接口实时监控集群中特定资源的状态变化,当发生各种故障导致某资源对象的状态发生变化时,Controller会尝试将其状态调整为期望的状态。

(3)Scheduler将待调度的Pod通过一些复杂的调度流程计算出最佳目标节点,然后绑定到该节点上,即将绑定信息写入etcd中。

Master组件的高可用性是通过将三个服务负载均衡到多个节点中而实现的,有两种方案:

(1)堆叠方案

etcd服务和控制平面被部署在同样的节点中,对基础设施的要求较低,对故障的应对能力也较低


(2)外置etcd方案

etcd和控制平面被分离,需要更多的硬件,也有更好的保障能力


总的来说,第一种就是把所有服务都分别放在了master单点上,第二种是把etcd集群拆出来,每个etcd是个物理机。当物理机个数有限的时候,只能考虑第一种方案;如果物理资源充足,第二种方案更加的稳健。另外负载均衡,由Kubernates社区推荐的方案HAProxy和Keepalived部署到Master节点中实现。

你可能感兴趣的:(集群架构、部署和配置——K8S高可用部署方案)