在阿里云部署了Kubernetes集群,购买了SLB用于API负载均衡。阿里云的SLB负载均衡不支持ECS即当服务器端又当客户端,这会造成我们的Master节点在访问API时恰好回路到原节点会出现timeout情况。这种情况下只能Worker节点使用SLB转发到API,而Master节点最省事的方式就是在每个节点上自建一套HAProxy负载均衡到其余Master节点。
而采用容器化Docker方式快速部署HAProxy非常非常容易
首先新建一个目录供HAProxy使用
mkdir /etc/haproxy
接着,新建一个配置文件
vim /etc/haproxy/haproxy.cfg
复制一下内容到/etc/haproxy/haproxy.cfg
文件中
global
log 127.0.0.1 local0 err
maxconn 50000
uid 99
gid 99
#daemon
nbproc 1
pidfile haproxy.pid
defaults
mode http
log 127.0.0.1 local0
maxconn 50000
retries 3
timeout connect 5s
timeout client 30s
timeout server 30s
timeout check 2s
frontend k8s-api
bind *:8443
mode tcp
default_backend k8s-api
backend k8s-api
mode tcp
balance roundrobin
server node4 172.16.7.120:6443 weight 1 minconn 100 maxconn 50000 check inter 5000 rise 2 fall 5
server node5 172.16.7.118:6443 weight 2 minconn 100 maxconn 50000 check inter 5000 rise 2 fall 5
server node6 172.16.7.121:6443 weight 3 minconn 100 maxconn 50000 check inter 5000 rise 2 fall 5
以上配置请根据自己的实际情况配置,尤其是监听端口号以及balance的算法,我以上配置使用的是加权算法,HAProxy还支持很多算法。
最后,我们只需要一条命令就可以启动HAProxy
docker run -d --name k8s-api-haproxy -v /etc/haproxy:/usr/local/etc/haproxy:ro -p 8443:8443 --restart always haproxy:2.0.13-alpine
以上的--restart always
选项用于容器进程挂掉,或者及其宿主机重启等任何非Runnig/Up状态时会自动重启。