本文档介绍如何为 Google Kubernetes Engine (GKE) 集群的控制平面或节点手动请求升级或降级。GKE 会自动升级控制平面和节点的版本,以确保集群接收新功能、bug 修复和安全补丁。不过,如本文档中所述,您也可以自行手动执行这些升级。
如需详细了解自动和手动集群升级的工作原理,请参阅 GKE 集群升级简介。您还可以通过配置维护窗口和排除项来控制可以和不能自动升级的时间。
您可以按如下方式手动升级版本:
为了升级集群,GKE 会在单独的操作中更新控制平面和节点运行的版本。集群会升级到较新的次要版本(例如 1.33 到 1.34)或较新的补丁版本(例如 1.33.4-gke.1350000 到 1.33.5-gke.1080000)。集群的控制平面和节点不一定始终运行同一版本。如需详细了解版本,请参阅 GKE 版本控制和支持。
如需详细了解集群升级(包括自动升级和手动升级)的工作原理,请参阅 GKE 集群升级简介。
新版本的 GKE 会定期发布,您可以通过集群通知接收有关每个特定集群可用的新版本的通知。如需查找集群的特定自动升级目标,请获取有关集群升级的信息。
如需详细了解可用的版本,请参阅版本控制。如需详细了解集群,请参阅集群架构。如需了解如何升级集群,请参阅升级集群的最佳做法。
准备工作
在开始之前,请确保您已执行以下任务:
- 启用 Google Kubernetes Engine API。 启用 Google Kubernetes Engine API
- 如果您要使用 Google Cloud CLI 执行此任务,请安装并初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请通过运行
gcloud components update命令来获取最新版本。较早版本的 gcloud CLI 可能不支持运行本文档中的命令。
- 确保您已有 Autopilot 或 Standard 集群。如需创建新集群,请参阅创建 Autopilot 集群。
关于升级
集群的控制平面和节点将分别升级。集群的控制平面和节点不一定始终运行同一版本。
无论您的集群是否已注册发布版本,集群控制平面和节点都会定期升级。
限制
Alpha 版集群无法升级。
支持的版本
版本说明会通知何时推出新版本以及何时不再提供旧版本。您可以随时使用以下命令列出所有支持的集群和节点版本:
gcloud container get-server-config \
--location=CONTROL_PLANE_LOCATION
将 CONTROL_PLANE_LOCATION 替换为控制平面的位置(区域或可用区),例如 us-central1 或 us-central1-a。
如果您的集群已在发布渠道中注册,您可以升级到与发布控制平面具有相同次要版本的其他发布渠道中的补丁版本。例如,您可以将集群从常规渠道中的版本 1.33.4-gke.1350000 升级到快速渠道中的 1.33.5-gke.1162000。如需了解详情,请参阅从较新的渠道运行补丁版本。所有 Autopilot 集群都在发布渠道中注册。
关于降级
在某些情况下,您可以将集群版本降级到早期版本:
- 控制平面补丁降级:如需缓解集群控制平面升级失败的问题,您可以将控制平面降级为之前的补丁版本(如果版本为同一次要版本中的早期补丁版本)。例如,如果集群的控制平面正在运行 GKE 1.33.5-gke.1080000,则您可以将该控制平面降级为 1.33.4-gke.1350000(如果该版本仍然可用)。
- 在两步控制平面次要版本升级期间回滚(预览版):只有在完成具有回滚安全性的两步控制平面次要版本升级的二进制升级后,您才能将 Kubernetes 集群控制平面降级为早期次要版本。如果 GKE 已完成两步升级中的第二步(即模拟版本升级),则无法回滚到之前的次要版本。
- 节点池降级:如需缓解节点池升级失败的问题,您可以将节点池降级为早期补丁版本或次要版本。请确保您不会将节点降级到比集群控制平面版本低两个以上次要版本的版本。
除了上述场景之外,您无法降级集群。您无法将集群控制平面降级为之前的次要版本,即使在一步式控制平面次要版本升级后也是如此。例如,如果您的控制平面在运行 GKE 1.34 版,则无法降级到 1.33 版。如果您尝试执行此操作,系统会显示以下错误消息:
ERROR: (gcloud.container.clusters.upgrade) ResponseError: code=400,
message=Master cannot be upgraded to "1.33.4-gke.1350000": specified version is
not newer than the current version.
我们建议您在新的次要版本可用但在该版本成为集群的自动升级目标之前,在测试环境中测试并验证集群的次要版本升级。如果您的集群可能会受到下一个次要版本的重大更改(例如即将移除已弃用的 API 或功能)的影响,则强烈建议您执行这样的操作。如需详细了解版本可用性,请参阅一个发布版本中提供哪些版本。
升级集群的控制平面
GKE 会自动升级集群的控制平面和节点。如需了解如何管理 GKE 升级集群的方式,请参阅控制集群升级。
对于 Autopilot 集群和区域级 Standard 集群,控制平面在控制平面升级期间仍可用。不过,当您为区域集群启动控制平面升级时,在几分钟内,您无法修改集群的配置,直到可再次访问控制平面为止。控制平面升级不会影响运行工作负载的工作器节点的可用性,因为它们在控制平面升级期间仍然可用。
在管理集群版本时,您可以在新版本推出后的任意时间使用以下方法之一启动手动升级:
- 一步升级:尽快将控制平面直接升级到较新的次要版本或补丁版本。如果您已在新次要版本上验证了集群和工作负载性能,则可以使用此方法。
- 具有回滚安全性的两步控制平面次要升级(预览版):使用两步流程将控制平面升级到较新的次要版本,在此流程中,您可以验证新次要版本在浸泡时间段内的表现,并在需要时进行回滚。此升级方法仅适用于升级到 1.33 或更高版本,用于手动次要控制平面升级。
通过一步式升级手动升级控制平面
您可以使用 Google Cloud 控制台或 Google Cloud CLI 手动升级 Autopilot 或标准控制平面。
控制台
如需手动更新集群控制平面,请执行以下步骤:
进入 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
点击集群的名称。
在集群基本信息下,点击版本旁边的 edit 可用升级。
选择新版本,然后点击保存更改。
gcloud
如需查看集群的控制平面的可用版本,请运行以下命令:
gcloud container get-server-config \
--location=CONTROL_PLANE_LOCATION
如需升级到默认的集群版本,请运行以下命令:
gcloud container clusters upgrade CLUSTER_NAME \
--master \
--location=CONTROL_PLANE_LOCATION
如需升级到特定的非默认版本,请按如下方式指定 --cluster-version 标志:
gcloud container clusters upgrade CLUSTER_NAME \
--master \
--location=CONTROL_PLANE_LOCATION \
--cluster-version=VERSION
将 VERSION 替换为您要将集群升级到的版本。您可以使用具体的版本(如 1.32.9-gke.1072000),也可以使用版本别名(如 latest)。如需了解详情,请参阅指定集群版本。
升级标准控制平面后,您可以升级其节点。默认情况下,使用 Google Cloud 控制台创建的标准节点已启用自动升级,因此该操作会自动执行。Autopilot 总是自动升级节点。
具有回滚安全性的两步控制平面次要升级
您可以手动将 GKE Autopilot 或标准集群的控制平面升级到下一个次要版本,只需执行两步升级。在此两步过程中,您可以使用上一个次要版本(称为模拟版本)的功能和 API,同时测试集群在新次要版本(称为二进制版本)中的性能。在此浸泡期间,控制平面以所谓的模拟模式运行,您可以根据需要回滚到之前的次要版本。如需详细了解 Kubernetes 如何允许此类升级,请参阅 Kubernetes 控制平面组件的兼容性版本。
两步升级的工作方式如下:
二进制升级:GKE 将控制平面二进制文件升级到新的次要版本,但会模拟之前的次要版本:
- 模拟先前版本:集群运行新的二进制文件,但继续模拟先前次要版本 API 的行为。例如,您可以调用已在新次要版本中移除但在之前的次要版本中仍可用的 API。
- 测试新二进制文件:您可以在新次要版本提供的 Kubernetes 功能可供使用之前,测试新二进制文件是否存在回归、修复和性能变化。监控应用指标、日志、Pod 状态、错误率和延迟时间。
- 让更改生效:等待 6 小时到 7 天,以便您有时间进行测试和监控。在此时间之后,GKE 会执行模拟版本升级。
- 回滚或完成升级:您可以根据需要回滚升级。或者,如果您对新的次要版本有信心,不想等待浸泡时间结束,并且已准备好开始使用新功能和 API 更改,则可以进入下一阶段。
模拟版本升级:GKE 会更新模拟版本,使其与新的二进制版本保持一致。
- 启用新功能:启用新次版本的所有新功能和 API 变更。
- 无法回滚:完成此步骤后,您将无法回滚到原始次要版本。升级已完成。
在此操作期间,存在以下限制:
- 您无法启动一步式控制平面次要升级。
- 您无法创建节点或将节点升级到高于模拟版本的版本。
- GKE 不会对控制平面或节点执行任何类型的自动升级。
开始两步升级
运行以下命令,开始两步升级:
gcloud beta container clusters upgrade CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--cluster-version VERSION \
--control-plane-soak-duration SOAK_DURATION \
--master
替换以下内容:
CLUSTER_NAME:集群的名称。CONTROL_PLANE_LOCATION:控制平面的位置(区域或可用区),例如us-central1或us-central1-a。VERSION:下一个次要版本的特定补丁。 例如,如果您的集群运行的是 1.33,则为1.34.1-gke.1829001。SOAK_DURATION:在回滚安全阶段等待的时间。您可以使用gcloud topic datetimes的参考文档中所述的绝对时长格式来设置此值,最短为 6 小时,最长为 7 天。 例如,使用2d1h表示浸泡时间为两天零一小时。
在两步升级期间测试新二进制文件
在过渡期间,验证集群(控制平面运行新二进制文件)和工作负载是否按预期运行。您可以执行以下步骤之一,具体取决于您是否能够验证工作负载与新二进制文件兼容:
- 回滚:如果您发现运行新二进制文件的工作负载存在问题,可以回滚到之前的次要版本。
- 完成升级:如果您已验证工作负载在新二进制文件中运行正常,则可以完成升级,以便开始使用新版本的功能和 API。
- 等待:您也可以等待浸泡时间结束。之后,GKE 会执行模拟版本升级,即过渡到使用新次要版本的功能和 API。
查看正在进行的升级
如需获取有关正在进行的升级的信息,请使用以下资源之一:
- 如需查看升级的详细信息,请按照说明在集群级获取升级信息。
- 使用集群通知。当二进制升级开始时,GKE 会发送
UpgradeEvent通知;当二进制升级完成且过渡时间开始时,GKE 会发送类型为升级操作已完成的UpgradeInfoEvent。 - 如需查看集群的详细信息(包括有关正在进行的升级的信息),请运行
gcloud container clusters describe命令。 - 在 Cloud Logging 中查看相关日志。
在二进制版本升级后回滚两步升级
在两步升级期间,二进制版本升级后是浸泡期。在此期间,您可以根据需要回滚到上一个次要版本。GKE 执行模拟版本升级后,您无法进行回滚。
回滚操作完成后,控制平面会像您启动两步升级之前一样运行之前的次要版本。
如果可能,请执行以下步骤进行回滚:
运行 在集群级获取升级信息中的 gcloud CLI 命令,检查您是否仍可以将控制平面回滚到之前的次要版本。根据命令的输出确定是否可以回滚:
- 如果输出中包含
rollbackSafeUpgradeStatus部分,则可以回滚。在该部分中,保存previousVersion以供在下一步中用作VERSION变量。继续下一步。 - 如果没有
rollbackSafeUpgradeStatus部分,则无法回滚。 这表示 GKE 已执行模拟版本升级。您无法执行下一步。
- 如果输出中包含
如果上一步确定可以回滚,请回滚到上一个版本:
gcloud container clusters upgrade CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --cluster-version VERSION --masterVERSION必须是之前使用的确切补丁版本。您在上一步中保存了此版本。
运行此命令并降级到之前的版本后,您可以确定工作负载在新二进制文件中未正确运行的原因。如有需要,您可以与 Cloud Customer Care 联系,并提供相关日志、错误消息以及您遇到的验证失败的详细信息。如需了解详情,请参阅获取支持。
解决问题后,您可以再次手动升级到新的次要版本。
完成两步升级
在浸泡期间,如果您已验证工作负载是否使用新二进制文件成功运行,则可以跳过剩余的浸泡时间:
gcloud beta container clusters clusters complete-control-plane-upgrade CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION
运行此命令后,您将无法再降级到之前的次要版本。
将控制平面降级为早期补丁版本
- 在降级之前设置维护排除项,以防止 GKE 在您降级控制平面后自动升级控制平面。
将集群控制平面降级为早期补丁版本:
gcloud container clusters upgrade CLUSTER_NAME \ --master \ --location=CONTROL_PLANE_LOCATION \ --cluster-version=VERSION
停用集群自动升级
基础架构安全性对于 GKE 而言具有较高的优先级,因此,控制平面会定期升级,并且无法停用。但是,您可以通过应用维护窗口和排除项来临时暂停控制平面和节点的升级。
您可以为 Standard 节点池停用节点自动升级,但我们不建议您这样做。
检查最近的控制平面升级历史记录
如需查看集群近期的自动升级历史记录的快照,请获取有关集群升级的信息。
或者,您也可以列出近期的操作,以查看控制平面的升级时间:
gcloud container operations list --filter="TYPE:UPGRADE_MASTER AND TARGET:CLUSTER_NAME" \
--location=CONTROL_PLANE_LOCATION
升级节点池
默认情况下,Standard 节点池已启用自动升级,并且 Standard 集群中所有由 Autopilot 管理的节点池始终已启用自动升级。节点自动升级可确保集群的控制平面和节点版本保持同步,并且符合 Kubernetes 版本倾斜支持政策,该政策可确保控制平面与最多比控制平面低两个次要版本的节点兼容。例如,Kubernetes 1.34 控制平面与 Kubernetes 1.32 节点兼容。
请勿为 Standard 节点池停用节点自动升级,以便您的集群能够从上一段中列出的升级中受益。
借助 GKE Standard 节点池升级,您可以选择三种可配置的升级策略,包括超额配置升级、蓝绿升级和自动扩缩的蓝绿升级(预览版)。Standard 集群中由 Autopilot 管理的节点池始终使用超额配置升级。
对于 Standard 节点池,选择策略并使用参数调整策略可最符合您的集群环境的需求。
节点升级的工作原理
当某个节点正在升级时,GKE 会停止将新的 Pod 调度到该节点上,并尝试将其正在运行的 Pod 调度到其他节点上。这与重新创建节点的其他事件(例如启用或停用节点池中的功能)类似。
在自动或手动升级节点期间,PodDisruptionBudget (PDB) 和 Pod 终止宽限期最长为 1 小时。如果在节点上运行的 Pod 在 1 小时后无法被调度到新节点上,GKE 会无论如何启动升级。即使您将 PDB 配置为始终提供所有副本(通过将 maxUnavailable 字段设置为 0 或 0%,或者将 minAvailable 字段设置为 100% 或副本数量),此行为也会适用。在所有这些情况下,GKE 都会在一小时后删除 Pod,以便进行节点删除。
如果 Standard 节点池中运行的工作负载需要更灵活且能够安全终止,请使用蓝绿升级,这样可以提供额外过渡时间设置,从而将 PDB 检查延长超过默认的 1 小时。
如需详细了解在节点终止期间一般会发生什么情况,请参阅有关 Pod 的主题。
只有在重新创建所有节点且集群处于新状态后,升级才算完成。当新升级的节点向控制平面注册时,GKE 会将该节点标记为可调度。
新节点实例会运行新的 Kubernetes 版本以及以下内容:
只有当节点池中的所有节点都重新创建完毕后,节点池升级才算完成。如果升级已开始但未完成,且处于部分升级状态,则节点池版本可能无法反映所有节点的版本。如需了解详情,请参阅节点池升级不完整后,某些节点版本与节点池版本不一致。如需确定节点池升级是否已完成,请检查节点池升级状态。如果升级操作已超出保留期限,请检查各个节点版本是否与节点池版本一致。
在升级之前,请将数据保存到永久性磁盘
升级节点池之前,请务必将需要保留的所有数据存储在使用永久性磁盘的永久性卷的 Pod 中。 在升级期间,永久性磁盘会被卸载,而不是被清空,并且其数据会在 Pod 之间转移。
永久性磁盘存在以下限制:
- 运行 Pod 的节点必须是 Compute Engine 虚拟机。
- 这些虚拟机和永久性磁盘必须位于同一 Compute Engine 项目和可用区中。
如需了解如何将 Persistent Disk 添加到现有节点实例,请参阅 Compute Engine 文档中的添加地区级 Persistent Disk 或调整其大小。
手动升级节点池
您可以手动升级 Standard 集群中 Standard 节点池或由 Autopilot 管理的节点池的版本。您可以将节点池版本与控制平面版本保持一致,也可以使用仍然可用且与控制平面兼容的先前版本。您可以手动并行升级多个节点池,而 GKE 一次只能自动升级一个节点池。
手动升级节点池时,GKE 会移除使用 kubectl 添加到各个节点的所有标签。为避免这种情况,请改为将标签应用于节点池。
在手动升级节点池之前,请考虑以下条件:
- 升级节点池可能会中断在该节点池中运行的工作负载。为避免出现此情况,您可以创建具有所需版本的新节点池并迁移工作负载。迁移后,您可以删除旧的节点池。
- 如果升级某个 Ingress 处于错误状态的节点池,则实例组不会同步。如需解决此问题,请先使用
kubectl get ing命令检查状态。如果未同步实例组,您可以重新应用用于创建 Ingress 的清单来解决该问题。
您可以手动将节点池升级到与控制平面兼容的版本:
- 对于 Standard 节点池,您可以使用 Google Cloud 控制台或 Google Cloud CLI。
对于由 Autopilot 管理的节点池,您只能使用 Google Cloud CLI。
控制台
如需使用 Google Cloud 控制台升级 Standard 节点池,请执行以下步骤:
进入 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
点击集群的名称。
在集群详情页面上,点击节点标签页。
在节点池部分,点击要升级的节点池的名称。
点击 edit 修改。
点击节点版本下的更改。
从节点版本下拉列表中选择所需的版本,然后点击更改。
节点版本可能需要几分钟才能更改完成。
gcloud
本部分的命令中使用以下变量:
CLUSTER_NAME:要升级的节点池的集群的名称。NODE_POOL_NAME:要升级的节点池的名称。CONTROL_PLANE_LOCATION:控制平面的位置(区域或可用区),例如us-central1或us-central1-a。VERSION:节点升级到的 Kubernetes 版本。例如--cluster-version=1.34.1-gke.1293000或cluster-version=latest。
升级节点池:
gcloud container clusters upgrade CLUSTER_NAME \
--node-pool=NODE_POOL_NAME \
--location=CONTROL_PLANE_LOCATION
如需在节点上指定其他版本的 GKE,请使用可选 --cluster-version 标志:
gcloud container clusters upgrade CLUSTER_NAME \
--node-pool=NODE_POOL_NAME \
--location=CONTROL_PLANE_LOCATION \
--cluster-version VERSION
如需详细了解如何指定版本,请参阅版本控制。
如需了解详情,请参阅 gcloud container clusters upgrade 文档。
降级节点池
您可以降级节点池,以缓解节点池升级失败等问题。在降级节点池之前,请查看限制。
如果您需要针对影响工作负载的节点池升级来缓解风险,请使用蓝绿节点升级策略。借助此策略,您可以在升级失败时将正在进行的升级回滚到原始节点。
更改超额配置升级参数
如需详细了解如何更改超额配置升级参数,请参阅配置超额配置升级。
检查节点池升级状态
您可以使用 gcloud container operations 检查升级的状态。
查看集群中正在运行和已完成的所有操作的列表(如果操作少于 5,000 个,则查看过去 12 天内的操作;否则查看最近 5,000 个操作):
gcloud container operations list \
--location=CONTROL_PLANE_LOCATION
系统会为每个操作分配操作 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 \
--location=CONTROL_PLANE_LOCATION
例如:
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 \
--location=CONTROL_PLANE_LOCATION
替换以下内容:
NODE_POOL_NAME:要描述的节点池的名称。CLUSTER_NAME:要描述的节点池集群的名称。CONTROL_PLANE_LOCATION:控制平面的位置(区域或可用区),例如us-central1或us-central1-a。
此命令将输出当前升级设置。以下示例演示了使用蓝绿升级策略时的输出。
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
取消节点池升级
您可以随时取消升级。如需详细了解取消超额配置升级时发生的情况,请参阅取消超额配置升级。 如需详细了解取消蓝绿升级时发生的情况,请参阅取消蓝绿升级。
获取升级的操作 ID:
gcloud container operations list \ --location=CONTROL_PLANE_LOCATION取消升级:
gcloud container operations cancel OPERATION_ID \ --location=CONTROL_PLANE_LOCATION
请参阅 gcloud container operations cancel 文档。
恢复节点池升级
您可以通过再次手动启动升级并指定原始升级中的目标版本来恢复升级。
例如,如果升级失败,或者您暂停了正在进行的升级,则可以通过在节点池上再次启动同一升级来恢复已取消的升级,并指定初始升级操作中的目标版本。
如需详细了解恢复升级时发生的情况,请参阅恢复超额配置升级和蓝绿升级。
要恢复升级,请使用以下命令:
gcloud container clusters upgrade CLUSTER_NAME \
--node-pool=NODE_POOL_NAME \
--location=CONTROL_PLANE_LOCATION \
--cluster-version VERSION
替换以下内容:
NODE_POOL_NAME:要恢复节点池升级的节点池的名称。CLUSTER_NAME:要恢复升级的节点池的集群的名称。CONTROL_PLANE_LOCATION:控制平面的位置(区域或可用区),例如us-central1或us-central1-a。VERSION:已取消节点池升级的目标版本。
如需了解详情,请参阅 gcloud container clusters upgrade 文档。
回滚节点池升级
您可以回滚节点池,以将升级后的节点降级为节点池升级开始之前的原始状态。
如果正在进行的升级被取消、升级失败或升级由于维护窗口超时而未完成,请使用 rollback 命令。或者,如果您想指定版本,请按照说明降级节点池。
如需详细了解回滚节点池升级时发生的情况,请参阅回滚超额配置升级或回滚蓝绿升级。
如需回滚升级,请运行以下命令:
gcloud container node-pools rollback NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION
替换以下内容:
NODE_POOL_NAME:要回滚节点池升级的节点池的名称。CLUSTER_NAME:要回滚升级的节点池的集群名称。CONTROL_PLANE_LOCATION:控制平面的位置(区域或可用区),例如us-central1或us-central1-a。
请参阅 gcloud container node-pools rollback 文档。
完成节点池升级
如果您使用的是蓝绿升级策略,则可以在过渡阶段完成节点池升级,并跳过其余过渡时间。
如需了解如何完成节点池升级,请参阅完成节点池升级。
如需在使用蓝绿升级策略时完成升级,请运行以下命令:
gcloud container node-pools complete-upgrade NODE_POOL_NAME \
--cluster CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION
替换以下内容:
NODE_POOL_NAME:要完成升级的节点池的名称。CLUSTER_NAME:要完成升级的节点池的集群名称。CONTROL_PLANE_LOCATION:控制平面的位置(区域或可用区),例如us-central1或us-central1-a。
请参阅 gcloud container node-pools complete-upgrade 文档。
已知问题
如果您配置的 PodDisruptionBudget 对象无法允许任何额外的中断,则节点升级可能会在反复尝试后仍无法升级到控制平面版本。为防止此故障,我们建议您扩容 Deployment 或 HorizontalPodAutoscaler,以允许节点排空,同时仍遵循 PodDisruptionBudget 配置。
如需查看不允许出现任何中断的所有 PodDisruptionBudget 对象,请运行以下命令:
kubectl get poddisruptionbudget --all-namespaces -o jsonpath='{range .items[?(@.status.disruptionsAllowed==0)]}{.metadata.name}/{.metadata.namespace}{"\n"}{end}'
虽然自动升级可能会遇到问题,但自动升级过程会强制节点升级。但是,对于 istio-system 命名空间中违反 PodDisableionBudget 的每个节点,升级额外需要一个小时。
问题排查
如需了解问题排查,请参阅排查集群升级问题。