Kubernetes HA方案对比
文章目录
方案选择
Kubernetes Master服务的HA方式,主要包括以下两种类型:
-
负载均衡器模式:Master节点上部署负载均衡器对外提供统一访问的vip。
-
Local Proxy:Worker节点部署代理服务,对apiserver负载均衡。
1. 负载均衡模式
负载均衡模式是官方推荐的HA方案,根据环境的不同LoadBalancer有不同的实现手段:
-
云主机上部署Kubernetes时,可以使用云服务商提供的LB服务代理到apiserver
-
私有机房中部署时,使用 keeaplived + haproxy 方案作为load balancer。前者提供VIP并监听本节点上haproxy服务,后者将流量分散到各个apiserver实现负载均衡。
以下图片是负载均衡模式下的拓扑关系:
2. Local Proxy 模式
Local Proxy 模式的思路是:**将loadbalancer部署到每一个worker节点,从而移除对VIP的依赖。**这种方案中不需要部署Keepalived,同样能实现apiserver的高可用以及负载均衡。
Github上目前找到Local Proxy有两种实现:
- fanux/sealos:Go实现的K8S离线安装工具,基于ipvs实现4层负载均衡
- easzlab/kubeasz:基于ansible的K8S离线安装工具,基于haproxy实现7层的负载均衡
上述两个工具均是国内作者维护的,并且在star都还不少。
1. Sealos
Sealos 中每个 Kubelet 通过域名 apiserver.cluster.local 访问APIServer,安装包在会Master和Worker节点的**/etc/hosts**文件上劫持该域名:
- Master节点:apiserver.cluster.local –> 本机内网IP
- Worker节点:**apiserver.cluster.local –> 10.103.97.2 **
Worker节点上 apiserver.cluster.local 指向一个vip(默认是10.103.97.2),并配置了相应的ipvs规则。通过以下命令可以查看:
|
|
Worker节点上Sealos工具会通过 Static Pod 额外部署 lvscare 服务。该服务会在当前节点自动创建ipvs规则,并且监听Master节点的apiserver,动态更新本节点上ipvs后端。
PS:项目地址sealyun/lvscare
高可用场景下Sealos集群的拓扑如下图:
2. kubeasz
kubeasz实现Master HA的方案如下图,其中每个worker节点上的haproxy是使用static pod的方式部署的:
方案比较
方案 | 优势 | 劣势 | 稳定性 |
---|---|---|---|
云服务商浮动IP | - | 私有环境不能使用 | 高 |
Keepalived + Haproxy | VIP在集群内/外都可访问 | 需要在特定网络环境才能正常工作(Keepalived基于VRRP协议工作,并且通过组播的方式广播心跳) | 一般 |
Local-Proxy IPVS 实现 | 只依赖内核的ipvs服务,稳定性高; 实现比较简单 | VIP只能在集群内访问,集群外访问存在单点故障(直接访问某个Master的IP) | 高 |
Local-Proxy Haproxy 实现 | 实现比较简单 | 引入了HaProxy作为七层负载,稳定不如IPVS方案 | 一般 |
补充
kube-vip/kube-vip 是一个比较完善的HA部署方案,也可以作为备选参考。
文章作者 yoaz
上次更新 2021-08-30
许可协议 MIT