节点升级策略


本页面介绍了可用于 Google Kubernetes Engine (GKE) 集群的节点升级策略。

在 GKE Standard 集群中,您可以为每个节点池配置以下节点升级策略之一:

  • 超额配置升级:节点以滚动方式升级。您可以控制可以同时升级的节点数量以及升级对工作负载的中断程度。
  • 蓝绿升级:现有节点仍可用于回滚,同时使用新节点配置验证工作负载。

在 Autopilot 集群中,GKE 使用超额配置升级。如需了解详情,请参阅 Autopilot 集群升级页面的超额配置升级部分。

通过为 Standard 集群节点池选择升级策略,您可以选择在速度、工作负载中断、风险缓解和费用优化之间取得适当平衡的流程。如需详细了解哪种节点升级策略适合您的环境,请参阅选择超额配置升级选择蓝绿升级

采用这两种策略,您都可以配置升级设置,以根据您的环境需求来优化流程。如需了解详情,请参阅配置您选择的升级策略。对于所选择的策略,确保您有足够的配额、资源可用性或预留容量来使用该策略升级节点。如需了解详情,请参阅确保用于节点升级的资源

Surge upgrades

超额配置升级是默认升级策略,最适合那些可以处理增量更改的应用。超额配置升级使用滚动方法以不确定的顺序升级节点。通过选择使用 maxSurge 可创建的新型超额配置节点数以及使用 maxUnavailable 一次可以中断的现有节点数,为您的环境在速度和中断之间找到最佳平衡点。

超额配置升级还可与集群自动扩缩器配合使用,以防止对正在升级的节点进行更改。

为您的环境选择超额配置升级

如果您看重费用优化并且可以容忍在 60 分钟内关停工作负载,我们建议您为节点池选择超额配置升级。

超额配置升级最适合以下情况:

  • 如果您要优化升级速度。
  • 如果工作负载比较能够容忍中断,可以接受长达 60 分钟的正常终止。
  • 如果您想通过尽可能减少创建新节点来控制费用。

GKE 使用超额配置升级的时机

如果启用,GKE 会在发生以下类型的更改时使用超额配置升级:

其他更改(包括对现有节点池的节点标签和污点应用更新)不使用超额配置升级,因为它们不需要重新创建节点。

了解超额配置升级设置

在使用超额配置设置的集群维护期间,使用超额配置升级设置,在速度和中断之间为节点池选择适当的平衡。通过更改 Standard 节点池的超额配置升级参数,您可以更改 GKE 一次尝试升级的节点数。

超额配置升级行为由 maxSurgemaxUnavailable 设置决定,这些设置决定了通过所述步骤在滚动窗口中同时升级的节点数量。

maxSurge:GKE 会在移除现有超额配置节点之前创建新的超额配置节点

设置 maxSurge 可选择每个可用区在升级期间可添加到节点池的额外超额配置节点的最大数量,从而提高在现有节点上运行的工作负载立即迁移到新节点的可能性。默认值为一。为了升级一个节点,GKE 会执行以下步骤:

  1. 预配新节点。
  2. 等待新节点准备就绪。
  3. 封锁现有节点。
  4. 排空现有节点,并遵循 PodDisruptionBudgetGracefulTerminationPeriod 设置长达一小时。
  5. 删除现有节点。

要让 GKE 创建超额配置节点,您的项目必须具有资源,才能临时创建额外节点。如果您没有额外的容量,GKE 在资源可用之前不会开始升级节点。如需了解详情,请参阅超额配置升级的资源

maxUnavailable:GKE 使现有节点不可用以便重新创建它

设置 maxUnavailable 以选择每个可用区在升级期间可能同时不可用的节点的最大数量。默认值为零。如果其他节点没有容量,在现有节点上运行的工作负载可能需要等待现有节点升级。为了升级一个节点,GKE 会执行以下步骤:

  1. 封锁现有节点。
  2. 排空现有节点,并遵循 PodDisruptionBudgetGracefulTerminationPeriod 设置长达一小时。
  3. 使用新配置重新创建现有节点。
  4. 等待现有节点准备就绪。
  5. 取消封锁现有的已升级节点。

当 GKE 重新创建现有节点时,如果节点容量不是来自预留,则 GKE 会暂时释放该节点容量。这意味着,如果容量有限,您就有失去现有容量的风险。因此,如果您的环境资源受限,请仅在使用预留节点时才采用此设置。如需了解详情,请参阅在资源受限的环境中升级

