回滚、逐步发布和流量迁移

Cloud Run 允许您指定应该接收流量的修订版本,并指定修订版本所收到的流量百分比。借助此功能,您可以回滚到之前的修订版本,逐步发布修订版本,以及将流量拆分到多个修订版本。本页介绍如何使用此功能管理发送到 Cloud Run 修订版本的流量。

回滚到先前的修订版本

要回滚到先前的修订版本,请执行以下操作:

控制台

  1. 转到 Cloud Run

  2. 在服务列表中找到服务,然后点击该服务。

  3. 点击“修订版本”标签页,以显示该服务的当前修订版本列表。

  4. 在修订版本列表中,点击要回滚的修订版本右侧的省略号图标:

    管理流量

  5. 点击管理流量以显示管理流量表单:

    1. 在下拉列表中选择要回滚到的上一个修订版本。
    2. 将上一个修订版本的流量百分比设置为 100。
    3. 将当前提供的修订版本的百分比设置为 0。
    4. 点击保存

命令行

使用以下命令:

gcloud run services update-traffic SERVICE --to-revisions REVISION=100

  • SERVICE 替换为相应服务的名称。
  • REVISION 替换为要回滚到的修订版本的名称。

YAML

您可以使用 gcloud run services describe --format export 命令下载并查看现有服务配置,该命令会生成清理后的 YAML 格式的结果。然后,您可以使用 gcloud beta run services replace 命令修改下述字段并上传修改后的 YAML。请务必仅修改记录的字段。

  1. 如需查看和下载配置,请运行以下命令:

    gcloud run services describe SERVICE --format export > service.yaml
  2. spec 特性下,找到 traffic 特性并将其更新为以下内容:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - revisionName: REVISION
        percent: 100
    

    替换

    • REVISION 替换为要回滚到的修订版本的名称。
  3. 使用以下命令将服务替换为其新配置:

    gcloud beta run services replace service.yaml
  4. 等待更新完成:您应该会看到一条消息,说明回滚的源修订版本已部署,并且正在处理 0% 的流量。

逐步发布修订版本

要逐步发布新的修订版本,请按下述步骤操作:

控制台

  1. 转到 Cloud Run

  2. 在服务列表中找到服务,然后点击该服务。

  3. 点击部署新的修订版本

  4. 根据需要填写部署表单,但请务必取消选中“立即提供此修订版本”复选框。

  5. 点击部署

  6. 点击管理流量

  7. 系统会列出新修订版本,但百分比设置为 0:它当前未处理任何流量。在此表单中执行以下操作:

    1. 将其设置为所需的百分比,例如 5。请注意,当前提供版本的百分比会自动减少相同的数量。
    2. 点击保存
    3. 重复执行这些“管理流量”步骤,但采用更改后的百分比,并根据需要提高新修订版本的百分比。您无需重新部署即可更改流量百分比。

命令行

  1. 部署要逐步发布的修订版本,最初将其设置为不接收流量:

    gcloud run deploy --image IMAGE --no-traffic

    IMAGE 替换为您正在部署的映像。

  2. 指定您希望新修订版本处理的流量百分比,例如 5%:

    gcloud run services update-traffic SERVICE --to-revisions REVISION=PERCENTAGE
    • SERVICE 替换为相应服务的名称。
    • REVISION 替换为您正在逐步发布的修订版本的名称。要指定最新修订版本,您可以使用 LATEST,例如 LATEST=5
    • PERCENTAGE 替换为您要发送到新修订版本的流量百分比,例如使用 5 可为其发送 5% 的流量。
  3. 对修订版本的表现感到满意后,重复执行上面的 update-traffic 步骤,但根据需要提高百分比值。

YAML

