Neste documento, descrevemos como configurar e usar implantações canário para implantar aplicativos no Cloud Run (somente serviços, não jobs) usando o Cloud Deploy.
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 antecipadamente 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 ao longo do 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 ou job 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.advance
clouddeploy.rollouts.ignoreJob
clouddeploy.rollouts.cancel
clouddeploy.rollouts.retryJob
clouddeploy.jobRuns.get
clouddeploy.jobRuns.list
clouddeploy.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. Não é necessária nenhuma configuração específica do canary no 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 de serviço
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.
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
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: true|false
predeploy:
actions: "PREDEPLOY_ACTION"
postdeploy:
actions: "POSTDEPLOY_ACTION"
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 canary e é processada pela fasestable
.Você pode ativar a verificação de implantação (
verify: true
). Se fizer isso, um jobverify
será adicionado a cada fase de canário.PREDEPLOY_ACTION
É o mesmo que o ACTION_NAME usado no
skaffold.yaml
para definir a ação personalizada que você quer executar antes da implantação.POSTDEPLOY_ACTION
É o mesmo que o ACTION_NAME usado no
skaffold.yaml
para definir a ação personalizada que você quer executar após a implantação.
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 de 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: true
- phaseId: "scaling-cr"
percentage: 50
profiles: ["base-config"] # Can use the same profile
verify: true
- phaseId: "stable"
percentage: 100
profiles: ["base-config"]
verify: true
Executar o canário 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=REGION
O 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=REGION
O pipeline de entrega identificado por
PIPELINE_NAME
conté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=REGION
Em 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
.Google Cloud console
Clique no pipeline mostrado na lista de pipelines de entrega.
A página "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 implementação é mostrada.
Neste exemplo, o lançamento tem uma fase
canary-50
e uma fasestable
. Sua implantação 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 do seu canary.
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.