maxSurgemaxUnavailable 设置的示例用法

例如,GKE 集群具有包含 5 个节点的单可用区节点池和以下超额配置升级配置: maxSurge=2;maxUnavailable=1

在此节点池的超额配置升级期间,GKE 会在滚动窗口中创建两个已升级的节点,并且一次最多中断一个现有节点。在已升级的节点准备就绪后,GKE 最多可以关闭三个现有节点。在升级过程中,节点池将包含四到七个节点。

超额配置升级设置的注意事项

在配置超额配置升级设置之前,请考虑以下信息:

  • 对于具有特定预留亲和性的节点池,超额配置升级创建的节点受 Google Cloud 资源配额资源可用性预留容量的约束。如果您的环境资源受限,请参阅在资源受限的环境中升级
  • GKE 可同时升级的节点数是 maxSurgemaxUnavailable 之和。同时升级的节点数量上限为 20。超额配置升级还可与集群自动扩缩器配合使用,以防止对正在升级的节点进行更改。
  • GKE 可升级多可用区节点池,一次升级一个可用区。超额配置升级参数仅适用于该可用区中的节点数。可并行升级的节点的最大数量不会超过 maxSurgemaxUnavailable 之和,也不会超过可用区中的节点数。
  • 如果节点池采用 Spot 虚拟机,GKE 会使用 Spot 虚拟机来创建超额配置节点,但不会等到 Spot 虚拟机准备就绪后再对现有节点进行封锁和排空。如需了解详情,请参阅升级使用 Spot 虚拟机的 Standard 节点池

调整超额配置升级设置以便在速度和中断之间取得平衡

下表介绍了四种不同的升级配置文件,并以它们为例,帮助您了解不同的配置:

说明 配置 典型的应用场景
平衡(默认),速度较慢,但中断次数最少 maxSurge=1 maxUnavailable=0 大多数工作负载
快速、无超额配置资源、中断次数最多 maxSurge=0 maxUnavailable=20 作业必须运行完成后的大型节点池
快速、超额配置资源最多、中断次数较少 maxSurge=20 maxUnavailable=0 大型节点池
速度最慢、中断性、无超额配置资源 maxSurge=0 maxUnavailable=1 具有预留的资源受限的节点池

平衡(默认)

如需利用超额配置升级,最简单的方法是使用默认配置 maxSurge=1;maxUnavailable=0.。使用此配置时,升级进展缓慢,一次只能添加一个超额配置节点,这意味着一次仅升级一个节点。Pod 可以立即在新的超额配置节点上重启。此配置只需要资源来临时创建一个新节点。

快速、无超额配置资源

如果您拥有大型节点池,并且工作负载对中断不敏感(例如,已运行完成的批量作业),则可使用以下配置,在不使用任何额外资源的情况下,最大限度地提高速度:maxSurge=0;maxUnavailable=20。此配置不会开启额外的超额配置节点,并且允许 20 个节点同时进行升级。

快速、中断次数较少

如果您的工作负载对中断很敏感,并且您已经设置了 PodDisruptionBudgets (PDB),而且您没有使用 externalTrafficPolicy: Local(它不使用并行节点排空),则您可以使用 maxSurge=20;maxUnavailable=0 加快升级的速度。此配置可以并行升级 20 个节点,而 PDB 会限制在给定时间可排空的 Pod 数量。虽然 PDB 的配置可能会有所不同,但如果您使用 maxUnavailable=1 为节点池上运行的一个或多个工作负载创建 PDB,则系统一次只能逐出这些工作负载的一个 Pod,从而限制整个升级的并行性。此配置需要资源来临时创建 20 个新节点。

缓慢、但没有超额配置资源

如果您无法使用任何额外资源,则可以使用 maxSurge=0;maxUnavailable=1,以便一次重新创建一个节点。

控制正在进行的超额配置升级

借助超额配置升级,您可以在升级过程中使用命令施加部分控制。为了更好地控制升级过程,我们建议使用蓝绿升级

取消(暂停)超额配置升级

您可以在升级过程中随时取消正在进行的超额配置升级。取消操作会暂停升级,从而阻止 GKE 升级新节点,但不会自动回滚已升级节点的升级。取消升级后,您可以恢复回滚

