更新节点池

创建集群后,您可以修改其节点池。您只能更新节点池的某些参数,例如其大小、加密密钥和安全群组。本文档介绍了如何对节点池执行这些更新以及其他常见更新。

不过,本文档并未提供更新命令的详尽列表。 如果您需要更新本文档中未介绍的参数,请参阅 gcloud container aws node-pools updateprojects.locations.awsNodePools.patch 文档。

准备工作

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

有关如何管理权限的说明,请参阅 向用户授予 IAM 角色

更新节点池

以下部分介绍了如何对节点池进行各种更新。节点池是集群中全都具有相同配置的一组节点。集群中的所有节点都必须属于某个节点池。

您可以通过在同一命令中指定节点池的多个参数来同时更新这些参数。不过,为清楚起见,本文档将介绍如何一次更新一个参数。

更改节点池版本

在 GKE on AWS 中,更改节点池版本意味着更改在该节点池中的节点上运行的 GKE 版本。

如需更改节点池版本,请使用以下命令中的 node-version 标志指定新版本:

gcloud container aws node-pools update NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --location GOOGLE_CLOUD_LOCATION \
    --node-version NODE_POOL_VERSION

替换以下内容:

更新节点池实例类型

节点池实例类型是用于创建节点池中的节点的 AWS EC2 实例的类型。例如,m5.xlarge 实例类型有 4 个 vCPU、16GB 内存和 32GB SSD 存储空间。

如需更改节点池的实例类型,请在以下命令中使用 instance-type 标志指定新的实例类型:

gcloud container aws node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=GOOGLE_CLOUD_LOCATION \
    --instance-type=INSTANCE_TYPE

替换以下内容:

  • NODE_POOL_NAME:节点池的名称。
  • CLUSTER_NAME:您的集群的名称。
  • GOOGLE_CLOUD_LOCATION:管理您的集群的 Google Cloud 区域。
  • INSTANCE_TYPE:此节点池的新 AWS 机器实例类型。例如 m5.xlarge

对节点池实例类型的更新不得更改 EC2 实例的底层 CPU 架构。例如,如果您的原始节点池使用的是 x86 CPU 的实例,那么更新后的实例类型需要继续使用 x86 CPU,而不是其他架构。

如需查看受支持实例及其底层架构的完整列表,请参阅支持的 AWS 实例类型

轮替节点池的加密密钥

如需了解如何更新节点池的 KMS 加密密钥,请参阅密钥轮替

替换节点池安全群组

如需更新连接到节点池的安全群组,请运行以下命令:

gcloud container aws node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=GOOGLE_CLOUD_LOCATION \
    --security-group-ids=SECURITY_GROUP_IDS

替换以下内容:

  • NODE_POOL_NAME:要更新的节点池的名称。
  • CLUSTER_NAME:您的集群的名称。
  • GOOGLE_CLOUD_LOCATION:管理您的集群的 Google Cloud 区域。
  • SECURITY_GROUP_IDS:要挂接到节点池的安全群组的英文逗号分隔列表。

对于运行 GKE 1.25 版或更高版本的集群,更新操作可以动态执行,而无需重启节点。这是使用 GKE 1.25 版或更高版本的集群的推荐方法。

如需执行动态更新,您的 API 服务代理角色必须具有以下 AWS IAM 权限:

  • ec2:ModifyInstanceAttribute
  • ec2:DescribeInstances

如果您在创建集群时选择了默认 API 服务代理角色,则这些权限会自动分配给 API 服务代理角色。

对于运行 GKE 早期版本的集群,或者运行 1.25 版或更高版本但 API 服务代理没有执行动态更新权限的集群,更新是通过滚动更新来执行的。滚动更新比动态更新更具中断性,因为滚动更新会重启节点,而动态更新则不会。如需详细了解滚动更新,请参阅高峰期更新

移除节点池安全群组

您可以运行以下命令来移除连接到节点池的所有非默认安全群组。如需详细了解默认安全群组,请参阅节点池安全群组

gcloud container aws node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=GOOGLE_CLOUD_LOCATION \
    --clear-security-group-ids

替换以下内容:

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

调整节点池的大小

要更改节点池的大小(即节点池中的节点数),请在以下命令中为 min-nodesmax-nodes 标志分配新值:

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

替换以下内容:

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

有关调整节点池大小的更多详细信息

在调整节点池的大小之前,请务必评估对工作负载的潜在影响。

调整大小的操作及其后果

调整节点池的大小时,系统会根据新配置和节点的当前状态触发不同的操作。了解这些操作及其影响至关重要:

  • 无更改:如果当前节点数与新的指定范围一致,则 GKE on AWS 不会调整节点数。
  • 增加最小值:如果新的节点数下限设置为高于现有数量,则 GKE on AWS 会逐步添加节点,直到达到新的定义大小下限。
  • 降低最大值:如果您将最大节点数更改为低于现有计数的值,则 GKE on AWS 会执行以下操作:
    • 停用集群自动扩缩器。
    • 将节点池的自动扩缩群组设置为指定的最小大小。
    • 选择要移除的单个节点。每个节点会被封锁,并排空任务,然后终止。此过程将持续到达到指定的大小上限为止。
    • 修改节点池的自动扩缩群组,以与新的大小上限保持一致。
    • 达到最大大小后,重新启用集群自动扩缩器。

如需详细了解集群自动扩缩器,请参阅集群自动扩缩器简介

调整大小期间的工作负载保护

为了确保在节点池大小调整期间工作负载持续可用, GKE on AWS 提供以下保护措施:

  • 在节点排空期间,GKE on AWS 遵循 PodDisruptionBudget 配置长达一小时。在此期限过后,节点上剩余的 Pod 将被删除。

  • 将节点设置为重启或移除节点时,GKE on AWS 可确保其正常关闭,并等待长达两个小时。如果在该时间段后节点上仍有 Pod,底层虚拟机实例会被删除。

检查节点池的状态

如需验证更新是否成功,您可以运行以下命令来查看节点池的状态:

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

替换以下内容:

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

GKE on AWS 会尝试对节点池执行请求的更新,然后执行健康检查。如果任何更新步骤失败,则节点池状态会被标记为 DEGRADED

取消更新操作

如需取消正在进行的节点池更新,您需要先确定 正在进行的操作的名称。如需列出正在进行的操作及其各自的名称,请运行以下命令:

gcloud container aws operations list--filter="status=PENDING OR status=RUNNING"
    --location GOOGLE_CLOUD_LOCATION

GOOGLE_CLOUD_LOCATION 替换为用于管理集群的受支持的 Google Cloud 区域。例如 us-west1

在命令的输出中查找要取消的更新的 OPERATION_NAME。如需查看操作列表,请参阅 gcloud container aws operations list

确定 OPERATION_NAME 后,您可以使用以下命令取消操作:

gcloud container aws operations cancel OPERATION_NAME
    --location GOOGLE_CLOUD_LOCATION

替换以下内容:

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