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集群---Flannel网络和keepalived+haproxy高可用)