取消升级时,GKE 会对每个节点执行以下操作:

  • 已经开始升级的节点会完成升级。
  • 尚未开始升级的节点不会升级。
  • 已成功完成升级的节点不受影响且不会回滚。

这意味着节点池可能最终处于节点运行两个不同版本的状态。如果为节点池启用了自动升级,则可以安排该节点池再次自动升级,从而升级节点池中运行旧版本的剩余节点。

了解如何取消节点池升级

恢复超额配置升级

如果节点池升级已取消,仅升级了部分节电池,则可以继续升级以完成节点池的升级过程。这将升级原始操作中尚未升级的所有剩余节点。了解如何恢复节点池升级

回滚超额配置升级

如果节点池部分升级,您可以回滚节点池以将其还原到之前的状态。升级成功后,您无法回滚节点池。尚未开始升级的节点不受影响。了解如何回滚节点池升级

如果要在升级完成后将节点池降级回先前版本,请参阅降级节点池

蓝绿升级

蓝绿升级是默认超额配置升级策略的替代升级策略。 使用蓝绿升级时,GKE 首先会创建具有新节点配置的一组新节点资源(“绿色”节点),然后再逐出原始资源(“蓝色”节点)上的任何工作负载。GKE 会在需要时保留“蓝色”资源以便回滚工作负载,直到达到其过渡时间。您可以根据环境的需求调整升级和过渡时间。

借助此策略,您可以更好地控制升级过程。如有必要,您可以回滚正在进行的升级,因为升级期间会保留原始环境。但是,此升级策略也更占用资源。复制原始环境时,节点池在升级期间使用的资源数量将翻倍。

为您的环境选择蓝绿升级

如果在防工作负载无法容忍升级时,您需要能够快速回滚高可用性生产工作负载,并且接受临时费用增加,我们建议您为节点池选择蓝绿升级。

蓝绿升级最适合以下情况:

  • 如果您希望在缓解风险至关重要并且需要的正常终止超过 60 分钟时逐步推出。
  • 如果您的工作负载对中断的容忍度较低。
  • 如果接受因资源使用率更高而增加临时费用。

GKE 使用蓝绿升级的时机

对于 GKE 节点,存在不同类型的配置更改,需要重新创建节点。如果启用,GKE 会在发生以下类型的更改时使用蓝绿升级:

超额配置升级将用于需要重新创建节点的任何其他功能。如需了解详情,请参阅使用超额配置升级的时机

蓝绿升级的各个阶段

通过蓝绿升级,您可以通过以下方式自定义和控制该过程:

本部分介绍升级过程的各个阶段。您可以使用升级设置来调整各阶段的工作方式,并使用命令来控制升级过程

第 1 阶段:创建绿色池

在此阶段,系统将使用新的节点配置(新版本或映像类型)为目标池下的每个可用区创建一组新的代管式实例组 (MIG)(称为“绿色池”)。

首先会检查配额,然后再开始预配新的绿色资源。

在此阶段,原始 MIG(称为蓝色池)的集群自动扩缩程序将停止纵向扩容或缩减。绿色池在此阶段只能纵向扩容。

在此阶段,您可以根据需要取消升级。取消蓝绿升级时,升级会在当前阶段暂停。取消升级后,您可以恢复回滚。在此阶段,回滚将删除绿色池。

第 2 阶段:封锁蓝色池

在此阶段,蓝色池中的所有原始节点(现有 MIG)将被封锁(标记为无法安排)。现有工作负载会继续运行,但系统不会在现有节点上安排新的工作负载。

在此阶段,您可以根据需要取消升级。取消蓝绿升级时,升级会在当前阶段暂停。取消升级后,您可以恢复回滚。在此阶段,回滚将取消封锁蓝色池并删除绿色池。

第 3 阶段:排空蓝色池

在此阶段,蓝色池中的原始节点(现有 MIG)将批量排空。当 Kubernetes 排空节点时,逐出请求将发送到该节点上运行的所有 Pod。系统将重新安排 Pod。对于排空期间 PodDisruptionBudget 违规或 terminationGracePeriodSeconds 较长的 Pod,在删除蓝色池阶段中删除节点时会删除这些 Pod。您可以使用此处和下一部分中介绍的 BATCH_SOAK_DURATIONNODE_POOL_SOAK_DURATION 来延长 Pod 删除前的时间段。

