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

本页面介绍了如何从版本为 1.29 的非高可用性 (HA) 管理员集群迁移到高可用性 (HA) 管理员集群。

1.29:预览版
1.28:不可用

在迁移之前和之后,管理员集群有三个节点:

  • 非高可用性管理员集群有一个控制平面节点和两个插件节点。
  • 高可用性管理员集群有三个控制平面节点,但没有插件节点,因此可用性得到显著提高。

迁移准备工作

如果管理员集群版本为 1.29.0-1.29.600 或 1.30.0-1.30.100,并且您在版本为 1.14 或更低版本的管理员集群中启用了始终开启的 Secret 加密,则您必须先轮替加密密钥,然后再开始迁移。否则,新的高可用性管理员集群将无法解密 Secret。

如需检查集群是否可能使用旧的加密密钥,请执行以下操作:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get secret -n kube-system admin-master-component-options -o jsonpath='{.data.data}' | base64 -d | grep -oP '"GeneratedKeys":\[.*?\]'

如果输出显示空密钥(如以下示例所示),则必须轮替加密密钥。

"GeneratedKeys":[{"KeyVersion":"1","Key":""}]

按需轮替加密密钥

如果上一部分中的步骤显示您需要轮替加密密钥,请执行以下步骤:

  1. 管理员集群配置文件中增加 keyVersion

  2. 更新管理员集群:

    gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
      --config ADMIN_CLUSTER_CONFIG
    

    这将创建与新版本号匹配的新密钥,重新加密每个 Secret,并安全地清除旧 Secret。所有后续的新 Secret 均使用新的加密密钥进行加密。

过程概览

迁移涉及以下主要步骤:

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

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

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

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

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

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

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

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

备注

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

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

  • 对高可用性管理员集群的要求仍然适用于从非高可用性管理员集群到高可用性管理员集群的迁移。例如,高可用性管理员集群不支持 Seesaw,因此如果您将 Seesaw 负载均衡器用于非高可用性管理员集群,则必须先迁移到 MetalLB,然后才能迁移到高可用性管理员集群。

  • 迁移成功完成后,会有意地保留非高可用性管理员主虚拟机等剩余资源,以备故障恢复之用。

迁移前后

下表显示了集群在迁移前后的主要差异:

迁移前迁移后
控制平面节点副本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 或静态 IP,具体取决于 network.ipMode.type 3 个 静态 IP 地址
kubeception 用户集群控制平面节点分配 IP 地址 DHCP 或静态 IP,具体取决于 network.ipMode.type DHCP 或静态 IP,具体取决于 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 地址中的每一个,请在负载均衡器中配置以下映射:

(old 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 会继续运行,并且还可用于访问新的高可用性管理员集群。