部署高可用的 KubeSphere

Multi-Node 模式安装 KubeSphere 可以帮助用户顺利地部署一个多节点集群用于开发和测试,在实际的生产环境我们还需要考虑 master 节点的高可用问题,因为如果 master 节点上的几个服务 kube-apiserver、kube-scheduler 和 kube-controller-manager 都是单点的而且都位于同一个节点上,一旦 master 节点宕机,可能导致 Kubernetes 集群出故障和 KubeSphere 无法访问,对线上业务存在很大的风险。

负载均衡器 (Load Balancer) 可以将来自多个公网地址的访问流量分发到多台主机上,并支持自动检测并隔离不可用的主机,从而提高业务的服务能力和可用性。用户可以使用任何云厂商提供的负载均衡器或相关的 LB 硬件设备,还可以通过 Keepalived 和 Haproxy 的方式实现多个 master 节点的高可用部署。

本文档将在 QingCloud 云平台 创建 2负载均衡器 (Load Balancer),分别作为外网和内网的负载均衡,引导您如何配置生产级别的集群,实现 master 与 etcd 节点的高可用。

示例视频

前提条件

  • 请确保已参阅 Multi-Node 模式,本文档仅说明安装过程中如何修改配置文件来配置 master 节点高可用,完整的安装流程和配置文件中的参数解释说明以 Multi-Node 模式 为准。
  • 本示例以 QingCloud 云平台 的负载均衡器作为高可用部署的演示,请预先申请 QingCloud 云平台 账号(您也可以使用其它任何云厂商提供的负载均衡器)。

Master 和 etcd 节点高可用架构

本示例准备了 6 台主机,将创建 2 个负载均衡器,主机规格参考 Multi-Node 模式 - 节点规格,将在其中 3 台部署 Master 和 etcd 集群,可编辑主机配置文件 conf/hosts.ini

Master 和 etcd 节点高可用架构

准备负载均衡器

以创建 QingCloud 云平台负载均衡器为例,简单说明其创建步骤,详细介绍可参考 QingCloud 官方文档

第一步:创建内网负载均衡器

  • 登录 QingCloud 云平台,在 网络与 CDN 选择 负载均衡器,填写基本信息。创建内网负载均衡器

  • 如下示例先创建一个内网的负载均衡器,网络选择了集群主机所在的私有网络 (例如本示例的 6 台主机都在 kube 私有网络中),其它设置保持默认即可。填写基本信息后,点击 提交 完成创建。在青云安装 HA 集群 - 图2

  • 进入上一步创建成功的负载均衡器,为其创建一个监听器,监听协议为 TCP,端口设置 6443

注意:创建监听器后请检查负载均衡器的防火墙规则,确保 6443 端口已添加至防火墙规则并且外网流量可以通过,否则外网无法访问该端口的服务,安装可能会失败。

在青云安装 HA 集群 - 图3

  • 添加后端,其中私有网络本示例的 6 台主机都在的私有网络 kube,点击 高级搜索,然后勾选其中 3 台作为 master 角色的节点,端口设置为 6443,它是 api-server 的默认端口 (Secure Port)。在青云安装 HA 集群 - 图4

  • 点击提交,内网负载均衡器创建成功。点击 应用修改 使之生效,可以在列表查看目前负载均衡器的添加的三台 Master 节点。

注意,刚添加完的后端主机状态在监听器中可能显示 “不可用”,是因为 api-server 对应的 6443 服务端口还未运行开放,这属于正常现象。待安装成功后,后端主机上的 api-server 的服务端口 6443 将被暴露出来,后端状态变为 “活跃”,说明负载均衡器已在正常工作。

在青云安装 HA 集群 - 图5

第二步:创建外网负载均衡器

您需要预先创建一个 EIP。

说明:外网负载均衡器监听的 30880 端口,是 KubeSphere 控制台在集群每个节点上开启的访问入口。

  • 参考上述步骤,创建一个负载均衡器,并绑定公网 IP,其作为外网负载均衡器。
  • 进入上一步创建成功的负载均衡器,为其创建一个监听器,监听协议为 HTTP,端口设置 30880

