自动升级节点

本页面介绍如何在 Google Kubernetes Engine (GKE) 中配置节点自动升级功能。

概览

当系统为您更新控制层面时,节点自动升级功能可帮助您确保集群中的节点始终与集群控制层面(主实例)版本保持同步。使用 Google Cloud Console 或 gcloud 命令创建新的集群或节点池时,系统会默认启用节点自动升级功能。

您可以详细了解集群和节点升级

节点自动升级功能具有多项优势:

  • 降低管理开销:当系统为您升级集群控制层面时,您再也不必手动跟踪并更新节点。
  • 提高安全性:我们会不定时发布新的二进制文件来修复安全问题。有了自动升级功能,GKE 可自动确保安全更新功能得到应用并保持最新状态。
  • 易用性:提供一种简单的方法,使您的节点始终使用最新版的 Kubernetes 功能。

如果启用了自动升级功能的节点池满足(版本说明中描述的)选择条件,则系统会安排其进行升级。发布过程会在几周内分阶段进行,以确保集群和机群的稳定性。 执行升级时,系统将排空并重新创建节点以与当前控制层面版本保持一致。在节点虚拟机的启动磁盘上进行的修改在重新创建节点后将不再保留。如需在重新创建节点后保留修改,请使用 DaemonSet

Alpha 版集群无法使用节点自动升级功能。如果您使用的集群具有 Windows Server 节点池,请在启用节点自动升级功能之前查看升级 Windows Server 节点池

检查现有节点池的自动升级状态

您可以使用 Google Cloud Console 或 gcloud 命令检查节点池是启用了还是停用了自动升级功能。

gcloud

如需检查节点池的自动升级状态,请运行以下命令:

gcloud container node-pools describe node-pool-name \
  --cluster cluster-name \
  --zone compute-zone

其中:

  • node-pool-name 是节点池的名称。
  • cluster-name 是包含节点池的集群的名称。
  • compute-zone 是集群所在的区域。

控制台

如需检查节点池的自动升级状态,请执行以下操作:

  1. 访问 Cloud Console 中的 Google Kubernetes Engine 菜单。

    访问 Google Kubernetes Engine 菜单

  2. 在集群列表中,点击您要查看的集群的名称。

  3. 点击节点标签页。

  4. 节点池下,点击要查看的节点池的名称。

  5. 节点池详情页面的管理下,查看自动升级字段的值。

为现有节点池启用节点自动升级功能

使用 Google Cloud Console 或 gcloud 命令创建新的集群时,系统会默认启用节点自动升级功能。

您可以启用节点自动升级功能(如果其当前处于停用状态)。

gcloud

要为现有节点池启用自动升级功能,请运行以下命令:

gcloud container node-pools update node-pool-name --cluster cluster-name \
    --zone compute-zone --enable-autoupgrade

其中:

  • node-pool-name 是节点池的名称。
  • cluster-name 是包含节点池的集群的名称。
  • compute-zone 是集群所在的区域。

控制台

如需为现有节点池启用自动升级功能,请执行以下步骤:

  1. 访问 Cloud Console 中的 Google Kubernetes Engine 菜单。

    访问 Google Kubernetes Engine 菜单

  2. 在集群列表中,点击您要修改的集群的名称。

  3. 点击节点标签页。

  4. 节点池下,点击要修改的节点池的名称。

  5. 节点池详情页面中,点击 修改

  6. 管理下,选中启用自动升级复选框。

  7. 点击保存

如需对何时可以自动升级节点进行更多控制,请考虑配置维护期和排除项

检查节点升级状态

如需检查升级的状态,请参阅检查节点升级状态

为现有节点池停用节点自动升级功能

如果底层集群当前未在发布渠道中注册,您可以停用现有节点池的节点自动升级,但我们不建议您这样做。停用节点自动升级不会阻止集群的控制层面升级。如果您停用节点自动升级,则需要负责确保集群的节点所运行的版本与集群版本兼容,并且版本符合 Kubernetes 版本和版本倾斜支持政策

gcloud

要停用现有节点池的自动升级功能,请运行以下命令:

gcloud container node-pools update node-pool-name --cluster cluster-name \
    --zone compute-zone --no-enable-autoupgrade

控制台

如需停用现有节点池的自动升级功能,请执行以下步骤:

  1. 访问 Cloud Console 中的 Google Kubernetes Engine 菜单。

    访问 Google Kubernetes Engine 菜单

  2. 在集群列表中,点击您要修改的集群的名称。

  3. 点击节点标签页。

  4. 节点池下,点击要修改的节点池的名称。

  5. 节点池详情页面中,点击 修改

  6. 管理下,取消选中启用自动升级复选框。

  7. 点击保存,以修改集群。

将工作负载迁移到以前的节点版本(暂时缓解)

