本文档介绍如何从非高可用性 (HA) 管理员集群迁移到高可用性 (HA) 管理员集群。
1.29:预览
1.28:不可用
1.16:不可用
一个高可用性管理员集群有三个控制平面节点,但没有插件节点。一个非高可用性管理员集群有一个控制平面节点和两个插件节点。
过程概览
以下是迁移中涉及的主要步骤:
修改管理员集群配置文件。
运行
gkectl update admin
。此命令执行以下操作:启动外部集群(种类)并确保当前的非高可用性管理员集群处于正常运行状态。
使用高可用性规范和新的控制平面 VIP 创建新的管理员集群控制平面。
关闭现有的管理员集群控制平面。
截取现有管理员集群的 etcd 快照。
在新的高可用性控制平面中恢复旧的管理员集群数据。
协调已恢复的管理员集群,以达到高可用性管理员集群的最终状态。
Notes
在迁移期间,用户集群工作负载不会发生停机。
在迁移期间,管理员集群控制平面会有一些停机。(根据我们的测试,停机时间不到 18 分钟,但实际的停机时间取决于各个基础架构环境)。
高可用性管理员集群的要求仍然适用于非高可用性到高可用性迁移。也就是说,如果要将 Seesaw 负载均衡器用于非高可用性管理员集群,则必须先迁移到 MetalLB,然后再迁移到高可用性管理员集群。这是因为高可用性管理员集群不支持 Seesaw。
迁移成功完成后,我们将为进行故障恢复而故意保留一些剩余资源(例如非高可用性管理员主虚拟机)。您可以根据需要手动清理这些文件。
迁移前后
迁移前后集群中的主要差异如下:
迁移前 | 迁移后 | |
---|---|---|
控制平面节点副本 | 1 | 3 |
插件节点 | 2 | 0 |
控制平面 Pod 副本 (kube-apiserver、kube-etcd 等) | 1 | 3 |
数据磁盘大小 | 100GB * 1 | 25GB * 3 |
数据磁盘路径 | 由管理员集群配置文件中的 vCenter.dataDisk 设置 | 在以下目录下自动生成:/anthos/[ADMIN_CLUSTER_NAME]/default/[MACHINE_NAME]-data.vmdk |
用于控制平面 VIP 的负载平衡器 | 由管理员集群配置文件中的 loadBalancer.kind 设置 | keepalived + haproxy |
为管理员集群控制平面节点分配 IP 地址 | DHCP 或静态协议,具体取决于 network.ipMode.type | 3 个静态 IP 地址 |
kubeception 用户集群控制平面节点的 IP 地址分配 | DHCP 或静态协议,具体取决于 network.ipMode.type | DHCP 或静态协议,具体取决于 network.ipMode.type |
检查点文件 | 默认处于启用状态 | 未被使用 |
修改管理员集群配置文件
您需要指定四个额外的 IP 地址:
- 管理员集群的控制平面节点的三个 IP 地址
- 为管理员集群负载均衡器添加新的控制平面 VIP
您还需要更改管理员集群配置文件中的一些其他字段。
指定 IP 地址
在管理员集群配置文件中,填写 network.controlPlaneIPBlock 部分。例如:
controlPlaneIPBlock: netmask: "255.255.255.0" gateway: "172.16.20.1" ips: – ip: "172.16.20.50" hostname: "admin-cp-node-1" – ip: "172.16.20.51" hostname: "admin-cp-node-2" – ip: "172.16.20.52" hostname: "admin-cp-node-3"
填写 hostconfig 部分。如果您的管理员集群使用静态 IP 地址,则此部分已填写。例如:
hostConfig: dnsServers: – 203.0.113.1 – 198.51.100.1 ntpServers: – 216.239.35.12
将 loadBalancer.vips.controlPlaneVIP 的值替换为新的 VIP。例如:
loadBalancer: vips: controlPlaneVIP: "172.16.20.59"
更新其他配置字段
将 adminMaster.replicas 设置为
3
:adminMaster: replicas: 3 cpus: 4 memoryMB: 8192
移除 vCenter.dataDisk 字段。这是因为对于高可用性管理员集群,控制平面节点使用的三个数据磁盘的路径将在数据存储区的根目录
anthos
下自动生成。如果 loadBalancer.manualLB.controlPlaneNodePort 具有非零值,则将其设置为
0
。
调整手动负载均衡器配置
如果您的管理员集群使用手动负载均衡,请执行本部分中的步骤。否则,请跳过此部分。
针对您在 network.controlPlaneIPBlock 部分中指定的三个新控制平面节点 IP 地址,在负载均衡器中分别配置以下映射:
(旧 controlPlaneVIP:443)-> (NEW_NODE_IP_ADDRESS:old controlPlaneNodePort)
这样,旧的控制平面 VIP 就可以在迁移期间正常运行。
更新管理员集群
开始迁移:
gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG
请替换以下内容:
ADMIN_CLUSTER_KUBECONFIG:管理员集群 kubeconfig 文件的路径。
ADMIN_CLUSTER_CONFIG:管理员集群配置文件的路径
该命令会显示迁移进度。
出现提示时,输入
Y
以继续。迁移完成后,管理员集群 kubeconfig 文件会自动更新以使用新的控制平面 VIP。同时,旧的控制平面 VIP 仍然正常运行,并且可用于访问新的高可用性管理员集群。
根据需要手动清理剩余资源
在迁移期间,gkectl
不会删除管理员集群控制平面虚拟机。而是会关停虚拟机,而不会将其从 vSphere 中删除。如果要在成功迁移后删除旧的控制平面虚拟机,则必须手动进行删除。
如需手动删除旧的控制平面虚拟机和相关资源,请执行以下操作:
- 确保非高可用性管理员主虚拟机“
gke-admin-master-xxx
”已关机。 - 从 vSphere 中删除非高可用性管理员主虚拟机
gke-admin-master-xxx
。 - 从 vSphere 中删除非高可用性管理员主虚拟机模板
gke-admin-master-xxx-tmpl
。 - 删除非高可用性管理数据磁盘和管理检查点文件。
- 清理保存在
/home/ubuntu/admin-ha-migration/[ADMIN_CLUSTER_NAME]/
中的临时文件。
如果首选使用 cli,则以下是 govc 命令:
// Configure govc credentials export GOVC_INSECURE=1 export GOVC_URL=VCENTER_URL export GOVC_DATACENTER=DATACENTER export GOVC_DATASTORE=DATASTORE export GOVC_USERNAME=USERNAME export GOVC_PASSWORD=PASSWORD // Configure admin master VM name (you can find the master VM name from the "[HA Migration]" logs) export ADMIN_MASTER_VM=ADMIN_MASTER_VM_NAME // Configure datadisk path (remove ".vmdk" suffix) export DATA_DISK_PATH=DATADISK_PATH_WITHOUT_VMDK // Check whether admin master is in "poweredOff" state: govc vm.info $ADMIN_MASTER_VM | grep Power // Delete admin master VM govc vm.destroy $ADMIN_MASTER_VM // Delete admin master VM template govc vm.destroy "$ADMIN_MASTER_VM"-tmpl // Delete data disk govc datastore.ls $DATA_DISK_PATH govc datastore.rm $DATA_DISK_PATH // Delete admin checkpoint file govc datastore.ls "$DATA_DISK_PATH"-checkpoint.yaml govc datastore.rm "$DATA_DISK_PATH"-checkpoint.yaml