自动升级节点


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

概览

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

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

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

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

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

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

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

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

gcloud

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

gcloud container node-pools describe NODE_POOL_NAME \
  --cluster CLUSTER_NAME \
  --zone COMPUTE_ZONE

请替换以下内容:

  • NODE_POOL_NAME:节点池的名称。
  • CLUSTER_NAME:包含节点池的集群的名称。
  • COMPUTE_ZONE:集群的计算可用区

控制台

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

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    转到 Google Kubernetes Engine

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

  3. 点击节点标签页。

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

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

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

使用 Google Cloud 控制台或 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. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    前往 Google Kubernetes Engine

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

  3. 点击节点标签页。

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

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

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

  7. 点击保存

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

检查节点升级的状态

您可以使用 gcloud container operations 检查升级的状态。

查看集群中每个正在运行和已完成的操作的列表:

gcloud container operations list

系统会为每个操作分配操作 ID 和操作类型,以及开始和结束时间、目标集群和状态。该列表类似于以下示例:

NAME                              TYPE                ZONE           TARGET              STATUS_MESSAGE  STATUS  START_TIME                      END_TIME
operation-1505407677851-8039e369  CREATE_CLUSTER      us-west1-a     my-cluster                          DONE    20xx-xx-xxT16:47:57.851933021Z  20xx-xx-xxT16:50:52.898305883Z
operation-1505500805136-e7c64af4  UPGRADE_CLUSTER     us-west1-a     my-cluster                          DONE    20xx-xx-xxT18:40:05.136739989Z  20xx-xx-xxT18:41:09.321483832Z
operation-1505500913918-5802c989  DELETE_CLUSTER      us-west1-a     my-cluster                          DONE    20xx-xx-xxT18:41:53.918825764Z  20xx-xx-xxT18:43:48.639506814Z

如需详细了解特定操作,请按如下命令所示指定操作 ID:

gcloud container operations describe OPERATION_ID

例如:

gcloud container operations describe operation-1507325726639-981f0ed6
endTime: '20xx-xx-xxT21:40:05.324124385Z'
name: operation-1507325726639-981f0ed6
operationType: UPGRADE_CLUSTER
selfLink: https://container.googleapis.com/v1/projects/.../kubernetes-engine/docs/zones/us-central1-a/operations/operation-1507325726639-981f0ed6
startTime: '20xx-xx-xxT21:35:26.639453776Z'
status: DONE
targetLink: https://container.googleapis.com/v1/projects/.../kubernetes-engine/docs/zones/us-central1-a/clusters/...
zone: us-central1-a

检查节点池升级设置

您可以使用 gcloud container node-pools describe 命令查看有关用于节点池的节点池升级策略的详细信息。对于蓝绿升级,该命令还会返回升级的当前阶段

运行以下命令:

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

替换以下内容:

  • NODE_POOL_NAME:要描述的节点池的名称。
  • CLUSTER_NAME:要描述的节点池集群的名称。

此命令将输出当前升级设置。以下示例演示了使用蓝绿升级策略时的输出。

upgradeSettings:
  blueGreenSettings:
    nodePoolSoakDuration: 1800s
    standardRolloutPolicy:
      batchNodeCount: 1
      batchSoakDuration: 10s
  strategy: BLUE_GREEN

如果您使用的是蓝绿升级策略,则输出还会包含蓝绿升级设置及其当前中间阶段的详细信息。以下示例演示了这种情况的可能情形:

updateInfo:
  blueGreenInfo:
    blueInstanceGroupUrls:
    - https://www.googleapis.com/compute/v1/projects/{PROJECT_ID}/zones/{LOCATION}/instanceGroupManagers/{BLUE_INSTANCE_GROUP_NAME}
    bluePoolDeletionStartTime: {BLUE_POOL_DELETION_TIME}
    greenInstanceGroupUrls:
    - https://www.googleapis.com/compute/v1/projects/{PROJECT_ID}/zones/{LOCATION}/instanceGroupManagers/{GREEN_INSTANCE_GROUP_NAME}
    greenPoolVersion: {GREEN_POOL_VERSION}
    phase: DRAINING_BLUE_POOL

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

如果底层集群当前未在发布渠道中注册,您可以停用现有节点池的节点自动升级,但我们不建议您这样做。

停用节点自动升级功能之前的注意事项

如果您为节点池停用节点自动升级功能,则 GKE 不会更新节点的版本。停用节点自动升级功能不会阻止 GKE 升级集群的控制平面。

停用节点自动升级功能可防止版本进行更新,但不能阻止启动所有维护任务

停用节点自动升级功能只会阻止 GKE 更新节点版本,但不会阻止 GKE 启动其他维护任务。例如,即使停用了节点自动升级,在集群上触发 IP 地址轮替启用网络政策PSC 迁移会在与控制平面相同的版本上(无论为节点池选择的是哪个版本)重新创建所有节点。如需控制维护时间,请使用维护窗口和排除项