您无法降级节点池。但是,如需在节点池升级后降级到节点版本,请将以下准则用作暂时缓解措施,将工作负载迁移到所需的节点版本。

  1. 检查您的子网范围和 Pod IP 范围是否允许集群中的其他节点托管当前节点池当前托管的所有 Pod。查看子网范围的最大 Pod 数和最大节点数
  2. 检查要迁移到的节点版本是否受支持。

  3. 检查节点是否具有 PodDisruptionBudget 的工作负载,这可能会降低工作负载的迁移速度。

  4. 使用以前节点版本创建另一个节点池,以便具有容量(节点数)来托管当前节点池当前托管的所有 Pod。

  5. 使用 kubectl drain <nodename> 排空含最新版本的节点池上的节点,一次一个节点。确认节点上的 Pod 已移到新节点池(正在运行以前节点版本)上的节点。

  6. 极其重要:确认所有 Pod 均已迁移到正在运行以前节点版本的节点池中的节点。

  7. 删除正在运行最新节点池版本的节点池(如果您不再需要)。

创建集群或节点池并启用节点自动升级功能

gcloud

如需为默认节点池创建集群并启用自动升级功能,请在 gcloud container clusters create 命令中指定 --enable-autoupgrade 标志:

gcloud container clusters create cluster-name --zone compute-zone \
    --enable-autoupgrade

如需创建节点池并启用自动升级功能,请执行以下操作:

gcloud container node-pools create node-pool-name --cluster cluster-name \
    --zone compute-zone --enable-autoupgrade

控制台

使用 Cloud Console 创建的集群和节点池会默认启用自动升级功能。如需了解如何创建集群和节点池,请参阅创建集群添加和管理节点池

您可以为新节点池停用自动升级功能。在集群创建页面中,点击要修改的节点池的名称,然后清除启用自动升级

更改超额配置升级参数

借助超额配置升级,您可以更改 GKE 同时升级的节点数以及升级对工作负载造成的中断时长。

我们为每个节点池定义了 max-surge-upgrademax-unavailable-upgrade 标志。如需详细了解如何选择正确的参数,请参阅确定最佳超额配置

您可以在创建或更新集群或节点池时更改这些设置。

以下变量将用于下文提到的命令:

  • CLUSTER_NAME:节点池的集群名称。
  • COMPUTE_ZONE:集群的区域。
  • NODE_POOL_NAME:节点池的名称。
  • NUMBER_NODES:每个集群的区域的节点池中的节点数。
  • SURGE_NODES:每次升级节点池时要创建的额外(超额配置)节点的数量。
  • UNAVAILABLE_NODES:是每次升级节点池时不可用的节点数。

创建具有特定超额配置参数的集群

如需创建具有特定超额配置升级设置的集群,请使用 max-surge-upgrademax-unavailable-upgrade 标志。

gcloud container clusters create CLUSTER_NAME \
  --max-surge-upgrade=SURGE_NODES --max-unavailable-upgrade=UNAVAILABLE_NODES

创建停用超额配置升级的集群

如需创建停用超额配置升级的集群,请将 max-surge-upgrade 标志的值设置为 0

gcloud container clusters create CLUSTER_NAME \
  --max-surge-upgrade=0 --max-unavailable-upgrade=1

创建具有特定超额配置参数的节点池

如需在现有集群中创建具有特定超额配置升级设置的节点池,请使用 max-surge-upgrademax-unavailable-upgrade 标志。

gcloud container node-pools create NODE_POOL_NAME \
  --num-nodes=NUMBER_NODES --cluster=CLUSTER_NAME \
  --max-surge-upgrade=SURGE_NODES --max-unavailable-upgrade=UNAVAILABLE_NODES

为现有节点池启用或停用超额配置升级

如需更新现有节点池的升级设置,请使用 max-surge-upgrademax-unavailable-upgrade 标志。如果将 max-surge-upgrade 设置为大于 0,则 GKE 会创建超额配置节点。如果将 max-surge-upgrade 设置为 0,则 GKE 不会创建超额配置节点。

gcloud beta container node-pools update NODE_POOL_NAME \
  --cluster=CLUSTER_NAME \
  --max-surge-upgrade=SURGE_NODES --max-unavailable-upgrade=UNAVAILABLE_NODES

检查节点池上是否启用了超额配置升级

如需查看节点池上是否启用了超额配置升级,请使用 gcloud 描述集群的参数:

gcloud container node-pools describe NODE_POOL_NAME \
--cluster=CLUSTER_NAME

接收升级通知

GKE 将升级通知发布到 Pub/Sub,为您提供了一个渠道,接收来自 GKE 的关于您的集群的信息。

如需了解详情,请参阅接收集群升级通知

后续步骤