本页面介绍如何使用发布顺序来管理 GKE 集群升级。如需了解详情,请参阅使用发布顺序的集群升级简介。
准备工作
在开始之前,请确保您已执行以下任务:
- 启用 Google Kubernetes Engine API。 启用 Google Kubernetes Engine API
- 如果您要使用 Google Cloud CLI 执行此任务,请安装并初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行
gcloud components update
以获取最新版本。
- 确保您已启用舰队所需的 API。您必须在舰队宿主项目中启用这些 API,才能创建任何类型的发布序列。
- 如果您要创建基于团队的发布序列(预览版),请确保已在舰队宿主项目中启用 GKE Enterprise。
- 对于 Terraform 说明,请确保您使用
google
提供程序 5.13.0 版或更高版本。
所需的角色
- 确保您拥有集群注册必需的 IAM 权限。您必须授予以下权限:
配置发布顺序
本文档介绍了如何使用按舰队或团队范围整理的集群组来创建发布序列。本文档使用“组”一词来指代舰队和团队范围,因为您可以使用任一分组方法创建发布序列。
您可以创建最多包含五组集群的序列(基于团队的序列最多包含三组集群),并且可以选择在一个组中完成集群升级后您所需的过渡测试时长(最多 30 天)。您可以同时包含 Autopilot 和 Standard 集群。
如需创建发布序列,集群必须整理到舰队或团队范围组中。如需了解如何整理集群,请参阅社区银行示例。集群整理到组中后,您可以通过定义上游组关系和每个组的过渡时间来创建发布序列。 在发布序列中,上游是指上一个组,下游是指下一个组。
将集群整理到组中
在发布序列中,所有组内的所有集群都必须在同一发布渠道中注册,并且使用同一次要版本。如果不满足这些要求,并且集群之间存在版本差异,则可能会导致版本发布出现问题。如需了解详情,请参阅发布资格。
您可以在舰队之间创建发布序列,也可以在团队的团队范围之间创建发布序列(预览版)。
如关于使用发布序列的集群升级中所述,团队范围是一种企业舰队级结构,用于将舰队集群的子集与特定应用团队相关联。您必须启用 GKE Enterprise 才能使用团队范围。使用或创建发布序列的团队范围时,存在以下限制:
基于团队的序列需要单租户集群:换句话说,每个集群仅与单个团队关联。发布序列不支持共享集群(在常规舰队团队管理中受支持)。
每个团队范围必须位于不同的舰队中,才能在它们之间创建发布序列。不支持在同一舰队内的不同团队范围之间创建发布序列。
如果您已将集群整理到组中,则可以跳过以下步骤并继续执行创建发布序列。
舰队
如需创建基于舰队的发布序列,您必须先将集群分组到舰队中。您可以按部署环境(例如测试、预演和生产)整理集群,如基于舰队的发布序列示例所示。
根据您选择的分组向舰队注册每个集群。
团队
如需创建基于团队的发布序列,您必须将集群分组到团队范围中。为此,先按部署环境(例如测试、预演和生产)将集群整理到舰队中,如基于范围的发布序列示例所示。然后,您可以进一步将集群细分为不同团队集群的范围。
- 对于顺序中的每个集群,请向舰队注册集群。集群应注册到您要在其中为此集群创建团队范围的项目中的舰队。如果要将集群注册到其他宿主项目中的舰队,请确保为跨项目注册设置必要的权限。
创建 2-3 个团队范围以组织您的集群。在团队各自的舰队的宿主项目中创建每个范围。一个发布序列中最多可以包含三个团队范围。
如需查看完整的标志列表,请参阅
gcloud container fleet scopes create
的参考文档。使用create
命令时,您可以使用创建发布序列说明中的标志。
创建发布序列
发布序列整理为最多包含五个元素的关联列表。
创建发布序列时,您可以为每组集群(舰队或团队范围)设置以下属性:
- 上游组:上游舰队或团队范围,用于限定下游组的新版本。您不能为序列中的第一个组设置上游组。
- 过渡时间:组的过渡时间是升级完成(或发布已进行 30 天)与下游组开始升级之间的时间。如需了解详情,请参阅版本资格在发布顺序中的工作原理。
舰队 - gcloud
以下说明使用 gcloud container fleet clusterupgrade update
命令,但您可以使用 gcloud container fleet clusterupgrade create
命令设置相同的属性。
对于以下每个命令,请将 SOAK_TIME
替换为您要更新的舰队的过渡时间。
创建发布序列:
为序列中的第一个舰队设置过渡时间:
gcloud container fleet clusterupgrade update \ --default-upgrade-soaking=SOAK_TIME \ --project=FIRST_FLEET_PROJECT_ID
将
FIRST_FLEET_PROJECT_ID
替换为舰队宿主项目的 ID。为序列中第二个舰队设置上游舰队和过渡时间:
gcloud container fleet clusterupgrade update \ --upstream-fleet=FIRST_FLEET_PROJECT_ID \ --default-upgrade-soaking=SOAK_TIME \ --project=SECOND_FLEET_PROJECT_ID
将
FIRST_FLEET_PROJECT_ID
替换为第一个舰队的宿主项目的 ID,并将SECOND_FLEET_PROJECT_ID
替换为舰队宿主项目的 ID。可选:如果您要在发布序列中包含两个以上的舰队,请为序列中的后续舰队设置上游舰队。
以下命令会为序列中的第三个舰队设置上游舰队。如果您想添加第四个或第五个舰队,请重复此步骤,并按照相同的模式将变量替换为相应舰队宿主项目(上一个舰队和下一个舰队)的项目 ID。
为序列中的下一个舰队设置上游舰队:
gcloud container fleet clusterupgrade update \ --upstream-fleet=SECOND_FLEET_PROJECT_ID \ --default-upgrade-soaking=SOAK_TIME \ --project=THIRD_FLEET_PROJECT_ID
将
SECOND_FLEET_PROJECT_ID
替换为第二个舰队的宿主项目的 ID,并将THIRD_FLEET_PROJECT_ID
替换为舰队宿主项目的 ID。
舰队 - 控制台
前往 Google Cloud 控制台中的发布序列页面。
点击创建发布序列。
在创建发布序列窗格中,选择序列中的前两个舰队:
- 在舰队 1 部分中,选择序列中的第一个舰队。
- 在上游舰队的过渡时间部分中,使用天、小时和分钟字段为第一个舰队设置过渡时间。
- 在舰队 2 部分中,选择序列中的第二个舰队。
- 点击创建。
可选:如果您要在发布序列中包含三个或更多舰队,请执行以下额外步骤:
- 在发布图中,点击第二个舰队的元素。
- 点击 添加下游舰队。
- 在上游舰队的过渡时间部分中,使用天、小时和分钟字段为第二个舰队设置过渡时间。
- 在序列中的下一个舰队部分中,选择序列中的第三个舰队。
- 点击保存。
- 如果您要添加第四个或第五个舰队,请重复上述步骤。
舰队 - Terraform
本部分介绍了如何使用 Terraform 创建基于舰队的序列。您还可以使用此资源来更新该序列。如需了解详情,请参阅 google_gke_hub_feature
的参考文档。
对于以下每个命令,请将 SOAK_TIME
替换为您要更新的舰队的过渡时间。
创建发布序列:
将以下块添加到 Terraform 配置中,以便为序列中的第一个舰队设置过渡时间:
resource "google_gke_hub_feature" "feature" { name = "clusterupgrade" location = "global" spec { clusterupgrade { upstream_fleets = [] post_conditions { soaking = "SOAK_TIME" } } } project = "FIRST_FLEET_PROJECT_ID" }
将
FIRST_FLEET_PROJECT_ID
替换为舰队宿主项目的 ID。将以下块添加到 Terraform 配置中,以便为序列中的第二个舰队设置上游舰队和过渡时间:
resource "google_gke_hub_feature" "feature" { name = "clusterupgrade" location = "global" spec { clusterupgrade { upstream_fleets = ["FIRST_FLEET_PROJECT_ID"] post_conditions { soaking = "SOAK_TIME" } } } project = "SECOND_FLEET_PROJECT_ID" }
将
FIRST_FLEET_PROJECT_ID
替换为第一个舰队的宿主项目的 ID,并将SECOND_FLEET_PROJECT_ID
替换为舰队宿主项目的 ID。可选:如果您希望发布序列中有三个舰队,请将以下块添加到 Terraform 配置中,以便为序列中的舰队设置上游舰队:
resource "google_gke_hub_feature" "feature" { name = "clusterupgrade" location = "global" spec { clusterupgrade { upstream_fleets = ["SECOND_FLEET_PROJECT_ID"] post_conditions { soaking = "SOAK_TIME" } } } project = "THIRD_FLEET_PROJECT_ID" }
将
SECOND_FLEET_PROJECT_ID
替换为第二个舰队的宿主项目的 ID,并将THIRD_FLEET_PROJECT_ID
替换为舰队宿主项目的 ID。如果您要添加第四个或第五个舰队,请重复此步骤。
团队 - gcloud
您可以在创建或更新团队范围时设置这些属性。以下说明使用 gcloud container fleet scopes update
命令,但您可以在使用 gcloud container fleet scopes create
命令创建团队范围时设置相同的属性。
对于这些命令中的每条命令,请替换以下内容:
- 将变量替换为相应团队范围的名称或该团队范围的舰队宿主项目 ID。
- 将
SOAK_TIME
替换为您要更新的团队范围的过渡时间。
创建发布序列:
为序列中的第一个范围设置过渡时间:
gcloud container fleet scopes update projects/FIRST_SCOPE_PROJECT_ID/locations/global/scopes/FIRST_SCOPE_NAME \ --default-upgrade-soaking=SOAK_TIME \ --project=FIRST_SCOPE_PROJECT_ID
为顺序中的第二个范围设置上游范围和过渡时间:
gcloud container fleet scopes update projects/SECOND_SCOPE_PROJECT_ID/locations/global/scopes/SECOND_SCOPE_NAME \ --upstream-scope=projects/FIRST_SCOPE_PROJECT_ID/locations/global/scopes/FIRST_SCOPE_NAME \ --default-upgrade-soaking=SOAK_TIME \ --project=SECOND_SCOPE_PROJECT_ID
可选:如果要在一个发布序列中包含三个团队范围,请在序列中设置第三个范围的上游范围:
gcloud container fleet scopes update projects/THIRD_SCOPE_PROJECT_ID/locations/global/scopes/THIRD_SCOPE_NAME \ --upstream-scope=projects/SECOND_SCOPE_PROJECT/locations/global/scopes/SECOND_SCOPE_NAME \ --default-upgrade-soaking=SOAK_TIME \ --project=THIRD_SCOPE_PROJECT_ID
检查发布顺序的状态
您可以使用以下任一方法检查发布序列的状态:
- 在 Google Cloud 控制台中监控直观呈现的发布序列(预览版,仅限基于舰队的发布序列)。
- 使用 gcloud CLI 或 GKE Hub API 检查发布序列的状态。
在 Google Cloud 控制台中监控发布序列
如何使用控制台监控发布序列
在此页面上,您可以查看与项目舰队关联的发布序列。您可以执行以下操作来查看发布序列的进度:
- 查看整个发布序列,或查看各个舰队和这些舰队中集群的状态以及舰队之间的过渡时间。此外,如果您想检查序列的配置,则可以查看当前没有进行升级的序列。
- 按升级类型(控制平面或节点升级)和特定版本(例如 1.31.6-gke.500)进行过滤。
当 GKE 升级序列中的所有集群时,您可以直观地监控整个发布序列,并在升级生产环境集群之前,先在各个环境中评估新版本是否符合条件。在监控期间,您可以使用 gcloud CLI 管理发布序列,并根据需要进行更改。
切换到其他发布序列
如果 Google Cloud 控制台中的活跃项目是已注册到发布序列的舰队的舰队宿主项目,则此页面会显示基于舰队的发布序列。
如果您想查看其他发布序列,请从页面顶部的项目选择器中选择与其他发布序列关联的舰队宿主项目。
使用 gcloud CLI
使用以下部分中的命令可以检查升级在发布序列中的进度。如需详细了解所提供的详细信息,请参阅发布序列的状态信息
如需运行这些命令,请确保您拥有每个舰队宿主项目的所需权限。例如,如果序列在不同舰队中具有跨项目范围,则您需要拥有每个项目的权限来描述序列。
对于以下命令,如果您只需要序列中的一个舰队或范围的相关信息,请将 --show-linked-cluster-upgrade
标志替换为 --show-cluster-upgrade
。
舰队
检查基于舰队的发布序列的状态:
gcloud container fleet clusterupgrade describe \
--show-linked-cluster-upgrade --project=FLEET_PROJECT_ID
将 FLEET_PROJECT_ID
替换为序列中任何舰队的宿主项目的 ID。
如需查看完整的标志列表,请参阅 gcloud container fleet clusterupgrade
describe
的参考文档。
团队
检查基于团队的发布序列的状态:
gcloud container fleet scopes describe SCOPE_NAME \
--show-linked-cluster-upgrade
--project=SCOPE_PROJECT_ID
将 SCOPE_NAME
替换为发布序列中的任何团队范围的名称,并将 SCOPE_PROJECT_ID
替换为此团队范围的项目 ID。
如需查看完整的标志列表,请参阅 gcloud container fleet scopes
describe
的参考文档。
如需查看舰队或团队范围内各个集群的状态,请在舰队宿主项目中运行以下命令,并查看 membershipStates
部分:
gcloud container fleet features describe clusterupgrade
发布序列的状态信息
在检查版本发布状态时,您可以查看每个组以及该组中集群的进度。
请参阅下表,了解集群或组的潜在状态:
状态 | 对于单个集群 | 对于群组(舰队或团队范围) |
---|---|---|
不符合条件 | 此集群不符合从升级的条件 | 此组内的一个或多个集群不符合此升级的条件。 |
PENDING | 集群或其部分 Standard 节点池或 Autopilot 集群中的一组节点正在等待升级。 | 尚未对组内的任何集群开始进行升级。 |
IN_PROGRESS | 集群正在升级。 | 至少已在一个集群上开始升级,但尚未在所有集群上完成。 |
过渡 | 集群已完成升级,但尚未完成过渡。 | 升级已在所有集群上完成,但尚未完成过渡。 |
FORCED_SOAKING | 升级所用时间超过了最长升级时间(30 天),因此我们强制其进入过渡阶段。升级仍可在集群中继续执行。 | 升级所用时间超过了最长升级时间(30 天),因此我们强制其进入过渡阶段。升级仍可在集群中继续执行。 |
完成 | 升级被视为“完成”,这意味着升级已完成此集群的过渡。 | 升级被视为“完成”并可供下游组使用,这意味着升级已完成过渡。 |
在这些命令的输出中,clusterUpgrade(s).spec
和 clusterUpgrade(s).state
属性包含有关集群升级的其他信息,例如过渡时间、集群升级替换和升级状态。
管理发布序列
您可以采用多种方式通过发布序列控制自动集群升级,如以下部分所述。
更改组的过渡时间
您可以更改组的默认过渡时间,也可以更改该组升级到特定版本时的过渡时间。 最长为 30 天。
更新默认的过渡时间
您可以在 Google Cloud 控制台中(预览版,仅限基于舰队的发布序列)或使用 gcloud CLI 更新默认过渡时间。
gcloud
如需更改组的默认过渡时间,请使用创建发布序列说明中的 gcloud CLI 命令,并省略用于设置上游群组的标志。
舰队 - 控制台
替换默认的过渡时间
您可以更改特定版本发布的过渡时间,使其与组的默认过渡时间不同。例如,如果您已限定新版本并准备好在下一个组内开始升级,则可以将过渡时间设置为零。如果您需要比默认过渡时间更长的时间来限定特定版本,也可以使用此设置。
由于过渡时间是按组设置的,因此如果您要替换序列中其他组的过渡时间,请使用同一命令更新这些组并替换舰队或范围名称,具体取决于序列的类型。
对于此部分中的说明,请替换以下变量:
SOAK_TIME
:除默认值以外的过渡时间(例如,如果要跳过一次版本发布的过渡时间,则为“0d”)。UPGRADE_NAME
:升级类型,即k8s_control_plane
(表示控制平面升级)或k8s_node
(表示节点升级)。VERSION
:发布到此群组后您想要替换默认过渡时间的 GKE 版本(例如 1.25.2-gke.400)。
舰队 - gcloud
在您要替换特定版本发布所用过渡时间的舰队宿主项目中运行以下命令。
更改舰队的过渡时间:
gcloud container fleet clusterupgrade update
--add-upgrade-soaking-override=SOAK_TIME \
--upgrade-selector=name=UPGRADE_NAME,version=VERSION
舰队 - Terraform
将以下 gke_upgrades_overrides
块添加到 clusterupgrade
块内的 Terraform 配置中,以替换用于特定版本的版本发布的过渡时间:
gke_upgrade_overrides {
upgrade {
name = "UPGRADE_NAME"
version = "VERSION"
}
post_conditions {
soaking = "SOAK_TIME"
}
}
团队 - gcloud
在团队范围舰队的宿主项目中运行以下命令。将 SCOPE_NAME
替换为在您要替换特定版本发布所用过渡时间的团队范围的名称。
更改团队范围的过渡时间:
gcloud container fleet scopes update SCOPE_NAME \
--add-upgrade-soaking-override=SOAK_TIME \
--upgrade-selector=name=UPGRADE_NAME,version=VERSION
在发布序列中更新群组
您可以更新现有发布序列,以在序列中添加、移除群组或更改群组顺序。如需进行这些更改,请更新各个群组之间的关联。
您可以在 Google Cloud 控制台中(预览版,仅限基于舰队的发布序列)或使用 gcloud CLI 执行这些步骤。
舰队 - gcloud
使用带有 --upstream-fleet
标志的 gcloud container fleet clusterupgrade update
命令可添加或更改上游舰队。使用 --reset-upstream-fleet
标志可移除上游舰队。
您可以执行各种操作,例如:
- 通过向序列中的第一个舰队添加上游舰队,将另一个舰队添加到发布序列的开头。
- 通过更改上游舰队关联,更改发布序列中的舰队顺序。
- 通过移除第二个舰队的上游舰队,移除发布序列中的第一个舰队。
舰队 - 控制台
前往 Google Cloud 控制台中的发布序列页面。
在发布图中,点击序列中现有舰队的元素。点击这些元素后,您可以执行以下某些操作来进行更改:
- 点击 添加下游舰队。
- 点击 添加上游舰队。
- 点击 移除舰队。
您可以执行各种操作,例如:
- 通过向序列中的最后一个舰队添加下游舰队,将另一个舰队添加到发布序列的末尾。
- 通过向序列中的第一个舰队添加上游舰队,将另一个舰队添加到发布序列的开头。
- 通过移除舰队,然后重新添加具有不同上游或下游舰队的舰队,来更改发布序列中的舰队顺序。
- 移除发布序列中的第一个舰队。
- 移除发布序列中的最后一个舰队。
- 在移除发布序列中的第一个或最后一个舰队后,移除发布序列中的中间舰队。
团队 - gcloud
使用带有 --upstream-scope
标志的 gcloud container fleet scopes update
命令可添加或更改上游团队范围。使用 --reset-upstream-scope
标志可移除上游团队范围。
您可以执行各种操作,例如:
- 通过向序列中的第一个团队范围添加上游团队范围,将另一个团队范围添加到发布序列的开头。
- 通过更改上游团队范围关联,更改发布序列中的团队范围顺序。
- 通过移除第二个团队范围的上游团队范围,移除发布序列中的第一个团队范围。
延迟完成组的版本发布
如果您需要暂时阻止某个组完成到其集群的新版本发布,则可以向任何尚未升级到目标版本的集群添加维护排除项。这可能会使组暂停进入其过渡时间或下游组,最长可达 30 天。30 天后,组将开始过渡。
您还可以将该组的过渡时间更改为 30 天,以最大程度延长发布序列在进入下一个组之前等待的时间。
如果您需要为下一个组进一步延迟升级开始,则可以为下一个组内的集群使用维护排除项。
在基于舰队和基于团队的发布序列之间切换
您可以从基于舰队的序列切换到基于团队的序列,也可以从基于团队的序列切换到基于舰队的序列。说明假定您在按示例图中所示组织的序列之间进行转换。
舰队到团队
如需将集群从基于舰队的发布序列更改为基于团队的发布序列,请执行以下步骤:
- 为每个舰队中的所有集群配置维护排除项,以防止在修改配置时进行任何升级。
- 确保您已在舰队宿主项目中启用 GKE Enterprise。
- 在每个舰队中,创建一个或多个团队范围以细分该舰队中的集群组。
- 在每个舰队中的匹配团队范围之间创建一个或多个发布序列。
- 将您的集群添加到他们的新团队范围中。
- 移除为此更改配置的维护排除项。
团队到舰队
如需将集群从基于团队的发布序列更改为基于舰队的发布序列,请执行以下步骤:
- 为每个舰队中的所有集群配置维护排除项,以防止在修改配置时进行任何升级。
- 在舰队之间创建发布序列。
- 从团队范围中移除您的集群。现在,这些集群只会注册到其范围各自的舰队,而您在上一步中将它们加入了发布序列。
- 删除团队范围。
- 移除为此更改配置的维护排除项。
删除顺序
如需删除序列,您需要移除所有群组(第一个群组除外)的上游关联。第一个群组没有上游群组。
您可以在 Google Cloud 控制台中(预览版,仅限基于舰队的发布序列)或使用 gcloud CLI 执行这些步骤。
舰队 - gcloud
在发布序列中的每个舰队(不包括第一个舰队)的舰队宿主项目中运行以下命令:
gcloud container fleet clusterupgrade update --reset-upstream-fleet
舰队 - 控制台
团队 - gcloud
在发布序列的第二个和第三个团队范围的舰队宿主项目中运行以下命令:
gcloud container fleet scopes update SCOPE_NAME --reset-upstream-scope
将 SCOPE_NAME
分别替换为第二个和第三个范围的名称。
问题排查
排查发布资格问题
如果发布序列中的所有集群都没有相同的升级目标,则 GKE 可能无法继续升级集群。如果上游组不符合将一个升级目标传递到下游组的条件,则自动升级无法继续。如果上游群组中的集群为下游群组中的集群限定了无效的升级目标,则自动升级也无法继续进行。
如需检查您的发布顺序是否存在任何发布资格问题,请检查发布顺序的状态。如果组不符合条件,请按照说明查看组中各个集群的状态。
如需立即推进集群升级,请按照推进部分符合条件的发布的说明,移除状态为 INELIGIBLE
的任何集群。
解决组中的资格问题
在组中,如果集群由于版本较低而不符合条件(例如,组内的大多数集群从 1.23 升级到 1.24,而集群使用 1.22 版),则您可以将集群手动升级到 1.24,以解决版本差异问题。
在群组中,GKE 会忽略版本高于自动升级目标版本的集群。这些集群不会阻止升级继续进行到下游组。
解决组之间的资格问题
在组之间,如果升级目标中存在下游组使用较新版本的不匹配问题(例如,上游组从 1.23 升级到 1.24,而下游组中的集群使用 1.25),您可以手动将上游组中的集群升级到 1.25 以确保升级继续进行。
在组之间,如果升级目标中存在下游组使用较早版本的不匹配问题(例如,上游组从 1.24 升级到 1.25,而下游组中的集群使用 1.23),您可以手动将下游组中的集群升级到 1.24 或 1.25 以确保升级继续进行。 如果 GKE 将上游群组升级到下游群组符合条件的任何版本,则 GKE 会将下游群组中的集群升级到该升级目标。在这种情况下,您无需手动升级集群即可解除序列的阻塞状态。如需了解详情,请参阅上游群组为下游群组确定了多个升级目标。
推进部分符合条件的发布
如果组中的集群升级由于发布资格问题(例如,组内的版本差异)而无法完成,则可以从组中移除不符合该组升级目标条件的集群,以完成版本发布并开始过渡时间或进入发布序列中的下一个组。您还可以出于其他原因从组中移除集群,例如,如果此集群的使用情况与组内的其他集群不再相关。
按照从舰队中取消注册集群或从团队范围中移除集群的说明操作,具体取决于发布序列的类型。
移除所有阻止组的版本发布完成的集群后,该组的版本发布将完成。请按照说明检查版本发布的状态来确认这一点。