Este documento descreve como configurar e usar implementações canary para implementar as suas aplicações no Cloud Run (apenas serviços, não tarefas) através do Cloud Deploy.
Uma implementação canária é uma implementação progressiva de uma nova versão da sua aplicação, em que aumenta gradualmente a percentagem de tráfego enviado para a nova versão, enquanto monitoriza o desempenho da aplicação. Isto ajuda a detetar potenciais problemas antecipadamente e a minimizar o impacto nos seus utilizadores.
Como funcionam as implementações canárias para o Cloud Run
Quando implementa no Cloud Run através de uma estratégia de implementação canária, o Cloud Deploy atualiza o serviço existente com uma nova revisão. A nova revisão recebe uma percentagem especificada do tráfego e a revisão antiga continua a receber o restante. Aumenta gradualmente a divisão de tráfego para a nova revisão ao longo do tempo.
Com o Cloud Deploy, pode configurar implementações canary no Cloud Run numa única fase ou em várias fases.
As instruções aqui incluem apenas o que é específico da configuração de testes canários. O documento Implemente um serviço ou uma tarefa do Cloud Run tem as instruções gerais para configurar e executar o pipeline de implementação.
Certifique-se de que tem as autorizações necessárias
Além de outras autorizações de gestão de identidades e acessos necessárias para usar o Cloud Deploy, precisa das seguintes autorizações para realizar ações adicionais que podem ser necessárias para uma implementação canary:
clouddeploy.rollouts.advance
clouddeploy.rollouts.ignoreJob
clouddeploy.rollouts.cancel
clouddeploy.rollouts.retryJob
clouddeploy.jobRuns.get
clouddeploy.jobRuns.list
clouddeploy.jobRuns.terminate
Consulte as funções e autorizações de IAM para mais informações sobre as funções disponíveis que incluem estas autorizações.
Prepare o seu skaffold.yaml
O ficheiro skaffold.yaml
define como as definições do serviço do Cloud Run são renderizadas e implementadas. Para uma implementação canary no Cloud Run, certifique-se de que aponta corretamente para os ficheiros de definição do serviço e define todos os artefactos de compilação necessários (como imagens de contentores). Não é necessária nenhuma configuração especial específica do teste canário no próprio skaffold.yaml
, além do que é necessário para uma implementação padrão. Pode usar perfis do Skaffold para gerir diferentes variações de definição de serviços para fases de testes beta personalizados.
Prepare a definição do serviço
O ficheiro de definição do serviço do Cloud Run normal é suficiente, mas
sem uma secção traffic
. O Cloud Deploy gere a divisão do tráfego entre a última revisão bem-sucedida e a nova revisão.
Exemplo service.yaml
(sem a secção 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
Configure um teste canário automatizado
Configure um teste canário automatizado diretamente na definição do pipeline de entrega para uma fase específica do Cloud Run. O Cloud Deploy indica automaticamente ao Cloud Run que divida o tráfego entre a última revisão estável e a nova revisão de acordo com as percentagens 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 de valores de percentagem separados por vírgulas que representam os seus incrementos de teste canário, por exemplo,
[25, 50, 75]
. Tenha em atenção que isto não inclui100
, porque a implementação de 100% é presumida no teste canário e é processada pela fasestable
.Pode ativar a validação da implementação (
verify: true
). Se o fizer, é adicionada uma tarefaverify
a cada fase de teste.PREDEPLOY_ACTION
É igual ao ACTION_NAME que usou no seu
skaffold.yaml
para definir a ação personalizada que quer executar antes de implementar.POSTDEPLOY_ACTION
É igual ao ACTION_NAME que usou no seu
skaffold.yaml
para definir a ação personalizada que quer executar após a implementação.
Configure um canary automatizado personalizado
Isto combina a definição de fase personalizada (nomes, percentagens, perfis, validação, hooks) com a gestão de tráfego automática do Cloud Deploy para o Cloud Run. Define as fases, mas o Cloud Deploy processa as instruções do Cloud Run para mudar o tráfego com base nas percentagens.
Para configurar esta opção, inclua a definição runtimeConfig.cloudRun.automaticTrafficControl: true
e a secção customCanaryDeployment
(que define phaseConfigs
) no bloco strategy.canary
. O Cloud Deploy usa os perfis do Skaffold especificados para renderizar a definição do serviço (que ainda não deve ter uma secção traffic
), mas gere automaticamente o tráfego de acordo com as percentagens das fases.
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
Execute o teste canary do Cloud Run
Registe o pipeline e os alvos: aplique os ficheiros de configuração do alvo do Cloud Run e do pipeline de entrega.
gcloud deploy apply --file=delivery-pipeline.yaml --region=REGION gcloud deploy apply --file=cloudrun-targets.yaml --region=REGION
O pipeline de implementação inclui a configuração canary automática ou personalizada para o tempo de execução escolhido.
Crie uma versão: inicie a implementação, indicando 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 canary automatizada ou personalizada descrita neste documento.Avançar o teste:
CLI gcloud
gcloud deploy rollouts advance ROLLOUT_NAME \ --release=RELEASE_NAME \ --delivery-pipeline=PIPELINE_NAME \ --region=REGION
Onde:
ROLLOUT_NAME
é o nome da implementação atual que está a avançar para a fase seguinte.RELEASE_NAME
é o nome do lançamento do qual esta implementação faz parte.PIPELINE_NAME
é o nome do pipeline de entrega que está a usar para gerir a implementação deste lançamento.REGION
é o nome da região em que o lançamento foi criado, por exemplo,us-central1
. Este campo é obrigatório.Consulte a referência do Google Cloud SDK para mais informações acerca do comando
gcloud deploy rollouts advance
.Google Cloud consola
Clique no pipeline apresentado na lista de pipelines de fornecimento.
A página de detalhes do pipeline de fornecimento mostra uma representação gráfica do progresso do pipeline de fornecimento.
No separador Implementações, em Detalhes do pipeline de fornecimento, clique no nome da implementação.
É apresentada a página de detalhes da implementação para essa implementação.
Repare que, neste exemplo, a implementação tem uma fase
canary-50
e uma fasestable
. A implementação pode ter mais fases ou fases diferentes.Clique em Avançar implementação.
A implementação avança para a fase seguinte.
Fases ignoradas
Se implementar uma versão canary e a sua aplicação ainda não tiver sido implementada nesse tempo de execução, o Cloud Deploy ignora a fase canary e executa a fase estável. Consulte a secção Ignorar fases na primeira vez para saber por que motivo isto acontece.
O que se segue?
Experimente o início rápido da implementação canary.
Saiba como gerir o ciclo de vida das implementações de testes beta.
Saiba mais sobre a implementação em paralelo.
Saiba mais sobre as estratégias de implementação do Cloud Deploy.
Saiba mais sobre o Cloud Run.