本文档介绍了如何配置和使用 Canary 部署将应用部署到 Cloud Run。Cloud Deploy Canary 支持 Cloud Run 服务和工作器池,但不支持作业。
Canary 部署是指逐步发布应用的新版本,即逐渐增加发送到新版本的流量百分比,同时监控应用的性能。这有助于您及早发现潜在问题,并最大限度地减少对用户的影响。
Canary 部署在 Cloud Run 中的运作方式
当您使用 Canary 部署策略部署到 Cloud Run 时,Cloud Deploy 会使用新修订版本更新现有服务。新修订版本会收到指定百分比的流量,而旧修订版本会继续收到剩余的流量。随着时间的推移,您会逐渐增加拆分到新修订版本的流量。
借助 Cloud Deploy,您可以在单个阶段或多个阶段中将 Canary 部署配置到 Cloud Run。
此处的说明仅包含特定于 Canary 配置的内容。部署 Cloud Run 服务、作业或工作器池 文档包含用于配置和执行部署 流水线的一般说明。
确保您拥有所需的权限
除了使用 Cloud Deploy 所需的其他 Identity and Access Management 权限之外,您还需要以下权限才能执行 Canary 部署可能需要的其他操作:
clouddeploy.rollouts.advanceclouddeploy.rollouts.ignoreJobclouddeploy.rollouts.cancelclouddeploy.rollouts.retryJobclouddeploy.jobRuns.getclouddeploy.jobRuns.listclouddeploy.jobRuns.terminate
如需详细了解哪些可用角色包含这些权限,请参阅 IAM 角色和权限 。
准备 skaffold.yaml
skaffold.yaml 文件定义了 Cloud Run 服务定义的渲染和部署方式。对于 Cloud Run 的 Canary
部署,请确保它正确指向您的服务定义文件并定义任何必要的 build 制品(例如容器映像)。除了 标准部署 所需的内容之外,skaffold.yaml 本身不需要任何特定于 Canary 的配置。您可以使用 Skaffold 配置文件来管理 自定义 Canary 阶段 的不同服务定义变体。
准备服务或工作器池定义
您的普通 Cloud Run 服务定义文件就足够了,但没有 traffic 节。Cloud Deploy 会为您管理上次成功修订版本和新修订版本之间的流量拆分。
服务
示例 service.yaml(没有 traffic 节):
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: my-cloudrun-service
spec:
template:
spec:
containers:
- image: gcr.io/my-project/my-cloudrun-app
ports:
- containerPort: 8080
工作器池
示例 worker-pool.yaml(没有 instanceSplit 节):
apiVersion: run.googleapis.com/v1
kind: WorkerPool
metadata:
name: my-wp
annotations:
run.googleapis.com/launch-stage: BETA
spec:
template:
spec:
containers:
- image: us-docker.pkg.dev/cloudrun/container/worker-pool
配置自动化 Canary
直接在特定 Cloud Run 阶段的交付流水线定义中配置自动化 Canary。Cloud Deploy 会自动指示 Cloud Run 根据指定的百分比在上次稳定修订版本和新修订版本之间拆分流量。
serialPipeline:
stages:
- targetId: prod
profiles: []
strategy:
canary:
runtimeConfig:
cloudRun:
automaticTrafficControl: true
canaryDeployment:
percentages: [PERCENTAGES]
verify:
tasks: [TASKS]
predeploy:
tasks: [TASKS]
postdeploy:
tasks: [TASKS]
在此配置中:
PERCENTAGES 是一个逗号分隔列表,其中包含表示 Canary 增量的百分比值,例如
[25, 50, 75]。请注意,此列表不包含100,因为在 Canary 中 假定 100% 的部署,并且由stable阶段处理。您可以通过配置
verify节来启用部署验证。如果这样做,系统会将verify作业添加到每个 Canary 阶段。您可以通过配置
predeploy节来启用预部署钩子。如果这样做,系统会将predeploy作业添加到第一个 Canary 阶段。您可以通过配置
postdeploy节来启用 部署后钩子。如果这样做,系统会将postdeploy作业添加到stable阶段。verify、predeploy和postdeploy下的每个tasks属性都包含 一个或多个要作为该作业的一部分运行的 任务。任何配置的任务都将按定义的顺序依次运行。
配置自定义自动化 Canary
这会将自定义阶段定义(名称、百分比、配置文件、验证、钩子)与 Cloud Deploy 的 Cloud Run 自动流量管理相结合。您定义阶段,但 Cloud Deploy 会处理指示 Cloud Run 根据百分比转移流量。
如需进行此配置,请在 strategy.canary 块中同时包含 runtimeConfig.cloudRun.automaticTrafficControl: true 设置和 customCanaryDeployment 部分(定义 phaseConfigs)。Cloud Deploy 将使用指定的 Skaffold 配置文件来渲染服务定义(该定义仍不应包含 traffic 节),但会根据阶段百分比自动管理流量。
serialPipeline:
stages:
- targetId: cloudrun-prod
profiles: []
strategy:
canary:
# Include runtimeConfig for automatic traffic management
runtimeConfig:
cloudRun:
automaticTrafficControl: true
# Include customCanaryDeployment for phase customization
customCanaryDeployment:
phaseConfigs:
- phaseId: "warmup-cr"
percentage: 10
profiles: ["base-config"] # Profile rendering service def (no traffic stanza)
verify:
tasks: [TASKS]
- phaseId: "scaling-cr"
percentage: 50
profiles: ["base-config"] # Can use the same profile
verify:
tasks: [TASKS]
- phaseId: "stable"
percentage: 100
profiles: ["base-config"]
verify:
tasks: [TASKS]
执行 Cloud Run Canary
注册流水线和目标:应用交付流水线和 Cloud Run 目标配置文件。
gcloud deploy apply --file=delivery-pipeline.yaml --region=REGION gcloud deploy apply --file=cloudrun-targets.yaml --region=REGION交付流水线包含所选运行时的自动化或自定义 Canary 配置。
创建版本:启动部署,并提供映像名称。
gcloud deploy releases create RELEASE_NAME \ --delivery-pipeline=PIPELINE_NAME \ --region=REGION由
PIPELINE_NAME标识的交付流水线包含本文档中介绍的自动化或自定义 Canary 配置。推进 Canary:
gcloud CLI
gcloud deploy rollouts advance ROLLOUT_NAME \ --release=RELEASE_NAME \ --delivery-pipeline=PIPELINE_NAME \ --region=REGION其中:
ROLLOUT_NAME是您要推进到下一阶段的当前发布版本的名称。RELEASE_NAME是此发布版本所属的版本的名称。PIPELINE_NAME是您用于管理此版本部署的交付流水线的名称。REGION是创建版本的区域的名称,例如us-central1。这是必填项。如需详细了解
gcloud deploy rollouts advance命令,请参阅 Google Cloud SDK 参考文档。Google Cloud 控制台
点击交付流水线列表中显示的流水线。
交付流水线详情页面显示交付流水线进展的图形表示。
在发布版本标签页的交付流水线详情下,点击 发布版本的名称。
系统会显示该发布版本的发布版本详情页面。

请注意,在此示例中,发布版本具有
canary-50阶段和stable阶段。您的发布版本可能具有更多阶段或不同的阶段。点击推进发布版本 。
发布版本会推进到下一阶段。
跳过的阶段
如果您部署 Canary,但您的应用尚未部署到该运行时,Cloud Deploy 会跳过 Canary 阶段并运行稳定阶段。如需了解发生这种情况的原因,请参阅首次跳过阶段 。
后续步骤
试用 Canary 部署快速入门。
了解如何管理 Canary 发布版本的生命化周期。
详细了解并行部署。
详细了解 Cloud Deploy 部署策略。
详细了解 Cloud Run。