更新节点池

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

  • 升级节点池版本
  • 更改节点池中的节点数
  • 更改节点池注解(只能通过 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 替换为更新操作的名称。

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

后续步骤