停用节点自动升级功能意味着需要控制平面节点兼容性

如果您停用节点自动升级,则需要负责确保集群的节点所运行的版本与集群版本兼容,并且版本符合 Kubernetes 版本和版本倾斜支持政策。从 GKE 1.19 版开始,GKE 会在版本到达服务终止状态后升级正在运行不受支持的版本的节点,以确保集群正常运行并符合开源版本倾斜政策的规定。运行不受支持版本的节点在版本服务终止时可能不会立即升级,实际时间可能由 Google 自行决定。

停用节点自动升级功能不会停止正在进行的操作

停用节点自动升级功能不会停止或取消对节点池中节点的任何正在进行的升级。如需取消或停止正在进行的升级,请按照取消节点升级执行操作。如果您发现工作负载在升级的节点上发生故障,并想要防止出现进一步的中断,那么取消节点升级可能会很有帮助。

如果针对整个节点池完成了升级,则无法回滚或取消升级。如需降级节点池,请参阅降级节点池

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

gcloud

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

gcloud container node-pools update NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --zone COMPUTE_ZONE \
    --no-enable-autoupgrade

控制台

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

  1. 转到 Google Cloud 控制台中的 Google Kubernetes Engine 页面。

    前往 Google Kubernetes Engine

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

  3. 点击节点标签页。

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

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

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

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

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

gcloud

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

gcloud container clusters create CLUSTER_NAME \
    --zone COMPUTE_ZONE \
    --enable-autoupgrade

如需创建启用自动升级功能的节点池,请在 gcloud container node-pools create 命令中指定 --enable-autoupgrade 标志:

gcloud container node-pools create NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --zone COMPUTE_ZONE \
    --enable-autoupgrade

控制台

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

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

接收升级通知

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

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

更改超额配置升级参数

如需详细了解如何更改超额配置升级参数,请参阅配置超额配置升级

在节点池升级期间进行控制

在自动升级和手动启动的节点池升级期间,您可以执行以下操作。

取消节点池升级

您可以随时取消升级。如需详细了解取消超额配置升级时发生的情况,请参阅取消超额配置升级。如需详细了解取消蓝绿升级时发生的情况,请参阅取消蓝绿升级

  1. 获取升级的操作 ID:

    gcloud container operations list
    
  2. 取消升级:

    gcloud container operations cancel OPERATION_ID
    

请参阅 gcloud container operations cancel 文档。

恢复节点池升级

您可以通过再次手动启动升级并指定原始升级中的目标版本来恢复升级。

例如,如果您暂停了正在进行的 1.23.1-gke.100 版本升级,则可以通过在节点池上再次启动同一升级来恢复版本 1.23.1-gke.100,从而恢复已取消的升级。

如需详细了解恢复升级时发生的情况,请参阅恢复超额配置升级蓝绿升级

要恢复升级,请使用以下命令:

    gcloud container clusters upgrade CLUSTER_NAME \
      --node-pool=NODE_POOL_NAME \
      --cluster-version VERSION

替换以下内容:

  • NODE_POOL_NAME:要恢复节点池升级的节点池的名称。
  • CLUSTER_NAME:要恢复升级的节点池的集群的名称。
  • VERSION:已取消节点池升级的目标版本。

如需了解详情,请参阅 gcloud container clusters upgrade 文档。

回滚节点池升级

您可以回滚节点池,以将升级后的节点降级为节点池升级之前的原始状态。

如果正在进行的升级被取消、升级失败或升级由于维护窗口超时而未完成,请使用 rollback 命令。或者,如果要指定版本,请按照说明降级节点池。

如需详细了解回滚节点池升级时发生的情况,请参阅回滚超额配置升级回滚蓝绿升级

如需回滚升级,请运行以下命令:

gcloud container node-pools rollback NODE_POOL_NAME \
  --cluster CLUSTER_NAME

替换以下内容:

  • NODE_POOL_NAME:要回滚节点池升级的节点池的名称。
  • CLUSTER_NAME:要回滚升级的节点池的集群名称。

请参阅 gcloud container node-pools rollback 文档。

完成节点池升级

如果您使用的是蓝绿升级策略,则可以在过渡阶段完成节点池升级,并跳过其余过渡时间。

如需了解如何完成节点池升级,请参阅完成节点池升级

如需在使用蓝绿升级策略时完成升级,请运行以下命令:

gcloud container node-pools complete-upgrade NODE_POOL_NAME \
  --cluster CLUSTER_NAME

替换以下内容:

  • NODE_POOL_NAME:要完成升级的节点池的名称。
  • CLUSTER_NAME:要完成升级的节点池的集群名称。

请参阅 gcloud container node-pools complete-upgrade 文档。

后续步骤