本节介绍如何在生产环境中为 KubeSphere 企业版集群配置多个控制平面节点,以防止单个控制平面节点故障时集群服务中断,从而实现高可用性。如果您的 KubeSphere 企业版集群没有高可用性需求,您可以跳过本节。

说明

KubeSphere 企业版高可用性配置仅支持同时安装 Kubernetes 和 KubeSphere 企业版的场景。如果您在现有的 Kubernetes 集群上安装 KubeSphere 企业版,KubeSphere 企业版安装完成后将使用 Kubernetes 集群现有的高可用性配置。

本节介绍以下高可用性配置方式:

  • 使用本地负载均衡配置。您可以在安装 KubeSphere 企业版的过程中,设置 KubeKey 工具在工作节点上安装 HAProxy 作为各控制平面节点的反向代理,所有工作节点的 Kubernetes 组件将通过 HAProxy 连接各控制平面节点。这种方式需要额外的健康检查机制,所以相较其他方式运行效率有所降低,但可以用于没有专用负载均衡器且服务器数量有限的场景。

  • 使用专用负载均衡器。您可以使用云环境提供的负载均衡器作为各控制平面节点的反向代理。这种方式要求 KubeSphere 企业版集群安装在云环境中,并且云环境可以提供专用负载均衡器。

  • 使用通用服务器作为负载均衡器。您可以在集群节点以外的 Linux 服务器上安装 Keepalived 和 HAProxy 作为负载均衡器。这种方式需要至少 2 台额外的 Linux 服务器。

使用本地负载均衡配置

如需使用 HAProxy 实现高可用性,只需要在安装 KubeSphere 企业版时在安装配置文件 config-sample.yaml 中设置以下参数:

spec:
  controlPlaneEndpoint:
    internalLoadbalancer: haproxy
    domain: lb.kubesphere.local
    address: ""
    port: 6443

KubeKey 将自动在工作节点上安装 HAProxy 并完成高可用配置,您无需进行其他操作。有关更多信息请参阅安装 Kubernetes 和 KubeSphere 企业版

使用专用负载均衡器

如需使用云环境提供的专用负载均衡器实现高可用性,您需要在云环境中进行以下操作:

  1. 在云环境中创建一台至少包含两个副本的负载均衡器。

  2. 设置负载均衡器监听 KubeSphere 企业版集群各控制平面节点的 6443 端口。

  3. 获取负载均衡器的 IP 地址,供后续安装 KubeSphere 企业版时使用。

有关具体操作,请参阅云环境的用户指南或联系您的云服务提供商。

使用通用服务器作为负载均衡器

以下介绍如何使用 Keepalived 和 HAProxy 将通用服务器配置成负载均衡器。

前提条件

  • 您需要准备 2 台与集群节点属于同一私有网络的 Linux 服务器,用作负载均衡器。

  • 您需要准备一个虚拟 IP 地址(VIP)用作 2 台负载均衡器服务器的浮动 IP 地址。该地址不应被其他设备或组件占用以免出现地址冲突。

