将用户集群迁移到 Controlplane V2

本文档介绍如何使用 kubeception 将 1.29 版或更高版本的用户集群迁移到 Controlplane V2。

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

关于用户集群控制平面

在 Google Distributed Cloud 1.13 版之前,用户集群的控制平面在管理员集群中的一个或多个节点上运行。这种控制平面称为 kubeception。在 1.13 版中,我们为新用户集群引入了 Controlplane V2。启用 Controlplane V2 后,用户集群的控制平面在用户集群本身中运行。

Controlplane V2 的优势包括:

  • 故障隔离。管理员集群故障不会影响用户集群。

  • 运维分离。管理员集群升级不会导致用户集群停机。

  • 部署分离。您可以将管理员集群和用户集群放在不同的故障域或地理站点中。例如,边缘位置中的用户集群可能与管理员集群位于不同的地理站点。

使用要求

如需将用户集群迁移到 Controlplane V2,用户集群必须满足以下要求:

  • 用户集群必须为 1.29 版或更高版本。管理员集群和节点池可以比用户集群低一个或两个次要版本。如果需要,请升级集群

  • 用户集群必须启用 Dataplane V2。此字段不可变,因此如果集群未启用 Dataplane V2,您无法将其迁移到 Controlplane V2。

  • 用户集群必须配置为使用 MetalLB 或手动负载均衡器。如果用户集群使用 SeeSaw 负载均衡器,您可以将其迁移到 MetalLB

  • 查看 IP 地址规划文档,并确保您有足够的 IP 地址可供用户集群的控制平面节点使用。控制平面节点需要静态 IP 地址,您将需要为新的控制平面虚拟 IP (VIP) 提供一个额外的 IP 地址。

更新用户集群配置文件

对现有用户集群配置文件进行以下更改:

  1. enableControlplaneV2 设置为 true。

  2. (可选)使 Controlplane V2 用户集群的控制平面具备高可用性 (HA)。要从非高可用性集群更改为高可用性集群,请将 masterNode.replicas 从 1 更改为 3。

  3. 将用户集群控制平面节点的静态 IP 地址添加到 network.controlPlaneIPBlock.ips 部分。

  4. network.controlPlaneIPBlock 部分中填写网络掩码和网关。

  5. 填写 network.hostConfig 部分(如果为空)。

  6. 如果用户集群使用手动负载均衡,请将负载均衡器配置为包含控制平面节点 IP,以用于数据平面流量:

    • (ingressVIP:80) -> (CP_NODE_IP_ADDRESSES:ingressHTTPNodePort)
    • (ingressVIP:443) -> (CP_NODE_IP_ADDRESSES:ingressHTTPSNodePort)
  7. 使用控制平面 VIP 的新 IP 地址更新 loadBalancer.vips.controlPlaneVIP 字段。请注意,它必须与控制平面节点 IP 位于同一 VLAN。

  8. 除非更新集群以进行迁移,否则上述所有字段都是不可变的。请务必仔细检查所有设置。

  9. 运行 gkectl diagnose cluster,并解决该命令发现的任何问题。

    gkectl diagnose cluster --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
          --cluster-name=USER_CLUSTER_NAME

    请替换以下内容:

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

    • CLUSTER_NAME:用户集群的名称。

调整手动负载均衡器配置

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

与为 CPv2 用户集群配置负载均衡器类似,对于您在 network.controlPlaneIPBlock 部分中指定的三个新控制平面节点 IP 地址中的每一个,请在负载均衡器中配置映射:

  • (ingressVIP:80) -> (NEW_NODE_IP_ADDRESS:ingressHTTPNodePort)
  • (ingressVIP:443) -> (NEW_NODE_IP_ADDRESS:ingressHTTPNodePort)

更新集群

运行以下命令,将集群迁移到 ControlPlane V2:

gkectl update cluster \
    --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --config USER_CLUSTER_CONFIG

请替换以下内容:

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

  • USER_CLUSTER_CONFIG:用户集群配置文件的路径。

该命令将执行以下操作:

  1. 创建启用了 ControlPlane V2 的新集群的控制平面。

  2. 停止 kubeception 集群的 Kubernetes 控制平面。

  3. 截取 kubeception 集群的 etcd 快照。

  4. 关闭 kubeception 集群的用户集群控制平面节点。请注意,考虑到故障恢复(即回退到 kubeception 集群),在迁移完成之前,这些节点不会被删除。

  5. 使用上述 etcd 快照恢复新控制平面中的集群数据。

  6. 将 kubeception 集群的节点池节点连接到新的控制平面,该控制平面可通过新的 controlPlaneVIP 访问。

  7. 协调已恢复的用户集群,以满足启用了 ControlPlane V2 的集群的最终状态。

Notes

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

  • 在迁移期间,用户集群控制平面会有一些停机时间。具体而言,从第 2 步到完成第 6 步期间,控制平面不可用。(根据我们的测试,停机时间不超过 7 分钟,但实际时长取决于您的基础设施。)

  • 迁移结束时,kubeception 集群的用户集群控制平面节点会被删除。如果管理员集群的 network.ipMode.type 设置为“static”,您可以通过从管理员集群配置文件中移除一些未使用的静态 IP 来回收这些 IP 地址,然后运行 gkectl update admin。您可以使用 kubectl get nodes -o wide 列出管理员集群节点对象,以查看正在使用的 IP。