本文档介绍如何使用 kubeception 将 1.29 版或更高版本的用户集群迁移到 Controlplane V2。
1.30:正式版
1.29:预览版
1.28:不可用
关于用户集群控制平面
在 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 地址。
更新用户集群配置文件
对现有用户集群配置文件进行以下更改:
将
enableControlplaneV2
设置为 true。(可选)使 Controlplane V2 用户集群的控制平面具备高可用性 (HA)。要从非高可用性集群更改为高可用性集群,请将
masterNode.replicas
从 1 更改为 3。将用户集群控制平面节点的静态 IP 地址添加到
network.controlPlaneIPBlock.ips
部分。在
network.controlPlaneIPBlock
部分中填写网络掩码和网关。填写
network.hostConfig
部分(如果为空)。如果用户集群使用手动负载均衡,请将
loadBalancer.manualLB.controlPlaneNodePort
和loadBalancer.manualLB.konnectivityServerNodePort
设置为 0,因为在 Controlplane V2 启用时不需要它们。使用控制平面 VIP 的新 IP 地址更新
loadBalancer.vips.controlPlaneVIP
字段。请注意,它必须与控制平面节点 IP 位于同一 VLAN。除非更新集群以进行迁移,否则上述所有字段都是不可变的。请务必仔细检查所有设置。
运行
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
:用户集群配置文件的路径。
该命令将执行以下操作:
创建启用了 ControlPlane V2 的新集群的控制平面。
停止 kubeception 集群的 Kubernetes 控制平面。
截取 kubeception 集群的 etcd 快照。
关闭 kubeception 集群的用户集群控制平面节点。请注意,考虑到故障恢复(即回退到 kubeception 集群),在迁移完成之前,这些节点不会被删除。
使用上述 etcd 快照恢复新控制平面中的集群数据。
将 kubeception 集群的节点池节点连接到新的控制平面,该控制平面可通过新的
controlPlaneVIP
访问。协调已恢复的用户集群,以满足启用了 ControlPlane V2 的集群的最终状态。
备注
在迁移期间,用户集群工作负载不会出现停机时间。
在迁移期间,用户集群控制平面会有一些停机时间。具体而言,从第 2 步到完成第 6 步期间,控制平面不可用。(根据我们的测试,停机时间不超过 7 分钟,但实际时长取决于您的基础设施。)
迁移结束时,kubeception 集群的用户集群控制平面节点会被删除。如果管理员集群的 network.ipMode.type 设置为“static”,您可以通过从管理员集群配置文件中移除一些未使用的静态 IP 来回收这些 IP 地址,然后运行
gkectl update admin
。您可以使用kubectl get nodes -o wide
列出管理员集群节点对象,以查看正在使用的 IP。