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

Knative serving 可让您指定应该接收流量的修订版本,并指定修订版本所收到的流量百分比。借助此功能,您可以回滚到之前的修订版本、逐步发布修订版本(也称为蓝绿部署),以及将流量拆分到多个修订版本。本页面介绍了如何使用此功能管理发送到 Knative serving 修订版本的流量。

回滚到先前的修订版本

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

控制台

  1. 在 Google Cloud 控制台中前往 Knative serving:

    前往 Knative serving

  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 run services replace 命令修改该 YAML 文件并部署这些更改。您必须确保仅修改指定的属性。

  1. 将服务配置下载到本地工作区上名为 service.yaml 的文件中:

    gcloud run services describe SERVICE --format export > service.yaml

    SERVICE 替换为您的 Knative serving 服务的名称。

  2. 在本地文件中,更新 spec 下的 traffic 属性:

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

    替换

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

    gcloud run services replace service.yaml

逐步发布修订版本

要逐步发布新的修订版本(蓝绿部署),请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中前往 Knative serving:

    前往 Knative serving

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

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

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

  5. 点击部署

  6. 点击管理流量

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

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

命令行

  1. 如需部署要逐步发布的修订版本,请在一开始将其设置为不接收流量,并使用具有 --no-traffic 参数的 update 命令:

    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 run services replace 命令修改该 YAML 文件并部署这些更改。您必须确保仅修改指定的属性。

  1. 将服务配置下载到本地工作区上名为 service.yaml 的文件中:

    gcloud run services describe SERVICE --format export > service.yaml

    SERVICE 替换为您的 Knative serving 服务的名称。

  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 替换为您要发送到旧修订版本的流量百分比。

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

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

控制台

  1. 在 Google Cloud 控制台中前往 Knative serving:

    前往 Knative serving

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

  3. 点击管理流量

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

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

命令行

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

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

您需要进行如下替换:

  • SERVICE 替换为相应服务的名称。
  • LIST 替换为以英文逗号分隔的修订版本列表,该列表包含要接收的流量和相应的流量百分比,总计为100%:
    REVISION1=PERCENTAGE1,REVISION2=PERCENTAGE2,REVISIONn=PERCENTAGEn
    例如 hello2-00005-red=25,hello2-00001-bod=25,hello2-00002-nan=50

YAML

您可以使用 gcloud run services describe 命令和 --format=export 标志将现有服务的配置下载到的 YAML 文件中。然后,您可以使用 gcloud run services replace 命令修改该 YAML 文件并部署这些更改。您必须确保仅修改指定的属性。

  1. 将服务配置下载到本地工作区上名为 service.yaml 的文件中:

    gcloud run services describe SERVICE --format export > service.yaml

    SERVICE 替换为您的 Knative serving 服务的名称。

  2. 在本地文件中,更新 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 run services replace service.yaml

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

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

控制台

  1. 在 Google Cloud 控制台中前往 Knative serving:

    前往 Knative serving

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

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

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

  5. 点击部署

命令行

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

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

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

YAML

您可以使用 gcloud run services describe 命令和 --format=export 标志将现有服务的配置下载到的 YAML 文件中。然后,您可以使用 gcloud run services replace 命令修改该 YAML 文件并部署这些更改。您必须确保仅修改指定的属性。

  1. 将服务配置下载到本地工作区上名为 service.yaml 的文件中:

    gcloud run services describe SERVICE --format export > service.yaml

    SERVICE 替换为您的 Knative serving 服务的名称。

  2. 在本地文件中,更新 spec 下的 traffic 属性:

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

    gcloud run services replace service.yaml

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

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

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

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

部署新的标记修订版本

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

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

您需要进行如下替换:

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

该标记允许您直接测试特定网址处的新修订版本,而无需处理流量。测试网址以您提供的标记名称开头:http://{TAG_NAME}---{SERVICE_NAME}.{NAMESPACE}.kuberun.{EXTERNAL_IP}.nip.io

例如,如果您在服务 myservice 中使用了标记名称 green,则应测试以下网址中标记的修订版本:https://green---myservice.default.kuberun.11.111.11.111.nip.io

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

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

控制台

  1. 在 Google Cloud 控制台中前往 Knative serving:

    前往 Knative serving

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

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

  4. 点击管理流量

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

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

命令行

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

gcloud run deploy update-traffic myservice --tag TAG_NAME=TRAFFIC_PERCENT

替换

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

YAML

您可以使用 gcloud run services describe 命令和 --format=export 标志将现有服务的配置下载到的 YAML 文件中。然后,您可以使用 gcloud run services replace 命令修改该 YAML 文件并部署这些更改。您必须确保仅修改指定的属性。

  1. 将服务配置下载到本地工作区上名为 service.yaml 的文件中:

    gcloud run services describe SERVICE --format export > service.yaml

    SERVICE 替换为您的 Knative serving 服务的名称。

  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 run services replace service.yaml