方案选择

Kubernetes Master服务的HA方式,主要包括以下两种类型:

  • 负载均衡器模式Master节点上部署负载均衡器对外提供统一访问的vip。

  • Local ProxyWorker节点部署代理服务,对apiserver负载均衡。

1. 负载均衡模式

负载均衡模式是官方推荐的HA方案,根据环境的不同LoadBalancer有不同的实现手段:

  • 云主机上部署Kubernetes时,可以使用云服务商提供的LB服务代理到apiserver

  • 私有机房中部署时,使用 keeaplived + haproxy 方案作为load balancer。前者提供VIP并监听本节点上haproxy服务,后者将流量分散到各个apiserver实现负载均衡。

    以下图片是负载均衡模式下的拓扑关系:

image-20210330141257898

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规则。通过以下命令可以查看:

1
2
3
4
5
6
7
8
9
ipvsadm -Ln

Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
  
TCP  10.103.97.2:6443 rr
  -> 192.168.0.1:6443          Masq    1      0          0      # Master 节点1上的apiservice地址
  -> 192.168.0.2:6443          Masq    1      0          0      # Master 节点2上的apiservice地址
  -> 192.168.0.3:6443          Masq    1      0          0      # Master 节点3上的apiservice地址

Worker节点上Sealos工具会通过 Static Pod 额外部署 lvscare 服务。该服务会在当前节点自动创建ipvs规则,并且监听Master节点的apiserver,动态更新本节点上ipvs后端。

PS:项目地址sealyun/lvscare

高可用场景下Sealos集群的拓扑如下图:

image-20210330133555763

2. kubeasz

kubeasz实现Master HA的方案如下图,其中每个worker节点上的haproxy是使用static pod的方式部署的:

image-20210330133555763

方案比较

方案 优势 劣势 稳定性
云服务商浮动IP - 私有环境不能使用
Keepalived + Haproxy VIP在集群内/外都可访问 需要在特定网络环境才能正常工作(Keepalived基于VRRP协议工作,并且通过组播的方式广播心跳) 一般
Local-Proxy IPVS 实现 只依赖内核的ipvs服务,稳定性高; 实现比较简单 VIP只能在集群内访问,集群外访问存在单点故障(直接访问某个Master的IP)
Local-Proxy Haproxy 实现 实现比较简单 引入了HaProxy作为七层负载,稳定不如IPVS方案 一般

补充

kube-vip/kube-vip 是一个比较完善的HA部署方案,也可以作为备选参考。