Este documento descreve como configurar e usar implantações canário para implantar seus aplicativos no Cloud Run. O canário do Cloud Deploy é compatível com serviços e pools de workers do Cloud Run, mas não com jobs.
Uma implantação canário é um lançamento progressivo de uma nova versão do aplicativo, em que você aumenta gradualmente a porcentagem de tráfego enviado para a nova versão, enquanto monitora o desempenho do aplicativo. Isso ajuda a detectar possíveis problemas com antecedência e minimizar o impacto nos usuários.
Como as implantações canário funcionam no Cloud Run
Ao implantar no Cloud Run usando uma estratégia de implantação canário, o Cloud Deploy atualiza seu serviço atual com uma nova revisão. A nova revisão recebe uma porcentagem especificada de tráfego, e a revisão antiga continua recebendo o restante. Você aumenta gradualmente a divisão de tráfego para a nova revisão com o tempo.
Com o Cloud Deploy, é possível configurar implantações canário no Cloud Run em uma ou várias etapas.
As instruções aqui incluem apenas o que é específico da configuração de canary. O documento Implantar um serviço, job ou pool de workers do Cloud Run tem as instruções gerais para configurar e executar seu pipeline de implantação.
Verifique se você tem as permissões necessárias
Além de outras permissões do Identity and Access Management necessárias para usar o Cloud Deploy, você precisa das seguintes permissões para realizar outras ações que podem ser necessárias para uma implantação canário:
clouddeploy.rollouts.advanceclouddeploy.rollouts.ignoreJobclouddeploy.rollouts.cancelclouddeploy.rollouts.retryJobclouddeploy.jobRuns.getclouddeploy.jobRuns.listclouddeploy.jobRuns.terminate
Consulte Papéis e permissões do IAM para mais informações sobre quais papéis disponíveis incluem essas permissões.
Prepare seu skaffold.yaml
O arquivo skaffold.yaml define como as definições de serviço do Cloud Run são renderizadas e implantadas. Para uma implantação canário no Cloud Run, verifique se ela aponta corretamente para os arquivos de definição de serviço e define os artefatos de build necessários (como imagens de contêiner). Nenhuma configuração específica do canary é necessária no próprio skaffold.yaml além do que é necessário para uma implantação padrão. Você pode usar perfis do Skaffold para gerenciar diferentes variações de definição de serviço para fases canário personalizadas.
Preparar a definição do serviço ou do pool de workers
O arquivo de definição de serviço normal do Cloud Run é suficiente, mas sem uma estrofe traffic. O Cloud Deploy gerencia a divisão do tráfego entre a última revisão bem-sucedida e a nova.
Serviço
Exemplo service.yaml (sem estrofe 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
Pool de workers
Exemplo worker-pool.yaml (sem estrofe 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
Configurar um teste canário automatizado
Configure um canário automático diretamente na definição do pipeline de entrega para uma etapa específica do Cloud Run. O Cloud Deploy instrui automaticamente o Cloud Run a dividir o tráfego entre a última revisão estável e a nova revisão de acordo com as porcentagens especificadas.
serialPipeline:
stages:
- targetId: prod
profiles: []
strategy:
canary:
runtimeConfig:
cloudRun:
automaticTrafficControl: true
canaryDeployment:
percentages: [PERCENTAGES]
verify:
tasks: [TASKS]
predeploy:
tasks: [TASKS]
postdeploy:
tasks: [TASKS]
Nesta configuração:
PERCENTAGES é uma lista separada por vírgulas de valores percentuais que representam seus incrementos de canário, por exemplo,
[25, 50, 75]. Isso não inclui100, porque a implantação de 100% é presumida no canário e é processada pela fasestable.Para ativar a verificação de implantação, configure a seção
verify. Se você fizer isso, um jobverifyserá adicionado a cada fase canário.É possível ativar os hooks de pré-implantação configurando a estrofe
predeploy. Se você fizer isso, um jobpredeployserá adicionado à primeira fase canário.É possível ativar os hooks postdeploy configurando a stanza
postdeploy. Se você fizer isso, um trabalhopostdeployserá adicionado à fasestable.Cada propriedade
tasksemverify,predeployepostdeployconsiste em uma ou mais tarefas a serem executadas como parte desse job. Todas as tarefas configuradas serão executadas sequencialmente na ordem em que foram definidas.
Configurar um teste canário personalizado e automatizado
Isso combina a definição de fase personalizada (nomes, porcentagens, perfis, verificação, hooks) com o gerenciamento automático de tráfego do Cloud Deploy para o Cloud Run. Você define as fases, mas o Cloud Deploy instrui o Cloud Run a mudar o tráfego com base nas porcentagens.
Para configurar isso, inclua a configuração runtimeConfig.cloudRun.automaticTrafficControl: true e a seção customCanaryDeployment (definindo phaseConfigs) no bloco strategy.canary. O Cloud Deploy vai usar os perfis do Skaffold especificados para renderizar a definição do serviço (que ainda não deve ter uma estrofe traffic), mas vai gerenciar automaticamente o tráfego de acordo com as porcentagens de fase.
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]
Executar o canary do Cloud Run
Registre o pipeline e os destinos: aplique os arquivos de configuração do pipeline de entrega e do destino do Cloud Run.
gcloud deploy apply --file=delivery-pipeline.yaml --region=REGION gcloud deploy apply --file=cloudrun-targets.yaml --region=REGIONO pipeline de entrega inclui a configuração canário automatizada ou personalizada para o ambiente de execução escolhido.
Crie um lançamento: inicie a implantação fornecendo o nome da imagem.
gcloud deploy releases create RELEASE_NAME \ --delivery-pipeline=PIPELINE_NAME \ --region=REGIONO pipeline de entrega identificado por
PIPELINE_NAMEcontém a configuração de teste canário automatizada ou personalizada descrita neste documento.Avançar o canário:
CLI da gcloud
gcloud deploy rollouts advance ROLLOUT_NAME \ --release=RELEASE_NAME \ --delivery-pipeline=PIPELINE_NAME \ --region=REGIONEm que:
ROLLOUT_NAMEé o nome do lançamento atual que você está avançando para a próxima fase.RELEASE_NAMEé o nome da versão de que este lançamento faz parte.PIPELINE_NAMEé o nome do pipeline de entrega que você está usando para gerenciar a implantação dessa versão.REGIONé o nome da região em que a versão foi criada, por exemplo,us-central1. Obrigatório.Consulte a referência do SDK Google Cloud para mais informações sobre o comando
gcloud deploy rollouts advance.Console do Google Cloud
Clique no pipeline mostrado na lista de pipelines de entrega.
A página de detalhes do pipeline de entrega mostra uma representação gráfica do progresso do pipeline de entrega.
Na guia Lançamentos, em Detalhes do pipeline de entrega, clique no nome do lançamento.
A página de detalhes da implantação é mostrada.

Neste exemplo, o lançamento tem uma fase
canary-50e uma fasestable. Seu lançamento pode ter mais fases ou fases diferentes.Clique em Continuar lançamento.
O lançamento é avançado para a próxima fase.
Fases ignoradas
Se você implantar um canary e o aplicativo ainda não tiver sido implantado nesse ambiente de execução, o Cloud Deploy vai pular a fase canary e executar a fase estável. Consulte Pular fases na primeira vez para saber por que isso acontece.
A seguir
Confira o guia de início rápido da implantação canário.
Saiba como gerenciar o ciclo de vida dos rollouts canários.
Saiba mais sobre a implantação paralela.
Saiba mais sobre as estratégias de implantação do Cloud Deploy.
Saiba mais sobre o Cloud Run.