本页面讨论了自动升级功能在 Google Kubernetes Engine (GKE) Autopilot 集群上的工作原理,包括指向相关任务和设置的详细信息链接。您可以使用这些信息对集群进行更新,以确保其稳定性和安全性,同时最大程度减少对工作负载的中断。
自动控制平面和节点升级
所有 Autopilot 集群上都会启用自动升级。当选择自动升级 GKE 版本时,GKE 会启动自动升级,观察所有集群的自动升级,并在出现健康状况不佳节点等问题时进行干预。
为了升级集群,GKE 会更新控制平面和节点正在运行的版本。集群会升级到较新的次要版本(例如 1.24 到 1.25)或较新的补丁版本(例如 1.24.2-gke.100 到 1.24.5-gke.200)。如需了解详情,请参阅 GKE 版本控制和支持。
所有 Autopilot 集群都在发布渠道中注册,因此 GKE 会自动升级控制平面和节点以运行相同的 GKE 版本。
自动控制平面升级
所有 Autopilot 集群都是区域级集群。区域集群有多个控制平面副本,并且一次只能升级一个副本,顺序不确定。这可确保在自动升级期间集群保持高可用性。每个控制平面副本仅在升级过程中不可用。
如果您配置了维护窗口或排除项,则 GKE 会尽可能遵循该配置。
如果同时在 Autopilot 和 Standard 中进行控制平面升级,则 GKE 无法创建新节点。如果您部署在控制平面升级过程中需要新节点类型的 Autopilot Pod,则可能会在控制平面升级完成前遇到延迟。
自动节点升级
在 GKE 升级 Autopilot 集群控制平面后,GKE 会将节点升级到同一 GKE 版本。
在 Autopilot 中,GKE 将具有类似特征的节点组合在一起。GKE 对 Autopilot 节点使用超额配置升级,可同时升级一个组中最多 20 个节点。同时升级的精确节点数量会有所不同,以确保节点和工作负载保持高可用性。
节点升级可能需要几个小时,具体取决于节点数量以及节点中运行的工作负载的配置。例如,以下配置可能会导致升级时间延长:
- Pod 配置中高值的
terminationGracePeriodSeconds
。 - 保守的
PodDisruptionBudget
。 - 节点亲和性交互。
- 已附加
PersistentVolumes
。
如果您配置了维护窗口或排除项,则 GKE 会尽可能遵循该配置。
当 GKE 升级节点时,会执行以下步骤:
- GKE 会使用新的 GKE 版本创建新的超额配置节点,并等待超额配置节点向控制平面注册。
- GKE 会选择现有节点(目标节点)进行升级。
- GKE 会封锁目标节点,从而防止新 Pod 被放置在目标节点上。
- GKE 会排空目标节点,从而将现有 Pod 从目标节点中逐出。
PodDisruptionBudget
限制为 1 小时。terminationGracePeriodSeconds
限制为 1 小时。
GKE 会将工作负载控制器管理的 Pod 重新安排到其他可用节点上。无法重新调度的 Pod 保持
PENDING
状态,直到 GKE 可以重新安排它们。GKE 会删除目标节点。
如果大量自动升级到特定 GKE 版本导致 GKE 舰队中出现健康状况不佳的节点,则在调查问题时 GKE 会停止升级到该版本。
如何选择版本进行自动升级
GKE 会定期发布新的次要版本,但不会立即选择已发布的版本进行自动升级。为了符合自动升级目标的要求,GKE 版本必须累积足够的用量,以证明能够长期稳定运行。
然后,Google Cloud 会选择该版本作为运行一部分特定旧版 GKE 的集群的自动升级目标。例如,在新的次要版本发布后,最早可用的次要版本通常很快不再受支持。GKE 会将运行不受支持的次要版本的集群升级到自动升级目标版本。
GKE 会在版本说明中公布新的自动升级目标版本。有时,系统会在不同的星期内为控制平面自动升级和节点自动升级选择一个版本。GKE 会自动升级到次要版本(例如 v1.21.x)中的新补丁版本。
如需了解版本生命周期和版本控制方案,请参阅 GKE 版本控制和支持。
影响版本发布时间的因素
为确保新版本集群的稳定性和可靠性,GKE 遵循版本发布期间的某些做法。
这些做法包括但不限于:
- GKE 会逐步跨 Google Cloud 区域和可用区发布更改。
- GKE 会逐步跨发布渠道发布补丁版本。补丁会依次在快速发布渠道和常规发布渠道中留出过渡时间,等到积累了一些使用情况并继续保持稳定后再推广到稳定发布渠道。如果在发布渠道的过渡期间发现补丁版本存在问题,则该版本不会推广到下一个渠道,并且较新的补丁版本会修复该问题。
- GKE 会逐步发布次要版本,并执行与补丁版本类似的过渡流程。由于次要版本涉及更多重大更改,因此会有更长的过渡期。
- 当新版本影响一组集群时,GKE 可能会延迟自动升级。例如,对于检测到使用下一个次要版本将移除的已弃用 API 或功能的集群,GKE 会暂停自动升级。
- GKE 可能会在峰值期间(例如主要节假日)延迟发布新版本,以确保业务连续性。
配置可以进行系统自动升级的时间
默认情况下,系统可以随时进行自动升级。自动升级带来的干扰非常小,尤其是对于 Autopilot 集群而言。但是,某些工作负载可能需要更为精细的控制。您可以通过配置维护时段和排除选项来管理可以自动升级和禁止自动升级的时间。
如果您配置了维护窗口和排除项,则除非当前时间在维护窗口内,否则不会进行升级。如果维护窗口在升级完成之前到期,则 GKE 会尝试暂停升级。GKE 会在下一个可用维护窗口期间恢复升级。
手动升级 Autopilot 集群
您可以手动升级 Autopilot 集群控制平面的 GKE 版本。GKE 会根据维护可用性,尽快自动升级您的节点以与控制平面版本匹配。 如需了解相关说明,请参阅手动升级控制平面。 您无法手动管理 Autopilot 集群的节点版本。
您可以将控制平面版本升级到同一发布渠道中支持的次要版本或补丁版本,也可以升级到另一个发布渠道中与集群相同的次要版本的补丁版本。
例如,假设某个 Autopilot 集群在常规发布渠道中运行 GKE 版本 1.22.8-gke.202。以下行为适用:
- 您可以升级到“常规”中的任何版本。
- 您可以升级到快速渠道中 1.22 的任何补丁版本。
如需详细了解如何在渠道之外进行升级,请参阅从较新渠道运行补丁版本。
超额配置升级
Autopilot 集群使用超额配置升级同时升级多个节点。通过超额配置升级,GKE 可以为正在运行的工作负载保持足够的计算容量,从而减少中断性版本升级对正在运行的工作负载的影响。Autopilot 会管理升级期间添加到集群的超额配置节点的数量。此数量因集群的总大小而异。GKE 还会管理升级期间同时不可用的目标节点的总数。
新超额配置节点的数量和不可用的目标节点会有所不同,以确保您的集群始终为所有正在运行的工作负载提供足够的计算容量。GKE 在升级期间将工作负载从目标节点迁移到超额配置节点时,您可能会遇到轻微中断。
如需了解超额配置升级的执行方式,请参阅自动节点升级。
超额配置升级的配额要求
与重新创建节点不同,超额配置升级需要额外的 Compute Engine 资源。资源分配取决于您可用的 Compute Engine 配额。根据您的配置,此配额可能会限制并行升级的数量,甚至可能导致升级失败。为避免扩缩问题以及提高可预测性,请确保 Compute Engine 实例配额不超过 90%。
如需详细了解配额,请参阅确保用于节点升级的资源。
接收升级通知
GKE 将升级通知发布到 Pub/Sub,为您提供了一个渠道,接收来自 GKE 的关于您的集群的信息。
如需了解详情,请参阅接收集群升级通知。
组件升级
GKE 在工作器节点上运行系统工作负载,以支持集群的特定功能。例如,gke-metadata-server
系统工作负载支持适用于 GKE 的工作负载身份联合。
GKE 负责这些工作负载的健康状况。如需详细了解这些组件,请参阅关联功能的文档。
当组件的新功能或修复可用时,GKE 会指示包含它们的补丁程序版本。如需获取组件的最新版本,请参阅关联文档或版本说明,了解有关将控制平面或节点升级到相应版本的说明。
后续步骤
- 配置维护窗口和排除项。
- 了解如何通过发布序列跨环境管理自动集群升级。
- 观看 GKE 集群升级:GKE 集群稳定性、安全性和性能的最佳做法