您可以使用发布序列跨多个环境中的 Google Kubernetes Engine (GKE) 集群管理自动集群升级的顺序。例如,您可以在升级生产集群之前限定试产集群中的新版本。 GKE 还提供此功能的早期版本,即基于舰队的发布序列,该版本的功能较为有限,不建议用于新环境。
本文档假定您了解以下内容:
如需配置发布顺序,请参阅使用自定义阶段对集群升级的发布进行排序。概览
借助 GKE 发布序列,您可以为跨环境的集群升级定义特定的有序序列,例如先升级开发环境中的集群,然后升级测试环境中的集群,最后升级生产环境中的集群。这种渐进式策略提供内置的烘烤时间,让您可以在升级到达最关键的系统之前发现并缓解潜在问题。
发布序列基于舰队的概念构建,舰队是映射到环境(例如测试环境)的 GKE 集群的逻辑分组。如需使用此功能,您需要定义由舰队组成的序列,并设置每个群组之间的过渡时间。当 GKE 选择新版本时,您的集群会按照定义的顺序升级,以便您在将该版本完全部署到生产环境之前验证工作负载。
舰队支持轻量级成员资格,可让您对集群进行逻辑分组以实现发布序列,而无需启用所有舰队级配置和功能。如果您想使用发布序列,但不想使用完整舰队管理的其他一些功能(例如舰队级命名空间相同性),那么轻量级成员资格是一个不错的选择。如需了解详情,请参阅轻量级成员资格。
选择发布序列策略
GKE 提供两种发布顺序。这两个版本都基于相同的核心原则,即基于舰队的渐进式升级,但我们建议在新环境中使用具有自定义阶段的发布序列:
- 具有自定义阶段的发布序列(建议用于新环境):此版本是基于群组的模型的升级版,可提供更精细的控制和灵活性,但缺少 Google Cloud 控制台支持。借助自定义阶段,您可以使用标签在舰队中定义特定阶段,因此对于更复杂的发布策略(例如在更广泛的发布之前先在一小部分生产集群上部署新版本),自定义阶段是不错的选择。此外,您还可以更好地控制发布,例如针对特定版本启动发布、选择要在序列中发布的升级类型,以及暂停或取消发布。如果您是首次创建发布序列,请选择此选项。
- 基于舰队的发布序列:是唯一可与 Google Cloud 控制台搭配使用的版本,但功能较为有限,如果您是首次创建发布序列,不建议使用此版本。
本文档的其余部分仅涉及使用自定义阶段的发布序列。
使用自定义阶段的发布序列
将发布序列与自定义阶段搭配使用时,您可以定义舰队升级顺序并设置过渡时间。此外,您还可以执行以下操作:
- 定义具有精细阶段的序列,该序列可以使用标签定位舰队中的特定集群子集,因此非常适合分阶段推出等策略。
- 通过新的
RolloutSequence和RolloutAPI 对象,您可以获得更强的控制力和可观测性。
此方法可让您灵活地精细控制集群升级。如需定位舰队中的特定集群子集,您可以使用 label-selector 仅定位具有特定 Kubernetes 标签的集群。
下图说明了 GKE 如何自动升级使用自定义阶段的发布序列中的集群。相应阶段以 prod 舰队中具有名为 canary 的 label-selector 的集群为目标:
当 GKE 发布新版本时,会先升级测试舰队中的集群,然后升级预演舰队中的集群。然后,在生产环境舰队中,GKE 会优先考虑与 label-selector 匹配的集群。由于 prod-cluster-1 带有 canary:
true 标签,因此 GKE 会先升级此集群。GKE 会在流程结束时升级生产环境舰队(在主要阶段)中的所有剩余集群,因为此阶段没有任何标签选择器。
在阶段之间的已配置过渡期间,您可以确认工作负载在升级的集群上按预期运行。上例展示了生产环境舰队中的一个自定义阶段,但您可以向任何舰队添加多个阶段,也可以仅使用一个具有多个阶段的舰队。
主要概念
- 过渡时间:一个可配置的等待时间段,在某个阶段的所有集群升级完毕后开始。通过此过渡时间,您可以在一个环境中验证新版本,并在升级到下一个环境之前发现潜在问题。您可以为序列中的每个阶段配置最长 30 天的过渡时间。在预生产阶段延长过渡时间可为您提供更多验证时间。
RolloutSequence:此对象是用于定义升级序列的主要资源。RolloutSequence包含一系列按顺序排列的阶段,用于验证早期阶段的集群是否已完全升级并完成过渡期,然后才能继续升级到下一阶段。每个RolloutSequence都有一个Rollout,对应于每次新版本发布。Rollout:此对象可让您观察序列中单个版本升级的进度。您可以使用Rollout查看发布状态、跟踪进度,以及查看是否有任何集群不符合升级条件以及不符合条件的原因。每个Rollout都与一个特定的RolloutSequence相关联,该RolloutSequence表示版本发布顺序。- 专用宿主项目:我们建议您使用专用Google Cloud 项目来托管
RolloutSequence对象。将序列放置在专用项目中,可为发布序列提供中立的中央控制点,这与管理 CI/CD 流水线的最佳实践类似。
在专用宿主项目中创建和管理 RolloutSequence 资源。
- 阶段:阶段是指发布序列中的一个步骤。每个阶段都包含一组一起升级的集群。
- 舰队:舰队是用于对集群进行分组的主要方式。发布序列中的阶段只能引用一个舰队。
- 标签选择器:发布序列由一个或多个阶段组成。每个阶段都包含一个舰队中的集群,您可以使用集群上的标签选择器将舰队进一步拆分为多个阶段。这种方法支持分阶段发布等策略,即先升级一小部分生产集群。
GKE 如何升级发布序列中的集群
当 GKE 升级集群时,会首先升级控制平面,然后升级节点。在发布序列中,集群仍然使用此过程进行升级,但您也可以控制集群组(舰队)的升级序列。您还可以指定一个过渡时间,用于定义在升级从一个组进行到下一个组之前 GKE 暂停的时长。
发布序列中的集群升级将遵循以下步骤:
- GKE 在发布序列中开始新的发布。默认情况下,当 GKE 为特定发布渠道中次要版本上的集群设置新的自动升级目标时,就会开始发布。对于使用自定义阶段的发布序列,您也可以触发新发布,以将发布序列中的特定版本发布到您选择的阶段。
GKE 开始将集群控制平面升级到第一组集群中的新版本。在 GKE 升级集群的控制平面后,GKE 将开始升级集群的节点。 升级发布序列中的集群时,GKE 会遵循维护可用性。
GKE 会为控制平面升级执行以下步骤:
- 在第一个组中的所有集群控制平面升级完成后,GKE 开始控制平面升级的过渡期。如果自控制平面升级开始以来已过去 30 天以上,GKE 也会开始过渡期。
在第一个群组的集群控制平面升级过渡期完成后,GKE 会开始将第二个群组的控制平面升级到新版本。不过,请注意以下几点:
- 在某些情况下,GKE 可能会先多次升级第一组的集群控制平面,然后再升级第二组的集群控制平面。在这种情况下,GKE 会选择同时具有以下属性的最新版本:
- 版本由第一个群组确定。
- 该版本最多比第二组集群的控制平面版本高一个次要版本。
- 如果第二组中集群的控制平面版本高于第一组限定的版本,GKE 不会升级这些集群的控制平面。
- 在某些情况下,GKE 可能会先多次升级第一组的集群控制平面,然后再升级第二组的集群控制平面。在这种情况下,GKE 会选择同时具有以下属性的最新版本:
在控制平面升级的同时,GKE 会为节点升级执行以下步骤:
- 在第一组中的所有集群的节点升级完成后,GKE 开始节点升级的过渡期。如果自节点升级开始以来已过去 30 天以上,GKE 也会开始过渡期。
- 在第一组的节点升级过渡期结束后,GKE 会开始将第二组的节点升级到新版本。不过,请注意以下几点:
- 在某些情况下,GKE 可能会先多次升级第一组的集群节点,然后再升级第二组的集群节点。在这种情况下,GKE 会选择同时具有以下属性的最新版本:
- 版本由第一个群组确定。
- 版本不晚于第二组的集群控制平面版本。
- GKE 不会升级第二组中版本高于第一组限定版本的集群的节点。
- 在某些情况下,GKE 可能会先多次升级第一组的集群节点,然后再升级第二组的集群节点。在这种情况下,GKE 会选择同时具有以下属性的最新版本:
GKE 从第二组进入到第三组时会重复这些步骤,直到发布序列的所有群组中的集群都升级到新版本。
当集群在每个组中升级时,请在过渡期间验证工作负载在集群运行新 GKE 版本的情况下是否按预期运行。
集群也可能由于维护窗口或排除项、已弃用的 API 使用情况或其他原因而无法升级。
如何控制发布序列中的升级
对于发布序列中的集群升级,集群组会按您定义的顺序升级,且每个群组会在您选择的各时段内进行过渡。 如需详细了解如何控制此流程,请参阅以下内容:
示例:社区银行逐步将更改从测试环境发布到生产环境
社区银行的平台管理员管理三个主要部署环境:测试、预演和生产环境。生产集群分布在多个区域,具有不同的严重程度。为了有效管理升级,管理员将每个环境中的集群分组到舰队中。根据发布序列,全部三个舰队中的每个集群都已在同一发布渠道(在本例中为常规渠道)中注册,并且所有集群都运行相同的次要版本。
管理员的主要目标是确保在新的 GKE 版本到达银行的关键生产环境之前,对其进行全面审查。他们还希望先逐步升级低流量区域中的集群,然后再升级高流量区域中的集群,最后升级最重要的区域中的集群。为此,他们使用具有自定义阶段的发布顺序来定义渐进式升级策略,该策略包括根据生产集群的区域为其添加标签。这种方法可让开发者在全面推出之前,先在一小部分生产流量上验证新版本。
为实现此计划,管理员将以下标签应用于生产环境舰队中的集群:
us-west1(流量较低)中的聚类会标记为prod-region: us-west1。europe-west1(流量较高)中的集群带有prod-region: europe-west1标签。us-east1(最关键的流量)中的集群未添加标签。序列中舰队的最后一个阶段必须充当所有剩余集群的“兜底”阶段。因此,管理员无需向这些剩余的集群添加标签。
接下来,在用于管理 CI/CD 配置的专用宿主项目中,他们定义了一个 RolloutSequence 对象。此新序列包含五个不同的阶段:
- 测试:此阶段包括
testing舰队中的所有集群。管理员将过渡时间设置为 3 天,以便进行全面验证。 - 预发布:此阶段包括
staging舰队中的所有集群,过渡时间为 3 天。 - 区域
us-west1中的生产环境:此阶段以生产环境中的所有集群为目标,但使用label-selector仅包含具有prod-region: us-west1标签的集群。在此阶段,管理员可以监控一小部分生产集群在 3 天过渡时间内的任何问题。 - 区域
europe-west1中的生产环境:此阶段包括production舰队中具有prod-region: europe-west1标签的集群。管理员设置了更长的 4 天过渡时间,以便进行更全面的验证。 us-east1区域中的生产:此最终阶段包括production舰队中的其余集群,即us-east1中的所有集群。
这种方法可让管理员精细控制生产环境升级,在潜在问题影响整个生产环境之前将其发现,从而显著提高升级过程的安全性和可靠性。
在例行补丁升级期间,银行的自动化测试在暂存环境中顺利完成,速度远超预期。管理员发现新版本稳定,并认为在升级过渡舰队后,三天的过渡时间对于此类常规更新来说过长。
为了加快此发布,管理员修改了 RolloutSequence 定义,并缩短了生产环境群组的 us-west1 阶段的过渡时间。由于此 RolloutSequence 定义变更会更新所有当前和未来发布阶段的默认过渡时间,因此管理员记下要点,以便在完成此特定补丁发布阶段后将过渡时间恢复为原来的 3 天。此方法有助于确保在未来的次要版本升级中,他们能够采用更谨慎的过渡时间标准。
管理员使用维护窗口和排除项来确保 GKE 在对银行造成的影响最小时升级集群。GKE 遵循按发布序列升级的集群的维护可用性:
- 管理员为其集群配置了维护窗口,以便 GKE 仅在工作时间结束后升级集群。
- 如果管理员检测到集群的工作负载存在问题,也会使用维护排除项暂时阻止集群升级。
此外,管理员还可以通过以下操作管理发布:如果检测到问题,暂停发布;如果对某个阶段的更改有信心,并准备好立即继续,则完成该阶段。
管理员对其节点混合使用超额配置升级和蓝绿升级,根据这些节点上运行的工作负载,在速度和风险容忍度之间取得平衡。
GKE 如何开始发布新版本
默认情况下,GKE 在设置新的自动升级目标时会创建新的发布。GKE 选择推出的版本取决于序列中集群的次要版本和发布渠道。例如,如果您的集群在常规渠道中运行 GKE 版本 1.35,并且 GKE 将自动升级目标设置为 1.35.5-gke.1000000,则 GKE 会创建一个新的 Rollout。
不过,您也可以选择希望 GKE 推出的版本。
发布特定版本
您还可以启动向特定版本的发布,例如,如果您想快速修补安全漏洞或修复 GKE 集群的严重问题,就可以这样做。此操作会创建一个 Rollout 对象,从而启动整个发布序列的发布,就像 GKE 设置自动升级目标时一样。如需发布新版本,请参阅发布特定版本。
如果您需要尽快向集群推出新版本,也可以为各个集群执行手动集群升级。手动集群升级是在集群级层执行的。
选择 GKE 在发布序列中执行的升级类型
默认情况下,GKE 会将所有类型的集群升级(包括控制平面和节点的补丁版本升级和次要版本升级)纳入发布序列。
升级主要有四种类型:
- 控制平面的补丁版本升级
- 节点的补丁版本升级
- 控制平面的次要版本升级
- 节点的次要版本升级
您可以限制发布序列中的集群升级范围,以仅执行特定类型的升级。例如,如果您希望 GKE 仅发布控制平面升级,而不发布节点升级,则可以在发布序列中指定这一点。
如果您限制发布序列中集群的升级范围,GKE 将不会为发布序列中的任何集群执行该类型的自动升级,除非需要执行强制性自动升级。如需了解详情,请参阅强制性自动升级的推出。限制集群升级的范围不会取消正在进行的受限类型的发布,只会阻止 GKE 创建未来受限类型的发布。
由于 GKE 不会将集群的节点升级到比控制平面更新的版本,因此限制控制平面升级的范围也会限制节点升级。
如需限制发布序列中的自动升级范围,请参阅选择 GKE 在发布序列中执行的升级类型。
限制发布序列的范围与设置维护排除项类似,但维护排除项是针对单个集群或集群内的节点池设置的。
强制性自动升级的发布
无论您的集群是否注册了发布序列,GKE 都会自动升级集群以实现安全性和兼容性。如果发布序列中的集群的控制平面在 90 天内未升级,或者集群运行的次要版本已达到支持终止日期,则 GKE 会创建强制性发布以执行自动升级。这些推出有助于确保您的集群始终具有出色的性能、可用性和安全性。无论发布范围限制、维护排除项或任何其他延迟原因如何,GKE 都会针对这些场景创建发布。
您无法暂停或取消这些类型的发布。无论是否注册了发布序列,GKE 都会执行这些类型的集群升级。
如需详细了解这些政策,请参阅以下部分:
发布资格
如需通过使用自定义阶段的序列发布版本,集群必须能够从其发布渠道升级到目标版本。当有新的 GKE 版本可用时,如果序列中的集群符合新版本的条件,系统会创建 Rollout 对象。虽然我们建议所有集群都注册到同一发布渠道,但如果它们未注册到同一发布渠道,GKE 会从序列中最保守的渠道中选择一个版本。例如,如果集群同时使用稳定渠道和常规渠道,GKE 会选择稳定渠道中的版本。
然后,Rollout 会按 RolloutSequence 中定义的阶段逐步执行。在给定阶段内,控制平面发布和节点池发布可以并行运行。此进展过程的一项关键规则是,当阶段处于特定版本的 SOAKING 状态时,该阶段无法开始针对较新版本的新的 Rollout。这种做法有助于确保在开始下一次升级之前,版本已得到充分验证。您可以通过监控 Rollout 对象来观察每个集群的进度和资格条件。如果您发现版本差异导致集群不符合条件,可能需要采取措施,例如手动升级集群或在发布序列中忽略集群,以继续发布。如果集群不符合任何发布条件,则在需要创建强制性自动升级的发布之前,GKE 不会自动升级该集群,如上一部分所述。
运行版本高于升级目标的集群不会阻止升级
如果序列中的某个阶段包含运行的版本比发布的目标版本更新的集群,GKE 会升级符合目标版本条件的集群,并忽略已运行更新版本的集群。此行为不会阻止发布序列进入下一阶段。
例如,如果某个阶段的发布目标版本为 1.32,并且该阶段包含运行 1.31 和 1.33 的集群,则 GKE 会将运行 1.31 的集群升级到 1.32,并忽略已运行 1.33 的集群。
前一阶段确定了多个可用于下一阶段的升级目标
序列中的前一阶段可能会完成多个新版本的发布,而后续阶段则处于暂停状态(例如,因维护排除项而暂停)或仍在处理之前的升级。在这种情况下,当后续阶段准备好接受新升级时,GKE 会将该阶段升级到经过资格认证的最新版本。对于控制平面升级,此版本最多可以比后续阶段的集群控制平面版本晚一个次要版本。对于节点升级,此版本可以等于后续阶段集群的控制平面版本,但不能高于该版本。
例如,如果您配置了维护排除项以暂时阻止生产集群升级,则此方案适用。如果您的预生产集群没有相同的维护排除项,这些集群可能会多次升级,从而符合多个新版本的条件,但您的生产阶段不会升级。
30 天后强制过渡
为确保发布序列完成集群升级,如果控制平面或节点升级未在最长升级时间(30 天)内完成,GKE 会为相应群组启动过渡期。在过渡期内,群组中任何剩余集群的升级仍可继续进行。
发布顺序如何与其他升级功能搭配使用
发布顺序可与其他 GKE 升级功能搭配使用:
维护窗口和排除项:您仍然可以使用维护窗口和排除项来控制集群何时可以升级以及何时不可以升级。GKE 仅在集群的维护窗口内开始升级集群。您可以使用维护排除项来暂时阻止集群升级。以下两种方法均可限制 GKE 仅执行特定类型的升级:
- 集群或节点池级层:维护排除项
- 发布序列级别:选择 GKE 在发布序列中执行的升级类型
不过,这两种限制集群升级范围的方法都无法阻止强制性自动升级。如果 GKE 由于维护窗口或排除项无法升级集群,则阶段中的集群可能无法完成升级。如果由于维护窗口或排除项的原因在 30 天内无法完成集群升级,则无论所有集群是否已完成升级,阶段都将进入其过渡阶段。
节点升级策略:发布顺序不会影响您配置的节点升级策略(例如蓝绿升级)。与没有发布序列的集群升级类似,GKE 会对 Autopilot 节点使用超额配置升级。如需了解详情,请参阅自动节点升级。
如果节点升级无法在 30 天内完成,则无论所有集群是否已完成升级,该群组都将进入过渡阶段。如果节点升级策略导致标准集群的节点升级需要更长时间才能完成,则可能会发生这种情况,尤其是当节点池较大时。如果维护窗口不够大,导致节点升级无法完成,则也会加剧这种情况。
发布渠道:我们建议您在发布序列中将所有集群注册到同一发布渠道。
弃用使用情况检测:GKE 的弃用使用情况检测功能仍按预期运行,可能会暂停使用已弃用 API 的集群的升级。
手动升级:手动升级序列第一阶段中的集群本身并不会限定相应版本,也不会触发发布继续进行。自动发布流程由为发布渠道设置的官方自动升级目标驱动。手动升级会更新集群,但只有当该版本成为指定的自动升级目标后,序列才会开始推进。
集群通知:除了其他可用的集群通知之外,GKE 还提供有关发布顺序的通知。如需了解详情,请参阅有关发布序列的通知。
接收顺序中的多个升级
发布渠道会为集群选择升级目标版本。如果在升级到先前目标版本的过程中有新版本可用,即使后续阶段仍在接收先前的升级,第一阶段也可以开始发布新版本。例如,如果序列中的第三个群组正在发布版本 1.31.12-gke.1265000,则序列中的第一个群组可以并发发布版本 1.31.13-gke.1008000。
选择发布顺序时的注意事项
如果您想通过在将新版本发布到另一个环境之前在一个环境中部署新版本来管理集群升级,请考虑使用发布序列。
但是,如果存在以下任一情况,则此策略可能不适合您的环境:
- 您的集群没有使用同一生产环境中的同一发布渠道或次要版本。
- 您经常执行手动升级,导致一个群组中的集群具有不同的自动升级目标版本。
与发布序列有关的通知
GKE 会发送集群通知,其中包含集群级层有关集群升级的重要信息。此外,GKE 还会提供有关具有自定义阶段的发布序列以及使用这些发布序列进行的发布的通知。例如,当发布阶段开始、完成或受阻时,GKE 会发送通知。或者,如果您错误地配置了发布序列,GKE 会发送通知。如需了解详情,请参阅集群通知文档,以及其中有关 RolloutEvent 和 RolloutSequenceEvent 的相应部分。
管理发布
当 GKE 在发布序列中的集群中发布新版本时,您可以使用以下操作来控制该过程,同时评估集群和工作负载对更改的响应情况。此外,您还可以创建新的发布版本,以发布特定版本。
在升级过程中,您可以检查升级状态。您可以根据升级的进展情况,采取以下各小节中说明的操作。
暂停发布
您可以暂停正在进行的发布。例如,如果您发现集群和正在发布的版本可能存在问题,可以暂时暂停发布。GKE 不会开始对此版本执行新的升级操作,以便您根据需要调查任何问题。GKE 不会停止正在进行的升级操作,但不会开始新的升级操作,包括后续阶段的升级操作。
如需暂停发布,请参阅暂停发布。
暂停分阶段发布后,您可以恢复或取消分阶段发布。发布最多可以暂停 90 天。90 天后,GKE 会取消发布。
暂停发布作业不会阻止后续发布作业的启动。不过,这些发布不会取代已暂停的发布阶段。例如,如果 GKE 已将 1.34.8-gke.1000000 发布到第一阶段和第二阶段,并且您暂停了第三阶段的发布,则 GKE 可以开始将 1.35.5-gke.1163000 发布到第一阶段和第二阶段,并升级这两个阶段中的集群。不过,在第三阶段完成或取消 1.34.8-gke.1000000 的发布之前,GKE 不会在第三阶段开始升级到 1.35.5-gke.1163000。
如果某个发布序列有多个正在进行的发布,并且您想暂停所有这些发布,则必须单独暂停每个发布。如果您想阻止 GKE 启动其他发布,可以选择 GKE 在发布序列中执行的升级类型。
恢复发布
如果您已调查任何潜在问题,并准备好继续进行升级,则可以恢复暂停时间不超过 90 天的已暂停的发布。只有在同一阶段没有其他相同类型的发布(控制平面发布或节点发布)正在运行时,您才能恢复已暂停的发布。您还可以恢复因技术或业务原因而由 GKE 自动暂停的发布,不过我们建议您在执行此操作之前谨慎考虑。
如果您恢复发布,GKE 会启动新的升级操作,以继续在发布序列的各个阶段发布新版本。
如需恢复发布,请参阅恢复发布。
取消发布
您可以取消发布,包括处于有效状态或已暂停的发布。取消发布后,GKE 不会自动创建针对同一版本的新发布。不过,取消发布不会阻止 GKE 发布后续版本。如果您还想阻止 GKE 发布任何后续版本,请取消所有正在进行的发布,并限制发布序列中集群升级的范围。
如需取消发布,请参阅取消发布。
如果您需要发布已取消的同一版本,请发布特定版本。
完成发布阶段
如果您确信某个版本的发布可以进入发布序列中的下一阶段(例如,您已完成该阶段的测试),则可以通过完成该阶段来手动推进发布。如果您完成此阶段,GKE 尚未升级的任何集群都不会作为相应发布的一部分进行升级。完成此阶段还会跳过所有剩余的过渡时间。此操作还意味着,您无需在发布序列级别更改浸泡时间。
如需完成发布阶段,请参阅完成发布阶段。
通过更改发布序列来管理发布
您还可以通过执行影响整个发布序列的操作来管理发布。不过,在执行此操作之前,请考虑采取前几部分中所述的操作,例如暂停发布。对发布序列所做的某些更改可能会导致正在进行的发布被取消,还会影响序列中未来发布的运作方式。如果您只想更改一次发布,请使用提供的工具来管理一次发布,而不是更改整个序列。
不过,如果您确实想更改所有发布作业(而不仅仅是某个新版本的发布作业)的发布序列运作方式,请参阅下一部分管理发布序列。
控制各个集群的升级,以管理发布
对于单个集群升级,您可以使用以下工具来管理升级:
- 通过采取诸如取消、恢复、回滚或完成节点池升级等操作,手动控制升级。
- 使用维护窗口和排除项来确定集群何时可以升级以及何时不可以升级。
- 配置节点升级策略,以在速度和风险容忍度之间取得平衡,具体取决于这些节点上运行的工作负载。
如需了解详情,请参阅发布顺序如何与其他升级功能搭配使用。
管理发布序列
如需管理发布序列,您可以执行以下基本操作:
- 列出发布序列
- 描述发布序列
此外,您还可以执行修改发布序列、忽略发布序列中的集群等操作。以下各子部分介绍了这些操作。
如需详细了解如何管理单个版本的发布,而不是整个发布序列,请参阅上一部分管理发布。
忽略发布序列中的集群
默认情况下,发布序列中舰队的任何集群都会作为发布序列的一部分进行升级。您可以将集群添加到特定阶段,也可以将舰队中未添加标签的所有集群一起升级。
不过,如果您有不想纳入发布序列的集群,可以为其添加标签,以便 GKE 在发布新版本时忽略该集群。例如,如果您在升级特定集群之前需要更多时间,则可能需要这样做。您可以忽略发布序列中的一个或多个集群。
如果您忽略发布序列中的某个集群,GKE 在发布新版本时不会考虑该集群,也不会为该集群执行自动升级,但强制性自动升级除外,包括支持服务结束时的自动升级和针对 90 天内未升级的控制平面的自动升级。
如需忽略发布序列中的集群,请参阅忽略发布序列中的集群。
修改发布序列
如果您想更改现有发布序列中的发布方式,可以通过以下两种方式之一修改序列:
- 修改发布序列:编辑您在其中定义序列的 YAML 配置文件。
- 修改序列中的集群。
如果您修改发布序列,会发生以下情况:
- 如果您在发布序列中添加阶段、移除阶段、更改阶段顺序或修改阶段(例如,更改相应阶段的项目 ID 或标签选择器),GKE 会取消所有有效发布。
- 如果您更改阶段的过渡时间,GKE 不会取消正在进行的发布。
如需修改发布顺序,请参阅修改发布顺序。
如果您按顺序修改集群,会发生以下情况:
- 如果您通过从舰队中移除集群来从发布序列中移除集群,则活跃的发布会继续进行。GKE 可以根据未注册序列的集群的典型程序自动升级集群。
- 如果您将集群添加到发布序列中的舰队,GKE 会将该集群作为任何尚未通过您添加该集群的阶段的有效发布的一部分进行升级。不过,如果发布已完成相应阶段,GKE 将不会升级该发布中的集群。
如果您在不修改发布序列配置的情况下将集群移至其他阶段,则会发生以下情况,具体取决于您将集群移至的阶段是否已完成:
- 如果您将集群移至已完成发布的阶段,GKE 不会升级该发布中的集群。
- 如果您将发布序列中已升级的集群移至尚未完成的后续阶段,GKE 会忽略该集群,并且不会中断发布进度。
如需修改序列中的集群,请参阅向舰队注册集群 Google Cloud 。
限制
使用具有自定义阶段的发布序列升级集群时,存在以下限制:
- 您无法使用 Google Cloud 控制台创建或查看包含自定义阶段的发布序列。
- 如果发布序列引用了某个舰队,您必须包含整个舰队。此限制意味着,如果您定义了一个阶段,以仅定位到具有
label-selector的舰队中的一部分集群(例如,用于分阶段部署),则还必须定义一个后续的“兜底”阶段,其中包含同一舰队中的所有剩余集群。此全捕获阶段针对的是同一舰队,但不包含label-selector,因此会自动纳入序列中之前阶段未选择的所有集群。 - 如果您在发布期间修改序列(尤其是会影响参与集群的更改),GKE 会立即取消所有现有的发布。如果您仅修改序列的过渡时间,GKE 不会取消发布。
- 一个阶段最多只能引用一个舰队。单个阶段中不能有多个 Fleet。
- 单个舰队只能在一个发布序列中引用。两个发布序列不能引用同一舰队。
- 您无法使用加速补丁自动升级功能来升级使用发布序列的集群。
- 您可以创建最多包含 15 个阶段的发布序列。
- 一个舰队中最多可以包含 250 个集群。对于具有轻量级成员资格的集群,您可以申请将舰队中的集群数量配额增加到最多 2,000 个。如需了解详情,请参阅配额和限制。
- 您可以为每个序列配置最长 90 天的过渡时间,该时间适用于所有阶段。
已知问题
本部分简要介绍了使用自定义阶段进行发布序列化的已知问题。
- 如果发布序列中的某个阶段不包含任何集群,系统会跳过该阶段,但仍会等待为该阶段定义的过渡时间过去,然后才会继续发布到下一阶段。