您可以使用 gcloud run services describe --format export 命令下载并查看现有服务配置,该命令会生成清理后的 YAML 格式的结果。然后,您可以使用 gcloud beta run services replace 命令修改下述字段并上传修改后的 YAML。请务必仅修改记录的字段。

  1. 如需查看和下载配置,请运行以下命令:

    gcloud run services describe SERVICE --format export > service.yaml
  2. 按照各种配置页面中的说明,对服务进行所需的任何配置更改,并为新的修订版本指定修订版本名称:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    template:
      metadata:
        annotations:
          ...
        name: REVISION-NAME
     ```
    
    Replace
    
    • REVISION-NAME 替换为新修订版本的名称。
  3. spec 特性下,找到并更新 traffic 特性,以使新修订版本仅处理少量流量:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - revisionName: REVISION-NEW
        percent: PERCENT-NEW
      - revisionName: REVISION-FORMER
        percent: PERCENT-FORMER
    

    请注意,百分比的总和必须为 100%。替换

    • REVISION-NEW 替换为逐步发布的修订版本的名称。
    • REVISION-FORMER 替换为当前处理流量的修订版本的名称。
    • PERCENT-NEW 替换为您要发送到新修订版本的流量百分比,例如,使用 10 将 10% 的流量发送到该修订版本。
    • PERCENT-FORMER 替换为您要发送到旧修订版本的流量百分比。
  4. 等待更新完成:您应该会看到一条消息,说明正在逐步发布的新修订版本已部署并且正在处理您使用的百分比值的流量。

在多个修订版本之间拆分流量

要在两个或更多个修订版本之间拆分流量,请执行以下操作:

控制台

  1. 转到 Cloud Run

  2. 在服务列表中找到服务,然后点击该服务。

  3. 点击管理流量

  4. 系统会列出当前提供的新修订版本。在此表单中执行以下操作:

    1. 将当前提供的修订版本的百分比设置为所需的拆分比例。
    2. 使用下拉列表选择之前的某个修订版本,并将其设置为所需的拆分比例。
    3. 要在多个修订版本之间拆分流量,请点击添加修订版本,选择所需的修订版本,然后将百分比设置为所需的拆分比例。
    4. 点击保存

命令行

以英文逗号分隔列表的形式指定修订版本和每个修订版本的流量百分比:

gcloud run services update-traffic SERVICE --to-revisions LIST

  • SERVICE 替换为相应服务的名称。
  • LIST 替换为以英文逗号分隔的修订版本和百分比列表:
    REVISION1=PERCENTAGE1,REVISION2=PERCENTAGE2,REVISIONn=PERCENTAGEx
    例如,hello2-00005-red=25,hello2-00001-bod=25,hello2-00002-nan=50

YAML

您可以使用 gcloud run services describe --format export 命令下载并查看现有服务配置,该命令会生成清理后的 YAML 格式的结果。然后,您可以使用 gcloud beta run services replace 命令修改下述字段并上传修改后的 YAML。请务必仅修改记录的字段。

  1. 如需查看和下载配置,请运行以下命令:

    gcloud run services describe SERVICE --format export > service.yaml
  2. spec 特性下,找到并更新 traffic 特性,以使新修订版本仅处理少量流量:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - revisionName: REVISION-A
        percent: PERCENT-A
      - revisionName: REVISION-B
        percent: PERCENT-B
      - revisionName: REVISION-C
        percent: PERCENT-C
    

    请注意,百分比的总和必须为 100%。替换

    • REVISION-AREVISION-BREVISION-C 替换为您正在向其分配流量的修订版本。
    • PERCENT-APERCENT-BPERCENT-C 替换为相应修订版本的百分比。
  3. 使用以下命令将服务替换为其新配置:

    gcloud beta run services replace service.yaml
  4. 等待更新完成:您应该会看到一条消息,说明正在逐步发布的新修订版本已部署并且正在处理 5%(或您使用的任何逐步值)的流量。

将所有流量发送到最新修订版本

部署新修订版本时,您可以让此修订版本及所有今后的修订版本尽快处理所有流量,并替换任何已设定的流量拆分:

控制台

  1. 转到 Cloud Run

  2. 在服务列表中找到服务,然后点击该服务。

  3. 点击部署新的修订版本

  4. 根据需要填写部署表单,并确保已选中“立即提供此修订版本”复选框。这将会替换任何现有的流量拆分,并且新修订版本会处理全部流量。

  5. 点击部署

命令行

如需将所有流量发送到最近部署的修订版本,请使用以下命令:

gcloud run services update-traffic SERVICE --to-latest

SERVICE 替换为相应服务的名称。

YAML

您可以使用 gcloud run services describe --format export 命令下载并查看现有服务配置,该命令会生成清理后的 YAML 格式的结果。然后,您可以使用 gcloud beta run services replace 命令修改下述字段并上传修改后的 YAML。请务必仅修改记录的字段。

  1. 如需查看和下载配置,请运行以下命令:

    gcloud run services describe SERVICE --format export > service.yaml
  2. spec 特性下,找到 traffic 特性并将其更新为以下内容

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - latestRevision: true
        percent: 100
    
  3. 使用以下命令将服务替换为其新配置:

    gcloud beta run services replace service.yaml
  4. 等待更新完成:您应该会看到一条消息,说明(最新)修订版本已部署,并且正在处理 100% 的流量。

使用标记进行测试、流量迁移和回滚

部署服务后,您可以创建新修订版本并分配标记,以便访问特定网址处的修订版本,而无需处理流量。然后,您可以使用该标记逐步将流量迁移到标记的修订版本,以及回滚标记的修订版本。

此功能的一个常见使用场景是在此功能处理任何流量之前,先使用此功能按下列典型顺序测试和检查新的服务修订版本:

  1. 在开发期间针对容器运行集成测试。
  2. 将容器部署到您仅用于暂存、不处理任何流量的 Google Cloud 项目,并针对标记的修订版本进行测试。
  3. 将容器部署到生产环境(不处理流量),并在生产环境中针对标记的修订版本进行测试。
  4. 将流量迁移到标记的修订版本。

部署新的标记修订版本

如需将现有服务的新修订版本部署到生产环境,请执行以下命令:

gcloud run deploy myservice --image IMAGE_URL  --no-traffic --tag TAG_NAME

替换

  • IMAGE_URL 替换为映像的网址
  • TAG_NAME 替换为小写标记名称

该标记允许您直接测试特定网址处的新修订版本,而无需处理流量。网址以您提供的标记名称开头:例如,如果您在服务 myservice 中使用标记名称 green,则应测试网址 https://green---myservice-abcdef.a.run.app 处的标记修订版本

将流量迁移到标记的修订版本

确认新修订版本正常运行后,您可以使用 Cloud Console、gcloud 命令行或 YAML 文件开始将流量迁移到该修订版本:

控制台

  1. 转到 Cloud Run

  2. 在服务列表中找到服务,然后点击该服务:

  3. 选择标记的修订版本作为流量的发送目标:

    管理流量

  4. 点击管理流量

  5. 找到标记的修订版本名称:系统会列出新修订版本,但百分比设置为 0:它当前未处理任何流量。在“管理流量”* 表单中:

    1. 将其设置为所需的百分比,例如 5。请注意,当前提供版本的百分比会自动减少相同的数量。
    2. 点击保存
    3. 根据需要,在几小时或数天内重复执行这些“管理流量”步骤,但采用更改后的百分比,并根据需要提高标记修订版本的百分比。您无需重新部署即可更改流量百分比。

命令行

如需将流量迁移到特定的修订版本标记,请执行以下命令:

gcloud run services update-traffic myservice --to-tags TAG_NAME=TRAFFIC_PERCENT

替换

  • TAG_NAME 替换为您希望作为流量迁移目标的标记的名称
  • TRAFFIC_PERCENT 替换为您希望流向标记的修订版本以进行处理的流量占总流量的百分比,例如 1

YAML

您可以使用 gcloud run services describe --format export 命令下载并查看现有服务配置,该命令会生成清理后的 YAML 格式的结果。然后,您可以使用 gcloud beta run services replace 命令修改下述字段并上传修改后的 YAML。请务必仅修改记录的字段。

  1. 要查看和下载配置,请运行以下命令:

    gcloud run services describe SERVICE --format export > service.yaml
  2. 按照各种配置页面中的说明对服务进行所需的任何配置更改。

  3. spec 特性下,找到并更新标记的修订版本的 traffic 特性,以便标记的修订版本仅处理少量流量:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - revisionName: REVISION
        tag: TAG_NAME
        percent: PERCENT-NEW
      - revisionName: REVISION-FORMER
        percent: PERCENT-FORMER
    

    请注意,百分比的总和必须为 100%。替换

    • REVISION 替换为标记的修订版本的名称。
    • TAG_NAME 替换为要逐步发布的标记的名称。
    • PERCENT-NEW 替换为您要发送到标记修订版本的流量百分比,例如,使用 10 将 10% 的流量发送到该修订版本。
    • REVISION-FORMER 替换为当前处理流量的修订版本的名称。
    • PERCENT-FORMER 替换为您要发送到旧修订版本的流量百分比。
  4. 使用以下命令将服务替换为其新配置:

    gcloud beta run services replace service.yaml
  5. 等待更新完成:您应该会看到一条消息,说明正在逐步发布的新修订版本已部署并且正在处理您使用的百分比值的流量。