配置高可用性

  1. 登录用作负载均衡器的服务器,执行以下命令安装 HAProxy 和 Keepalived(以下以 Ubuntu 操作系统为例,在其他操作系统中请将 apt 替换为操作系统对应的软件包管理工具):

    apt install keepalived haproxy psmisc -y
  2. 执行以下命令编辑 HAProxy 的配置文件:

    vi /etc/haproxy/haproxy.cfg
  3. 在 HAProxy 的配置文件中添加以下信息并保存文件(将 <IP address> 替换为 KubeSphere 企业版集群各控制平面节点的私网 IP 地址):

    global
        log /dev/log  local0 warning
        chroot      /var/lib/haproxy
        pidfile     /var/run/haproxy.pid
        maxconn     4000
        user        haproxy
        group       haproxy
        daemon
    
       stats socket /var/lib/haproxy/stats
    
    defaults
      log global
      option  httplog
      option  dontlognull
            timeout connect 5000
            timeout client 50000
            timeout server 50000
    
    frontend kube-apiserver
      bind *:6443
      mode tcp
      option tcplog
      default_backend kube-apiserver
    
    backend kube-apiserver
        mode tcp
        option tcplog
        option tcp-check
        balance roundrobin
        default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100
        server kube-apiserver-1 <IP address>:6443 check
        server kube-apiserver-2 <IP address>:6443 check
        server kube-apiserver-3 <IP address>:6443 check
  4. 执行以下命令重启 HAProxy:

    systemctl restart haproxy
  5. 执行以下命令设置 HAProxy 开机后自动运行:

    systemctl enable haproxy
  6. 执行以下命令编辑 Keepalived 的配置文件:

    vi /etc/keepalived/keepalived.conf
  7. 在 Keepalived 的配置文件中添加以下信息并保存文件:

    global_defs {
      notification_email {
      }
      router_id LVS_DEVEL
      vrrp_skip_check_adv_addr
      vrrp_garp_interval 0
      vrrp_gna_interval 0
    }
    
    vrrp_script chk_haproxy {
      script "killall -0 haproxy"
      interval 2
      weight 2
    }
    
    vrrp_instance haproxy-vip {
      state BACKUP
      priority 100
      interface <NIC>
      virtual_router_id 60
      advert_int 1
      authentication {
        auth_type PASS
        auth_pass 1111
      }
      unicast_src_ip <source IP address>
      unicast_peer {
        <peer IP address>
      }
    
      virtual_ipaddress {
        <floating IP address>
      }
    
      track_script {
        chk_haproxy
      }
    }

    将以下参数替换为实际值:

    参数 描述

    <NIC>

    当前负载均衡器的网卡名称。

    <source IP address>

    当前负载均衡器的 IP 地址。

    <peer IP address>

    另一台负载均衡器的 IP 地址。

    <floating IP address>

    用作浮动 IP 地址的虚拟 IP 地址。

  8. 执行以下命令重启 Keepalived:

    systemctl restart keepalived
  9. 执行以下命令设置 Keepalived 开机后自动运行:

    systemctl enable keepalived
  10. 重复以上步骤在另一台负载均衡器服务器上安装、配置 HAProxy 和 Keepalived。

  11. 记录浮动 IP 地址,供后续安装 KubeSphere 企业版时使用。

验证高可用性

  1. 登录第一台负载均衡器服务器并执行以下命令查看浮动 IP 地址:

    ip a s

    如果系统高可用性正常,命令回显中将显示已配置的浮动 IP 地址。例如,在以下命令回显中,inet 172.16.0.10/24 scope global secondary eth0 表明浮动 IP 地址已与 eth0 网卡绑定:

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 52:54:9e:27:38:c8 brd ff:ff:ff:ff:ff:ff
        inet 172.16.0.2/24 brd 172.16.0.255 scope global noprefixroute dynamic eth0
           valid_lft 73334sec preferred_lft 73334sec
        inet 172.16.0.10/24 scope global secondary eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::510e:f96:98b2:af40/64 scope link noprefixroute
           valid_lft forever preferred_lft forever
  2. 执行以下命令模拟当前负载均衡器服务器故障:

    systemctl stop haproxy
  3. 执行以下命令再次检查浮动 IP 地址:

    ip a s

    如果系统高可用性正常,命令回显中将不再显示浮动 IP 地址,如以下命令回显所示:

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 52:54:9e:27:38:c8 brd ff:ff:ff:ff:ff:ff
        inet 172.16.0.2/24 brd 172.16.0.255 scope global noprefixroute dynamic eth0
           valid_lft 72802sec preferred_lft 72802sec
        inet6 fe80::510e:f96:98b2:af40/64 scope link noprefixroute
           valid_lft forever preferred_lft forever
  4. 登录另一台负载均衡器服务器,执行以下命令查看浮动 IP 地址:

    ip a s

    如果系统高可用性正常,命令回显中将显示已配置的浮动 IP 地址。例如,在以下命令回显中,inet 172.16.0.10/24 scope global secondary eth0 表明浮动 IP 地址已与 eth0 网卡绑定:

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 52:54:9e:3f:51:ba brd ff:ff:ff:ff:ff:ff
        inet 172.16.0.3/24 brd 172.16.0.255 scope global noprefixroute dynamic eth0
           valid_lft 72690sec preferred_lft 72690sec
        inet 172.16.0.10/24 scope global secondary eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::f67c:bd4f:d6d5:1d9b/64 scope link noprefixroute
           valid_lft forever preferred_lft forever
  5. 在第一台负载均衡器服务器上执行以下命令恢复运行 HAProxy:

    systemctl start haproxy