您可使用以下任一设置来控制批次的大小:

  • BATCH_NODE_COUNT:要在一个批次中排空的绝对节点数。
  • BATCH_PERCENT:要批量排空的节点所占的百分比,以 0 到 1 之间的小数(含 0 和 1)表示。 如果百分比不是节点数上限,则 GKE 会向下舍入到最近的节点百分比,使最小值为 1 个节点。

如果其中任何一个设置为零,GKE 会跳过此阶段并进入过渡节点池阶段。

此外,您还可以使用 BATCH_SOAK_DURATION 控制每个批次的排空过渡时间。此时长以秒为单位定义,默认值为零。

在此阶段,如有必要,您仍然可以取消升级。取消蓝绿升级时,升级将在当前阶段暂停。取消升级后,您可以恢复回滚。在此阶段,回滚将停止排空蓝色池,并取消封锁蓝色池。然后,可以在蓝色池中重新安排工作负载(不保证),并且绿色池将被删除。

第 4 阶段:过渡节点池

此阶段用于在蓝色池节点排空后验证工作负载的运行状况。

过渡时间用 NODE_POOL_SOAK_DURATION 设置(以秒为单位)。默认情况下,它设置为一小时(3600 秒)。如果总过渡时长达到 7 天(604,800 秒),则删除蓝色池阶段将立即开始。

总过渡时长为 NODE_POOL_SOAK_DURATION 加上 BATCH_SOAK_DURATION 乘以批次数量(由 BATCH_NODE_COUNTBATCH_PERCENT 确定)的总和。

在此阶段,您可以通过完成升级来完成升级并跳过任何剩余的过渡时间。此操作会立即开始移除蓝色池节点。

如有必要,您仍然可以取消升级。取消蓝绿升级时,升级将在当前阶段暂停。取消升级后,您可以恢复回滚

在此阶段,集群自动扩缩程序现在可以照常纵向扩容或缩减绿色池。

第 5 阶段:删除蓝色池

过渡期到期后,蓝色池节点将从目标池中移除。此阶段无法暂停。此外,此阶段不使用逐出,而是尝试删除 Pod。与逐出不同,删除操作不遵循 PDB,并强制删除 Pod。删除操作会将 Pod 的 terminationGracePeriodSeconds 限制为不超过 60 分钟。在最后一次尝试删除剩余 Pod 后,蓝色池节点会从节点池中删除。

完成此阶段后,节点池将只有具有更新配置(版本或映像类型)的新节点。

集群自动扩缩程序如何与蓝绿升级搭配使用

在蓝绿升级阶段,原始“蓝色”池不会纵向扩容或缩减。创建新的“绿色”池后,它只能扩容,直到过渡节点池阶段,在该阶段可以扩容或缩容。如果升级回滚,则在此过程中,需要额外容量时,原始“蓝色”池可能会扩容。

控制正在进行的蓝绿升级

通过蓝绿升级,您可以在升级过程中使用命令施加控制。这样,在您确定需要将工作负载回滚到旧节点配置时,就可以非常精确控制流程。

取消(暂停)蓝绿升级

取消蓝绿升级时,请暂停其当前阶段的升级。此命令可在除删除蓝色池阶段以外的所有阶段使用。取消后,节点池将根据发出请求的阶段暂停在中间状态。

了解如何取消节点池升级

取消升级后,您可以选择以下两个路径之一:恢复回滚

恢复蓝绿升级

如果您确定升级可以继续进行,则可以继续升级。

如果恢复,升级过程将在暂停的中间阶段继续。如需了解如何恢复节点池升级,请参阅恢复节点池升级

回滚蓝绿升级

如果您确定升级不应继续,并且想要将节点池恢复到原始状态,则可以回滚。如需了解如何回滚节点池升级,请参阅回滚节点池升级

在回滚工作流中,该过程会逆向进行,将节点池恢复到原始状态。蓝色池将被取消封锁,以便可以在其上重新安排工作负载。在此过程中,集群自动扩缩程序可能会根据需要纵向扩容蓝色池。绿色池将被排空和删除。

如果要在升级完成后将节点池降级回先前版本,请参阅降级节点池

完成蓝绿升级

过渡阶段,如果您确定工作负载不需要使用新节点配置进行进一步验证,并且旧节点可以移除,则可以完成升级。完成升级会跳过过渡阶段的其余部分,并继续进行删除蓝色池阶段

如需详细了解如何使用 complete 命令,请参阅完成蓝绿节点池升级

后续步骤