Multi-Node 模式安装 KubeSphere 可以帮助用户顺利地部署一个多节点集群用于开发和测试,在实际的生产环境我们还需要考虑 master 节点的高可用问题,因为如果 master 节点上的几个服务 kube-apiserver、kube-scheduler 和 kube-controller-manager 都是单点的而且都位于同一个节点上,一旦 master 节点宕机,可能不应答当前正在运行的应用,将导致 KubeSphere 集群无法变更,对线上业务存在很大的风险。
负载均衡器 (Load Balancer) 可以将来自多个公网地址的访问流量分发到多台主机上,并支持自动检测并隔离不可用的主机,从而提高业务的服务能力和可用性。用户可以使用任何云厂商提供的负载均衡器或相关的 LB 硬件设备,还可以通过 Keepalived 和 Haproxy 的方式实现多个 master 节点的高可用部署。
而 etcd 作为一个高可用键值存储系统,整个集群的持久化数据,则由 kube-apiserver 处理后保存到 etcd 中。etcd 节点至少需要 1 个,但部署多个 etcd (奇数个) 能够使集群更可靠。本文档以配置 QingCloud 云平台 的 负载均衡器 (Load Balancer) 为例,引导您如何配置高可用的 master 节点,并说明如何配置和部署高可用的 etcd 集群。
前提条件
- 请确保已参阅 Multi-Node 模式,本文档仅说明安装过程中如何修改配置文件来配置 master 节点高可用,该配置作为一个可选配置项,完整的安装流程和配置文件中的参数解释说明以 Multi-Node 模式 为准。
- 本示例以 QingCloud 云平台 的负载均衡器作为高可用部署的演示,请预先申请 QingCloud 云平台 账号(您也可以使用其它任何云厂商提供的负载均衡器)。
Master 和 etcd 节点高可用架构
本示例准备了 6 台主机,主机规格参考 Multi-Node 模式 - 节点规格,将在其中 3 台部署 Master 和 etcd 集群,可编辑主机配置文件 conf/hosts.ini
来配置 Master 和 etcd 的高可用。
准备负载均衡器
以创建 QingCloud 云平台负载均衡器为例,简单说明其创建步骤,详细介绍可参考 QingCloud 官方文档。
第一步:创建负载均衡器
登录 QingCloud 云平台,在 网络与 CDN 选择 负载均衡器,填写基本信息。如下示例在北京 3 区 - C 创建一个负载均衡器,部署方式选择 单可用区
,网络选择了集群主机所在的 VPC 网络的私有网络 (例如本示例的六台主机都在 kubesphere 私有网络中),其它设置保持默认即可。填写基本信息后,点击 提交 完成创建。
第二步:创建监听器
进入上一步创建成功的负载均衡器,为其创建一个监听器,监听 TCP 协议的 6443 端口,监听的端口号也可以是其它任意端口,但在 vars.yml 中配置应与 port 一致,监听器的基本信息应参考如下填写。
- 监听协议:选择 TCP 协议
- 端口:填写 6443 端口
- 负载方式:选择轮询
注意:创建监听器后请检查负载均衡器的防火墙规则,确保
6443
端口已添加至防火墙规则并且外网流量可以通过,否则外网无法访问该端口的服务,安装可能会失败。
第三步:添加后端
在当前的负载均衡器中点击 添加后端,私有网络选择集群主机所在的私有网络,点击 高级搜索,可以一次勾选多台后端主机,例如要通过负载均衡器实现 Master 节点的高可用,此处则勾选 master1、master2、master3 这三台 Master 主机,注意这里端口需填写 6443
,它是 api-server 的默认端口 (Secure Port),添加完成后点击 提交。
添加后端后,需请点击 应用修改 使之生效,可以在列表查看目前负载均衡器的添加的三台 Master 节点。注意,刚添加完的后端主机状态在监听器中可能显示 “不可用”,是因为 api-server 对应的 6443 服务端口还未运行开放,这属于正常现象。待安装成功后,后端主机上的 api-server 的服务端口 6443 将被暴露出来,后端状态变为 “活跃”,说明负载均衡器已在正常工作。
修改主机配置文件
可在如下示例的 [kube-master] 和 [etcd] 部分填入主机名 master1、master2、master3 作为高可用的 Master 和 etcd 集群。注意,etcd 节点个数需要设置为 奇数个
,由于 etcd 内存本身消耗比较大,部署到工作节点 (node) 上很容易出现资源不足,因此不建议在工作节点上部署 etcd 集群。为了对待部署目标机器及部署流程进行集中化管理配置,集群中各个节点在主机配置文件 hosts.ini
中应参考如下配置,建议使用 root
用户安装。
以下示例在 CentOS 7.5 上使用 root
用户安装,若以非 root 用户 (如 ubuntu ) 进行安装,可参考主机配置文件的注释 non-root
示例部分编辑。
说明:
- 若以非 root 用户 (如 ubuntu 用户) 进行安装,可参考配置文件
conf/hosts.ini
的注释中non-root
用户示例部分编辑。- 如果在 taskbox 使用 root 用户无法 ssh 连接到其他机器,也需要参考
conf/hosts.ini
的注释中non-root
用户示例部分,但执行安装脚本install.sh
时建议切换到 root 用户,如果对此有疑问可参考 安装常见问题 - 问题 2。
host.ini 配置示例
[all]
master1 ansible_connection=local ip=192.168.0.1
master2 ansible_host=192.168.0.2 ip=192.168.0.2 ansible_ssh_pass=PASSWORD
master3 ansible_host=192.168.0.3 ip=192.168.0.3 ansible_ssh_pass=PASSWORD
node1 ansible_host=192.168.0.4 ip=192.168.0.4 ansible_ssh_pass=PASSWORD
node2 ansible_host=192.168.0.5 ip=192.168.0.5 ansible_ssh_pass=PASSWORD
node3 ansible_host=192.168.0.6 ip=192.168.0.6 ansible_ssh_pass=PASSWORD
[kube-master]
master1
master2
master3
[kube-node]
node1
node2
node3
[etcd]
master1
master2
master3
[k8s-cluster:children]
kube-node
kube-master
配置负载均衡器参数
在 QingCloud 云平台准备好负载均衡器后,需在 vars.yaml
配置文件中修改相关参数。假设负载均衡器的内网 IP 地址是 192.168.0.10
(这里需替换为您的负载均衡器实际 IP 地址),负载均衡器设置的 TCP 协议的监听端口 (port) 为 6443
,那么在 conf/vars.yml
中参数配置参考如下示例 (loadbalancer_apiserver
作为可选配置项,在配置文件中应取消注释)。
- 注意,address 和 port 在配置文件中应缩进两个空格。
- 负载均衡器的域名默认为 “lb.kubesphere.local”,供集群内部访问。如果需要修改域名则先取消注释再自行修改。
vars.yml 配置示例
## External LB example config
## apiserver_loadbalancer_domain_name: "lb.kubesphere.local"
loadbalancer_apiserver:
address: 192.168.0.10
port: 6443
完成 master 和 etcd 高可用的参数配置后,请继续参阅 Multi-Node 模式 - 存储配置示例 在 vars.yml 中配置持久化存储相关参数,并继续多节点的安装。