您可以使用本文档将现有的 Google Kubernetes Engine (GKE) VPC 原生集群从 Dataplane V1 迁移到 GKE Dataplane V2,监控迁移,并在需要时回滚迁移。
本文档适用于负责管理 GKE 集群的网络配置的平台管理员和运维人员以及网络专家。
在开始之前,请参阅 关于迁移到 GKE Dataplane V2,了解每个迁移阶段会发生什么情况,以及如何 规划工作负载中断。
准备工作
在启动迁移之前,请验证您的集群是否符合资格要求,并考虑对工作负载的影响。
验证您的集群是否满足以下要求:
- 集群是 VPC 原生集群。
- 集群运行的是 1.35.3-gke.1155000 或更高版本。
- 节点池运行的是 1.35.1-gke.1516000 或更高版本。
- 如果您使用的是 Cloud Service Mesh 或开源 Istio,则 Istio 版本为 1.23 或更高版本。
准备集群
在开始迁移之前,请完成以下任务:
- 移除 NetworkPolicy:移除现有网络政策。如果 GKE 在重新创建节点时突然强制执行网络政策,您可能会遇到意外的网络中断。
- Calico 网络政策:如果您使用的是启用了网络政策 (Calico) 的 GKE Standard 集群,请停用 网络政策 强制执行功能。 您无法直接迁移这些集群。
- Active Assist 建议:检查 Active Assist 或集群详情页面,了解可能与 迁移冲突的建议。
- IP 地址容量:验证集群的 Pod IP 地址范围是否具有
足够的容量来满足节点池升级策略。如需了解详情,
请参阅 GKE IP 地址利用率
数据分析。
- 网络功能:在开始迁移之前或迁移完成后,启用 NodeLocal DNSCache 或节点内可见性等网络功能。您无法在迁移期间启用这些功能。
了解限制
- 锁定的网络配置:开始迁移后,您 无法更改集群范围的网络配置,直到迁移 完成。
- 维护窗口:迁移遵循维护窗口和 维护排除项,因此可能会出现停滞。如需加快迁移速度,您可以手动修补节点池。如需了解相关步骤,请参阅加快迁移速度。
- 可选 GKE Dataplane V2 功能:在迁移完成后,配置可选 GKE Dataplane V2 功能,例如 GKE Dataplane V2 可观测性或对 Pod 的多网络支持 。
- Terraform:您无法使用 Terraform 迁移到 GKE Dataplane V2。
启动迁移
如需手动启动迁移并绕过自动诊断检查,您可以使用 Google Cloud CLI 修补集群。
运行以下命令:
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--enable-dataplane-v2
替换以下内容:
CLUSTER_NAME:集群的名称。LOCATION:集群的计算位置。
观察迁移进度
您可以通过检查 datapathProvider 字段来监控迁移状态。
在转换期间,此字段会显示 MIGRATE_TO_ADVANCED_DATAPATH。
检查集群状态:
gcloud container clusters describe CLUSTER_NAME \ --location=LOCATION \ --format='value(networkConfig.datapathProvider)'替换以下内容:
CLUSTER_NAME:集群的名称。LOCATION:集群的计算位置。
检查节点池状态:
gcloud container node-pools list \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --format='value(name, networkConfig.datapathProvider)'替换以下内容:
CLUSTER_NAME:集群的名称。LOCATION:集群的计算位置。
检查
anetdDaemonSet 以验证代理是否正在运行:kubectl get ds -n kube-system anetd
加快迁移速度
如需绕过自动发布时间表,您可以选择手动修补节点池。
如需手动修补节点池,请运行以下命令:
gcloud container node-pools update NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--datapath-provider=advanced-datapath
替换以下内容:
NODE_POOL_NAME:节点池的名称。CLUSTER_NAME:集群的名称。LOCATION:集群的计算位置。
完成迁移
在所有节点池都迁移到 GKE Dataplane V2 后,GKE 会自动完成迁移。迁移完成后,命令输出会显示 ADVANCED_DATAPATH 状态,并且集群运行的是 GKE Dataplane V2。
如需观察完成情况,请检查集群状态:
gcloud container clusters describe CLUSTER_NAME \
--location=LOCATION \
--format='value(networkConfig.datapathProvider)'
替换以下内容:
CLUSTER_NAME:集群的名称。LOCATION:集群的计算位置。
迁移完成后,输出会显示 ADVANCED_DATAPATH。
回滚迁移
您可以在最终确定阶段完成之前的任何时间将迁移恢复到 Dataplane V1。回滚迁移是正向迁移的对称过程:启动回滚后,GKE 会自动将节点池修补回旧版数据路径,然后最终确定集群。
观察
anetd运行状况:在回滚迁移之前,请检查 代理是否正在运行,以确定是否可以缓解故障。kubectl get ds -n kube-system anetd取消正在进行的节点池操作:
找出并取消任何会阻止集群修补请求的正在运行的节点池操作。
gcloud container operations list \ --location=LOCATION \ --filter="operationType=UPGRADE_NODES AND status=RUNNING AND targetLink:*/clusters/CLUSTER_NAME"替换以下内容:
LOCATION:集群的计算位置。CLUSTER_NAME:集群的名称。
使用操作 ID 取消操作:
gcloud container operations cancel OPERATION_ID \ --location=LOCATION替换以下内容:
OPERATION_ID:正在运行的操作的 ID。LOCATION:集群的计算位置。
启动回滚:发出集群修补请求,将 迁移恢复到 Dataplane V1。
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --no-enable-dataplane-v2替换以下内容:
CLUSTER_NAME:集群的名称。LOCATION:集群的计算位置。
观察节点池发布:检查节点池状态,以验证是否已迁移到旧版数据路径。
gcloud container node-pools list \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --format='value(name, networkConfig.datapathProvider)'替换以下内容:
CLUSTER_NAME:集群的名称。LOCATION:集群的计算位置。
在回滚期间,命令输出会显示已修补节点池的
LEGACY_DATAPATH状态。观察最终确定:在所有节点池都迁移到 Dataplane V1 后,GKE 会自动完成迁移。 如需观察完成情况,请检查集群状态:
gcloud container clusters describe CLUSTER_NAME \ --location=LOCATION \ --format='value(networkConfig.datapathProvider)'替换以下内容:
CLUSTER_NAME:集群的名称。LOCATION:集群的计算位置。
回滚完成后,命令输出会显示
LEGACY_DATAPATH状态。
排查迁移问题
本部分提供的信息可帮助您排查和解决迁移到 GKE Dataplane V2 时可能遇到的常见问题。
节点池迁移失败
迁移节点池时,GKE 会使用配置的超额配置升级或蓝绿升级策略来创建新节点,然后再删除旧节点。如果您的 Google Cloud 可用区没有足够的资源来预配
新节点,迁移会失败,并显示 GCE_STOCKOUT 或
ZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS 错误。GKE 会自动重新尝试迁移这些节点池。如果您手动修补节点池,请等待,并在资源可用时稍后重试迁移。
后续步骤
- 如需详细了解 GKE Dataplane V2 可观测性,请参阅 GKE Dataplane V2 可观测性。