跨生产环境管理集群升级


本页面介绍如何使用发布顺序来管理 GKE 集群升级。如需了解详情,请参阅关于采用发布顺序的集群升级

准备工作

在开始之前,请确保您已执行以下任务:

  • 启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 如果您要使用 Google Cloud CLI 执行此任务,请安装初始化 gcloud CLI。

配置发布序列

本文档介绍如何使用舰队舰队范围组织集群并创建发布序列。

通过发布排序,您可以选择版本在同一发布渠道上的多组集群中发布的顺序和时间。您最多可以创建三个范围序列。

如需创建发布序列,您的集群必须整理到范围内。如需了解如何将集群整理到范围内,请参阅此示例。将集群整理到范围后,您可以通过定义上游范围关系和每个范围的过渡时间来创建发布序列。如需详细了解其工作原理,请参阅创建发布序列的方式

将集群整理到范围内

在发布序列中,所有范围内的所有集群都必须在同一发布渠道中注册,并且使用同一次要版本。如果不满足这些要求,并且集群之间存在版本差异,则可能会导致版本发布出现问题。如需了解详情,请参阅发布资格

范围是舰队中的一个组织部门。集群可以注册到托管在其他项目中的舰队和范围。您可以创建范围在多个舰队中的发布序列。

如果您已将集群整理到范围内,则可以跳过以下步骤并继续执行创建发布序列

  1. 对于序列中的每个集群,请向舰队注册集群。集群应注册到您要在其中创建此集群的范围的项目中的舰队。如果要将集群注册到其他宿主项目中的舰队,请确保为跨项目注册设置必要的权限。
  2. 创建 2-3 个范围以组织您的集群。在范围各自的舰队的宿主项目中运行该命令。一个发布序列中最多可以包含三个范围。对要创建的每个范围重复运行该命令。

    如需查看完整的标志列表,请参阅 gcloud alpha container fleet scopes create 的参考文档。借助 create 命令,您可以使用说明中的标志创建发布序列

  3. 将每个集群添加到范围内

创建发布序列

发布序列整理为关联的列表。如需了解详情,请参阅如何创建发布序列。创建发布序列时,您可以为每个范围设置以下属性:

  • 上游范围:上游范围的资源路径,格式为 projects/{project-number}/locations/global/scopes/{scope-name}。您不能为序列中的第一个范围设置上游范围。上游范围限定新版本适用于下游范围。
  • 过渡时间:范围的过渡时间是升级完成(或发布需要 30 天)到下游范围开始升级之间的时间。如需了解详情,请参阅版本资格在发布序列中的工作原理

您可以在创建或更新范围时设置这些属性。以下说明使用 update 命令,但您可以在使用 create 命令创建范围时设置相同的属性。

对于以下每条命令,请将 SOAK_TIME 替换为您要更新的范围的过渡时间。

  1. 设置序列中第一个集群的过渡时间:

    gcloud alpha container fleet scopes update FIRST_SCOPE \
        --default-upgrade-soaking=SOAK_TIME \
        --project=FIRST_SCOPE_PROJECT_ID
    

    FIRST_SCOPE 替换为第一个范围的完整路径,并将 FIRST_SCOPE_PROJECT_ID 替换为托管第一个范围的项目的 ID。

  2. 为序列中的第二个范围设置上游范围和过渡时间:

    gcloud alpha container fleet scopes update SECOND_SCOPE \
        --upstream-scope=projects/FIRST_SCOPE_PROJECT_NUMBER/locations/global/scopes/FIRST_SCOPE \
        --default-upgrade-soaking=SOAK_TIME \
        --project=SECOND_SCOPE_PROJECT_ID
    

    SECOND_SCOPE 替换为第一个范围的完整路径,并将 SECOND_SCOPE_PROJECT_ID 替换为托管第二个范围的项目的 ID。

  3. 可选:如果要在一个发布序列中包含三个范围,请在序列中设置第三个范围的上游范围:

    gcloud alpha container fleet scopes update THIRD_SCOPE \
        --upstream-scope=projects/SECOND_SCOPE_PROJECT/locations/global/scopes/SECOND_SCOPE \
        --default-upgrade-soaking=SOAK_TIME \
        --project=THIRD_SCOPE_PROJECT_ID
    

    THIRD_SCOPE 替换为第一个范围的完整路径,将 THIRD_SCOPE_PROJECT_ID 替换为托管第三个范围的项目的 ID。

验证发布序列

在该序列中描述第一个范围以确认设置。对于每个范围,您可以在描述范围时查看上游范围和下游范围。

控制版本发布流程

使用 GKE 进行集群升级提供了许多机制来手动控制该过程。除了这些控制机制外,您还可以通过发布序列控制集群升级。在本部分中,您将了解如何在需要时对升级进行控制。

检查发布序列的状态