注意:创建监听器后请检查负载均衡器的防火墙规则,确保 30880 端口已添加至防火墙规则并且外网流量可以通过,否则外网无法访问该端口的服务,安装可能会失败。

在青云安装 HA 集群 - 图6

  • 添加后端,本示例的 6 台主机都在的私有网络 kube,点击 高级搜索,然后勾选所有节点,端口设置为 30880
  • 点击提交,外网负载均衡器创建成功。点击 应用修改 使之生效,可以在列表查看目前负载均衡器的添加的 6 台节点。在青云安装 HA 集群 - 图7

修改主机配置文件

可在如下示例的 [kube-master] 和 [etcd] 部分填入主机名 master1、master2、master3 作为高可用的 Master 和 etcd 集群。注意,etcd 节点个数需要设置为 奇数个,由于 etcd 内存本身消耗比较大,部署到工作节点 (node) 上很容易出现资源不足,因此不建议在工作节点上部署 etcd 集群。为了对待部署目标机器及部署流程进行集中化管理配置,集群中各个节点在主机配置文件 hosts.ini 中应参考如下配置,建议使用 root 用户安装。

以下示例在 CentOS 7.5 上使用 root 用户安装。

说明:

  • 若以非 root 用户 (如 ubuntu 用户) 进行安装,可参考配置文件 conf/hosts.ini 的注释中 non-root 用户示例部分编辑。
  • 如果在 taskbox 使用 root 用户无法 ssh 连接到其他机器,也需要参考 conf/hosts.ini 的注释中 non-root 用户示例部分,但执行安装脚本 install.sh 时建议切换到 root 用户,如果对此有疑问可参考 安装常见问题 - 问题 2

host.ini 配置示例

  1. [all]
  2. master1 ansible_connection=local ip=192.168.0.1
  3. master2 ansible_host=192.168.0.2 ip=192.168.0.2 ansible_ssh_pass=PASSWORD
  4. master3 ansible_host=192.168.0.3 ip=192.168.0.3 ansible_ssh_pass=PASSWORD
  5. node1 ansible_host=192.168.0.4 ip=192.168.0.4 ansible_ssh_pass=PASSWORD
  6. node2 ansible_host=192.168.0.5 ip=192.168.0.5 ansible_ssh_pass=PASSWORD
  7. node3 ansible_host=192.168.0.6 ip=192.168.0.6 ansible_ssh_pass=PASSWORD
  8. [kube-master]
  9. master1
  10. master2
  11. master3
  12. [kube-node]
  13. node1
  14. node2
  15. node3
  16. [etcd]
  17. master1
  18. master2
  19. master3
  20. [k8s-cluster:children]
  21. kube-node
  22. kube-master

配置负载均衡器参数

在 QingCloud 云平台准备好负载均衡器后,需在 common.yaml 配置文件中修改相关参数。假设内网负载均衡器的内网 VIP 地址是 192.168.0.253 (这里需替换为您的负载均衡器实际 IP 地址),负载均衡器设置的 TCP 协议的监听端口 (port) 为 6443,那么在 conf/common.yaml 中参数配置参考如下示例 (loadbalancer_apiserver 作为可选配置项,在配置文件中应取消注释)。

  • 注意,address 和 port 在配置文件中应缩进两个空格。并且 address 地址应填写 VIP(虚拟地址)。
  • 负载均衡器的域名默认为 "lb.kubesphere.local",供集群内部访问。如果需要修改域名则先取消注释再自行修改。

common.yaml 配置示例

  1. ## External LB example config
  2. ## apiserver_loadbalancer_domain_name: "lb.kubesphere.local"
  3. loadbalancer_apiserver:
  4. address: 192.168.0.253
  5. port: 6443

完成 master 和 etcd 高可用的参数配置后,请继续参阅 Multi-Node 模式 - 存储配置示例 在 common.yaml 中配置持久化存储相关参数,并继续多节点的安装。