更新节点池

本主题介绍如何更新节点池。您可以出于以下原因更新节点池:

  • 升级节点池版本
  • 更改节点池中的节点数
  • 更改节点池注解(只能通过 API 更新)

您还可以更改上面未列出的节点池中的其他参数。如需查看您可以更新的参数的完整列表,请参阅 gcloud container azure node-pools updateprojects.locations.azureNodePools.patch 文档。

更新进程

本部分介绍 GKE on Azure 更新节点池时采用的流程。此过程因节点池所需的更改范围而异。

仅配置更新

如果 GKE on Azure 可以在不重启或重新创建任何资源的情况下更新节点池,则会进行这些更改。例如,更新节点池的注解不会重启任何实例。

滚动更新

如果对节点池的更改需要重启现有虚拟机(例如,在更新 Kubernetes 版本时),则 GKE on Azure 会执行以下步骤:

  1. 使用新配置修改节点池的虚拟机规模集。
  2. 选择要更新的一个节点的底层实例。
  3. GKE on Azure 会封锁并排空该节点。此时,无法在目标节点上调度新的 Pod。 目标节点上的现有 Pod 对象会被重新调度到其他节点上。 无法重新调度到任何其他现有节点上的 Pod 会保持待处理阶段,直到可以调度为止。
  4. 更新实例,从其虚拟机规模集中获取最新配置。
  5. 重置映像并重新启动实例。
  6. 等待此节点池中的所有节点都正常运行。
  7. 如果此节点池中的所有节点都健康,请选择其他节点,直到所有节点都更新为止。如果任何节点的健康状况不佳,则 GKE on Azure 会将节点池置于 DEGRADED 状态。如需了解详情,请参阅更新失败

在节点池滚动更新期间保护工作负载

在节点池滚动更新期间,GKE on Azure 会在节点开始排空后的最长一小时内遵循 PodDisruptionBudget
配置。一小时后,GKE on Azure 会删除节点上任何剩余的 Pod。

在滚动更新期间,GKE on Azure 会尽最大努力妥善关闭任何要重启或移除的节点,最长持续两小时。两小时后,如果节点上还有任何剩余的 Pod 对象,则 GKE on Azure 会删除该节点并重新映像底层虚拟机实例。

调整节点池的大小

GKE on Azure 节点池默认启用集群自动扩缩器。集群自动扩缩器会根据工作负载的需求自动调整节点池的大小。如需详细了解集群自动扩缩器,请参阅集群自动扩缩器

更改节点池中的节点数上限和下限时,GKE on Azure 会根据新配置和节点池的当前节点数来采取不同的操作。这些操作包括以下内容:

  • 如果节点池的当前节点数已在新范围内,则 GKE on Azure 不会更改池中的节点数量。

  • 如果新的节点数下限高于节点池的当前节点数,则 GKE on Azure 会添加更多节点,直到节点池达到新的最小大小为止。

  • 如果新的节点数上限小于节点池的当前节点数,则 GKE on Azure 会通过执行以下操作来减小节点池的大小:

    1. 将自动扩缩配置更新为节点池中设置的虚拟机规模
    2. 选择要移除的节点
    3. 封锁并排空节点
    4. 删除底层虚拟机实例
    5. 等待已删除的虚拟机完全消失
    6. 对整个节点池执行健康检查
    7. 重复执行这些步骤,直到节点数达到所需的数量

GKE on Azure 如何在节点池大小调整期间保护工作负载

在节点池大小调整期间,GKE on Azure 会在节点开始排空后最多一小时内遵循 PodDisruptionBudget 配置。一小时后,GKE on Azure 会删除节点上任何剩余的 Pod 对象。

在节点池大小调整期间,GKE on Azure 会正常关闭要重启或移除的任何节点,并等待最多两个小时。两个小时后,如果节点上还有任何剩余的 Pod 对象,则 GKE on Azure 会删除底层虚拟机实例。

检查是否有失败的更新状态

如果 GKE on Azure 在更新后执行健康检查,但健康检查失败,则节点池会被标记为 DEGRADED。您可以使用以下 Google Cloud CLI 命令在集群上找到状态信息:

gcloud container azure node-pools describe NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --location GOOGLE_CLOUD_LOCATION

替换以下内容:

  • NODE_POOL_NAME:节点池的名称
  • CLUSTER_NAME:您的集群的名称
  • GOOGLE_CLOUD_LOCATION:管理您的集群的 Google Cloud 区域

输出包含有关节点池状态和配置的信息。

前提条件

要更新节点池,您必须具有 gkemulticloud.googleapis.com/azureNodePools.update Identity and Access Management 权限。

更新节点池

您可以使用 Google Cloud CLI 更新节点池。如需更新节点池,请运行以下命令:

gcloud container azure node-pools update NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --location GOOGLE_CLOUD_LOCATION \
    --node-version NODE_POOL_VERSION \
    --min-nodes MIN_NODES \
    --max-nodes MAX_NODES

替换以下内容:

  • NODE_POOL_NAME:要更新的节点池的名称
  • CLUSTER_NAME:要将节点池连接到的集群的名称
  • GOOGLE_CLOUD_LOCATION:管理集群的受支持的 Google Cloud 区域,例如 us-west1
  • NODE_POOL_VERSION:新的受支持的节点池版本
  • MIN_NODES:节点池可以包含的新的最小节点数。必须大于或等于 0
  • MAX_NODES:节点池可以包含的新的最大节点数。必须至少为 1 且值为 MIN_NODES

取消更新操作

如需取消正在进行的节点池更新操作,请运行以下命令:

gcloud container azure operations cancel OPERATION_NAME

OPERATION_NAME 替换为更新操作的名称。

请注意,取消正在进行的更新节点池操作不会还原已完成的节点更新。这可能会导致节点池部分更新。

后续步骤