检查发布序列的状态:

gcloud alpha container fleet scopes describe SCOPE_NAME \
    --show-linked-cluster-upgrade
    --project=SCOPE_PROJECT_ID

SCOPE_NAME 替换为发布序列中任何范围的名称,并将 SCOPE_PROJECT_ID 替换为此范围的项目 ID。如果发布序列在不同舰队中具有跨项目范围,则您必须具备所需的权限才能运行此命令。

在输出中,clusterUpgrade(s).specclusterUpgrade(s).state 属性包含有关集群升级的其他信息,例如过渡时间、集群升级替换和升级状态。如需详细了解此命令提供的信息,请参阅检查序列中的版本发布状态

如果您只需要序列中一个范围的相关信息,请将 --show-linked-cluster-upgrade 标志替换为 --show-cluster-upgrade

如需查看完整的标志列表,请参阅 gcloud alpha container fleet scopes describe 的参考文档。

如需查看范围内各个集群的状态,请在范围所在的舰队项目中运行以下命令:

gcloud alpha container fleet features describe clusterupgrade

排查发布资格问题

如果发布序列中的所有集群都没有相同的升级目标,则 GKE 可能无法继续升级集群,因为上游范围内的集群未验证下游范围内集群所需的升级目标。

如需检查您的发布序列是否存在任何发布资格问题,请检查发布序列的状态。如果范围不符合条件,请按照说明查看范围内各个集群的状态。

如果集群由于版本较低而不符合条件(例如,范围内的大多数集群从 1.23 升级到 1.24,而集群使用 1.22 版),则您可以将集群手动升级到 1.24,以解决版本差异问题。

如果集群由于版本较高而不符合条件(例如,范围内的大多数集群从 1.23 升级到 1.24,而集群使用 1.25 版),则您无法手动升级集群以解决版本差异问题。

如需立即推进集群升级,请按照推进部分符合条件的发布的说明,移除状态为 INELIGIBLE 的任何集群。

更改过渡时间

如果您希望特定版本的发布过渡时间与序列的配置过渡时间不同,则可以通过在以下命令中使用 --add-upgrade-soaking-override 标志来更改此过渡时间:

gcloud alpha container fleet scopes update SCOPE_NAME \
    --add-upgrade-soaking-override=SOAK_TIME \
    --upgrade-selector=name=UPGRADE_NAME,version=VERSION

请替换以下内容:

  • SCOPE_NAME:要为其替换特定版本发布所用过渡时间的范围的名称。
  • SOAK_TIME:除默认值以外的过渡时间(例如,如果要跳过一次版本发布的过渡时间,则为“0d”)。
  • UPGRADE_NAME:升级的名称,可以是 k8s_control_planek8s_node
  • VERSION:在发布到此范围后您需要过渡时间的 GKE 版本,例如 1.25.2-gke.400。

例如,如果您已限定新版本并准备好在下一个范围内开始升级,则可以将过渡时间设置为零。如果您需要比默认过渡时间更长的时间来限定特定版本,也可以使用它。

更改序列的顺序

如果要更改序列的顺序,请使用创建发布序列说明中的命令来更新上游范围。

延迟完成范围版本发布

如果您需要暂时阻止某个范围完成到其集群的新版本发布,则可以向任何尚未升级到目标版本的集群添加维护排除项。这可能会使范围暂停进入其过渡时间或下游范围,最长可达 30 天。30 天后,范围将开始过渡。

您还可以将该范围的过渡时间更改为 30 天,以最大程度延长发布序列等待的时间,然后再进入下一个范围。

如果您需要为下一个范围进一步延迟升级,可以为下一个范围内的集群使用维护排除项。

推进部分符合条件的发布

如果范围内的集群升级尚未达到 30 天的限制,并且由于发布资格问题(例如,范围内的版本差异)而无法完成,您可以从范围中移除集群以完成版本发布并开始过渡时间,或进入发布序列中的下一个范围。您还可以出于其他原因将集群从范围中移除,例如此集群的使用情况与范围内的其他集群无关。

按照说明从范围中移除集群

一旦您移除了所有阻止范围的版本发布完成的集群,范围的版本发布就会完成。请按照说明检查版本发布的状态来确认这一点。

删除序列

如要删除序列,请使用以下命令移除第二个范围(如果此发布序列包含三个范围,则还需要移除第三个范围)的上游范围关联:

gcloud alpha container fleet scopes update SCOPE_NAME --reset-upstream-scope

SCOPE_NAME 替换为您要删除的范围的名称。

清理

为了防止产生意外的结算费用,如果您已注册免费试用 Anthos API 以测试发布顺序功能,请务必先在非公开预览版中完成此功能的测试后再停用该 API。您必须先停用 API,然后才能将舰队宿主项目从此功能的许可名单中移除。

后续步骤