k8s高可用部署:keepalived + haproxy

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s高可用部署:keepalived + haproxy相关的知识,希望对你有一定的参考价值。

参考技术A

最近依照网上不少文章部署K8s高可用集群,遇到了一些麻烦,在这里记录下来。

根据K8s官方文档将HA拓扑分为两种,Stacked etcd topology(堆叠ETCD)和External etcd topology(外部ETCD)。 https://kubernetes.cn/docs/setup/production-environment/tools/kubeadm/ha-topology/#external-etcd-topology

堆叠ETCD : 每个master节点上运行一个apiserver和etcd, etcd只与本节点apiserver通信。

外部ETCD : etcd集群运行在单独的主机上,每个etcd都与apiserver节点通信。

官方文档主要是解决了高可用场景下apiserver与etcd集群的关系, 三master节点防止单点故障。但是集群对外访问接口不可能将三个apiserver都暴露出去,一个挂掉时还是不能自动切换到其他节点。官方文档只提到了一句“使用负载均衡器将apiserver暴露给工作程序节点”,而这恰恰是生产环境中需要解决的重点问题。

Notes: 此处的负载均衡器并不是kube-proxy,此处的Load Balancer是针对apiserver的。

下面以一个实验验证高可用性。准备三台机器以及一个vip(阿里云,openstack等都有提供)。

haproxy提供高可用性,负载均衡,基于TCP和HTTP的代理,支持数以万记的并发连接。 https://github.com/haproxy/haproxy
haproxy可安装在主机上,也可使用docker容器实现。文本采用第二种。

创建配置文件/etc/haproxy/haproxy.cfg,重要部分以中文注释标出:

在三个节点启动haproxy

keepalived是以VRRP(虚拟路由冗余协议)协议为基础, 包括一个master和多个backup。 master劫持vip对外提供服务。master发送组播,backup节点收不到vrrp包时认为master宕机,此时选出剩余优先级最高的节点作为新的master, 劫持vip。keepalived是保证高可用的重要组件。

keepalived可安装在主机上,也可使用docker容器实现。文本采用第二种。( https://github.com/osixia/docker-keepalived )

配置keepalived.conf, 重要部分以中文注释标出:

启动keepalived:

查看keepalived master容器日志:

查看master vip:

可以看到vip已绑定到keepalived master

下面进行破坏性测试:

暂停keepalived master节点haproxy

查看keepalived master日志

可以看到haproxy检测失败,priority降低,同时另一节点10.53.61.195 priority 比master节点高,master置为backup

查看10.53.61.195 keepalived日志:

可以看到10.53.61.195被选举为新的master。

至此高可用实验完成,接下来就是使用kubeadm安装k8s组件,这里就不展开了。

以上是关于k8s高可用部署:keepalived + haproxy的主要内容,如果未能解决你的问题,请参考以下文章

k8s高可用部署后续:SLB

第三篇(二进制部署k8s集群---Flannel网络和keepalived+haproxy高可用)

高可用的K8s,部署java

部署k8s ssl集群实践6:配置高可用kube-apiserver组件ha+keepalived

K8S高可用之Sealos

k8s高可用环境部署-1.17.3版本