将管理员集群迁移到高可用性

本文档介绍如何从非高可用性 (HA) 管理员集群迁移到高可用性 (HA) 管理员集群。

1.29:预览
1.28:不可用
1.16:不可用

一个高可用性管理员集群有三个控制平面节点,但没有插件节点。一个非高可用性管理员集群有一个控制平面节点和两个插件节点。

过程概览

以下是迁移中涉及的主要步骤:

  1. 修改管理员集群配置文件。

  2. 运行 gkectl update admin。此命令执行以下操作:

    • 启动外部集群(种类)并确保当前的非高可用性管理员集群处于正常运行状态。

    • 使用高可用性规范和新的控制平面 VIP 创建新的管理员集群控制平面。

    • 关闭现有的管理员集群控制平面。

    • 截取现有管理员集群的 etcd 快照。

    • 在新的高可用性控制平面中恢复旧的管理员集群数据。

    • 协调已恢复的管理员集群,以达到高可用性管理员集群的最终状态。

Notes

  • 在迁移期间,用户集群工作负载不会发生停机。

  • 在迁移期间,管理员集群控制平面会有一些停机。(根据我们的测试,停机时间不到 18 分钟,但实际的停机时间取决于各个基础架构环境)。

  • 高可用性管理员集群的要求仍然适用于非高可用性到高可用性迁移。也就是说,如果要将 Seesaw 负载均衡器用于非高可用性管理员集群,则必须先迁移到 MetalLB,然后再迁移到高可用性管理员集群。这是因为高可用性管理员集群不支持 Seesaw。

  • 迁移成功完成后,我们将为进行故障恢复而故意保留一些剩余资源(例如非高可用性管理员主虚拟机)。您可以根据需要手动清理这些文件。

迁移前后

迁移前后集群中的主要差异如下:

迁移前迁移后
控制平面节点副本13
插件节点20
控制平面 Pod 副本
(kube-apiserver、kube-etcd 等)
13
数据磁盘大小100GB * 125GB * 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 地址

  1. 在管理员集群配置文件中,填写 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"
    
  2. 填写 hostconfig 部分。如果您的管理员集群使用静态 IP 地址,则此部分已填写。例如:

    hostConfig:
     dnsServers:
     – 203.0.113.1
     – 198.51.100.1
     ntpServers:
     – 216.239.35.12
    
  3. loadBalancer.vips.controlPlaneVIP 的值替换为新的 VIP。例如:

    loadBalancer:
     vips:
       controlPlaneVIP: "172.16.20.59"
    

更新其他配置字段

  1. adminMaster.replicas 设置为 3

    adminMaster:
     replicas: 3
     cpus: 4
     memoryMB: 8192
    
  2. 移除 vCenter.dataDisk 字段。这是因为对于高可用性管理员集群,控制平面节点使用的三个数据磁盘的路径将在数据存储区的根目录 anthos 下自动生成。

  3. 如果 loadBalancer.manualLB.controlPlaneNodePort 具有非零值,则将其设置为 0

调整手动负载均衡器配置

如果您的管理员集群使用手动负载均衡,请执行本部分中的步骤。否则,请跳过此部分。

针对您在 network.controlPlaneIPBlock 部分中指定的三个新控制平面节点 IP 地址,在负载均衡器中分别配置以下映射:

(旧 controlPlaneVIP:443)-> (NEW_NODE_IP_ADDRESS:old controlPlaneNodePort)

这样,旧的控制平面 VIP 就可以在迁移期间正常运行。

更新管理员集群

  1. 开始迁移:

    gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG
    

    请替换以下内容:

    • ADMIN_CLUSTER_KUBECONFIG:管理员集群 kubeconfig 文件的路径。

    • ADMIN_CLUSTER_CONFIG:管理员集群配置文件的路径

  2. 该命令会显示迁移进度。

    出现提示时,输入 Y 以继续。

  3. 迁移完成后,管理员集群 kubeconfig 文件会自动更新以使用新的控制平面 VIP。同时,旧的控制平面 VIP 仍然正常运行,并且可用于访问新的高可用性管理员集群。

根据需要手动清理剩余资源

在迁移期间,gkectl 不会删除管理员集群控制平面虚拟机。而是会关停虚拟机,而不会将其从 vSphere 中删除。如果要在成功迁移后删除旧的控制平面虚拟机,则必须手动进行删除。

如需手动删除旧的控制平面虚拟机和相关资源,请执行以下操作:

  1. 确保非高可用性管理员主虚拟机“gke-admin-master-xxx”已关机。
  2. 从 vSphere 中删除非高可用性管理员主虚拟机 gke-admin-master-xxx
  3. 从 vSphere 中删除非高可用性管理员主虚拟机模板 gke-admin-master-xxx-tmpl
  4. 删除非高可用性管理数据磁盘和管理检查点文件。
  5. 清理保存在 /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