将 VPC 原生集群迁移到 GKE Dataplane V2

您可以使用本文档将现有的 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。

  1. 检查集群状态:

    gcloud container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --format='value(networkConfig.datapathProvider)'
    

    替换以下内容:

    • CLUSTER_NAME:集群的名称。
    • LOCATION:集群的计算位置。
  2. 检查节点池状态:

    gcloud container node-pools list \
        --cluster=CLUSTER_NAME \
        --location=LOCATION \
        --format='value(name, networkConfig.datapathProvider)'
    

    替换以下内容:

    • CLUSTER_NAME:集群的名称。
    • LOCATION:集群的计算位置。
  3. 检查 anetd DaemonSet 以验证代理是否正在运行:

    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 会自动将节点池修补回旧版数据路径,然后最终确定集群。

  1. 观察 anetd 运行状况:在回滚迁移之前,请检查 代理是否正在运行,以确定是否可以缓解故障。

    kubectl get ds -n kube-system anetd
    
  2. 取消正在进行的节点池操作:

    1. 找出并取消任何会阻止集群修补请求的正在运行的节点池操作。

      gcloud container operations list \
          --location=LOCATION \
          --filter="operationType=UPGRADE_NODES AND status=RUNNING AND targetLink:*/clusters/CLUSTER_NAME"
      

      替换以下内容:

      • LOCATION:集群的计算位置。
      • CLUSTER_NAME:集群的名称。
    2. 使用操作 ID 取消操作:

      gcloud container operations cancel OPERATION_ID \
          --location=LOCATION
      

      替换以下内容:

      • OPERATION_ID:正在运行的操作的 ID。
      • LOCATION:集群的计算位置。
  3. 启动回滚:发出集群修补请求,将 迁移恢复到 Dataplane V1。

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --no-enable-dataplane-v2
    

    替换以下内容:

    • CLUSTER_NAME:集群的名称。
    • LOCATION:集群的计算位置。
  4. 观察节点池发布:检查节点池状态,以验证是否已迁移到旧版数据路径。

    gcloud container node-pools list \
        --cluster=CLUSTER_NAME \
        --location=LOCATION \
        --format='value(name, networkConfig.datapathProvider)'
    

    替换以下内容:

    • CLUSTER_NAME:集群的名称。
    • LOCATION:集群的计算位置。

    在回滚期间,命令输出会显示已修补节点池的 LEGACY_DATAPATH 状态。

  5. 观察最终确定:在所有节点池都迁移到 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 会自动重新尝试迁移这些节点池。如果您手动修补节点池,请等待,并在资源可用时稍后重试迁移。

后续步骤