目录

Kubernetes之master高可用方案

之前一直用使用的负载方案是搭建一台负载均衡器,可以是haproxy或nginx或lvs,来将多个master节点的6443端口做个负载均衡,但是考虑到负载均衡也需要高可用,所以会引入类似keepalived的方案来解决问题。偶然看到了kubeasz这个开源项目,宣称解决了master高可用问题,部署了一遍发现并没有额外搭建负载均衡器,研究了一下,发现了另一种思路。

使用额外的负载均衡来做高可用

这种就是比较容易想到的一种方案,比如3个master节点,前面有一台负载均衡(nginx、haproxy、lvs)等,但是负载均衡本身就是一个单点故障,所以一般来说还需要另一台负载均衡,通过keepalived来实现VIP的切换

/images/lb_keepalived.png

在每台worker节点上部署负载均衡

是看到了有些开源项目不用额外的负载均衡器也可以完成master高可用
方案就是在worker节点上安装负载均衡,架构图如下

/images/worker_lb.jpg

global
        log /dev/log    local1 warning
        chroot /var/lib/haproxy
        user haproxy
        group haproxy
        daemon
        nbproc 1

defaults
        log     global
        timeout connect 5s
        timeout client  10m
        timeout server  10m

listen kube_master
        bind 127.0.0.1:6443
        mode tcp
        option tcplog
        option dontlognull
        option dontlog-normal
        balance roundrobin
        server 192.168.13.117 192.168.13.117:6443 check inter 10s fall 2 rise 2 weight 1
        server 192.168.13.118 192.168.13.118:6443 check inter 10s fall 2 rise 2 weight 1
        server 192.168.13.119 192.168.13.119:6443 check inter 10s fall 2 rise 2 weight 1

监听的是127.0.0.1:6443,这样配置k8s apiserver地址就是127.0.0.1,所有的worker都连接本地的6443端口,然后负载到3台master,这样不用担心负载均衡挂掉,挂掉也只会影响自己,缺点就是配置文件需要管理,不优雅。