Neste documento, descrevemos como configurar e usar uma estratégia de implantação canário.
O que é uma implantação canário?
Uma implantação canário é um lançamento progressivo de um aplicativo que divide o tráfego entre uma versão já implantada e uma nova, lançando-a para um subconjunto de usuários antes do lançamento completo.
Tipos de segmentação compatíveis
A implantação canário no Cloud Deploy é compatível com todos os tipos de destino, incluindo:
Google Kubernetes Engine e GKE Enterprise
Cloud Run (somente serviços, não jobs)
O Canary também funciona com várias metas.
Por que usar uma estratégia de implantação canário?
Uma implantação canário oferece a chance de lançar parcialmente seu aplicativo. Assim, você garante que a nova versão do aplicativo é confiável antes de entregá-la a todos os usuários.
Se você estiver implantando no GKE ou no GKE Enterprise, por exemplo, implante a nova versão do aplicativo em um número limitado de pods. A versão antiga continuaria sendo executada, mas com mais tráfego sendo enviado para os novos pods.
Se você estiver implantando no Cloud Run, o próprio Cloud Run dividirá o tráfego entre as revisões antigas e novas, de acordo com as porcentagens configuradas.
Tipos de canário
Com o Cloud Deploy, é possível configurar os seguintes tipos de implantação canary:
Automatizado
Com uma implantação canário automatizada (para redes de serviços, API Gateway ou Cloud Run), você configura o Cloud Deploy com uma série de porcentagens que expressam uma implantação progressiva. O Cloud Deploy realiza outras operações em seu nome para dividir as porcentagens de tráfego entre as versões antiga e nova.
Personalizado e automatizado
Para um canary personalizado e automatizado (para rede de serviços, API Gateway ou Cloud Run), é possível fornecer o seguinte:
- O nome da fase
- A meta de porcentagem
- O perfil do Skaffold a ser usado na fase.
- Se um job de verificação deve ser incluído ou não
- Se você quer incluir um job de pré-implantação, pós-implantação ou ambos
Mas não é necessário fornecer informações de balanceamento de tráfego. O Cloud Deploy cria os recursos necessários (para rede de serviços, API de gateway ou Cloud Run).
Personalizado
Com um canary personalizado (para rede de serviços, API Gateway ou Cloud Run), você configura cada fase canary separadamente, incluindo o seguinte:
- O nome da fase
- A meta de porcentagem
- O perfil do Skaffold a ser usado na fase.
- Se um job de verificação deve ser incluído ou não
- Se você quer incluir um job de pré-implantação, pós-implantação ou ambos
Além disso, para um canário totalmente personalizado, você fornece toda a configuração de balanceamento de tráfego.
Fases de uma implantação canário
Ao criar uma versão para uma implantação canário, o lançamento é criado com
uma fase para cada incremento canário, além de uma fase final de stable
para 100%.
Por exemplo, se você configurar um canary para incrementos de 25%, 50% e 75%, o lançamento terá as seguintes fases:
canary-25
canary-50
canary-75
stable
Leia mais sobre fases, jobs e execuções de jobs de lançamento em Gerenciar lançamentos.
Usar a implantação paralela com uma estratégia de implantação canário
É possível executar uma implantação canário usando a implantação paralela. Isso significa que o destino em que você está fazendo a implantação progressiva pode ter dois ou mais destinos filhos. Por exemplo, é possível fazer implantações progressivas em clusters de regiões separadas ao mesmo tempo.
Qual é a diferença entre um canary paralelo e um canary de destino único?
Assim como na implantação canário de destino único, se você estiver implantando em destinos do GKE, precisará de uma configuração de implantação do Kubernetes e uma configuração de serviço do Kubernetes no manifesto.
Assim como na implantação canário de destino único, a configuração do pipeline de entrega precisa incluir uma estrofe
strategy.canary
na definição do estágio aplicável.Além disso, é necessário configurar um destino múltiplo e configurar os destinos filhos a que esse destino múltiplo se refere.
Ao criar uma versão, um lançamento de controle e os lançamentos filhos são criados.
Os dois tipos de lançamento (controlador e filho) têm fases separadas para todas as porcentagens canário configuradas e uma fase
stable
para o canário 100%.Não é possível avançar um lançamento filho.
Só é possível avançar lançamentos do controlador. Quando você avança o lançamento do controlador para a próxima etapa, os lançamentos filhos também são avançados pelo Cloud Deploy.
Não é possível repetir jobs com falha no lançamento do controlador.
Só é possível tentar de novo um job em lançamentos filhos.
Não é possível ignorar jobs com falha no lançamento do controlador.
Só é possível ignorar jobs com falha em lançamentos filhos.
É possível cancelar um lançamento do controlador, mas não é possível cancelar lançamentos filhos.
Você pode encerrar execuções de jobs em um lançamento filho, mas não em um lançamento do controlador.
O que fazer se um lançamento paralelo falhar no canário
Quando um lançamento filho falha, o lançamento do controlador pode fazer a transição para diferentes estados, dependendo do que acontece com os lançamentos filhos:
Se um ou mais lançamentos filhos falharem, mas pelo menos um ainda estiver
IN_PROGRESS
, o lançamento do controlador vai continuarIN_PROGRESS
.Se um ou mais lançamentos filhos falharem, mas pelo menos um for bem-sucedido, o lançamento do controlador será
HALTED
se houver mais fases após a atual.Se esta for a fase
stable
, o lançamento do controlador seráFAILED
.HALTED
permite ignorar, tentar de novo jobs com falha no lançamento filho com falha ou cancelar o lançamento do controlador e impedir outras ações nos lançamentos filhos.Se o lançamento do controlador estiver no estado
HALTED
devido a uma falha no lançamento filho, e você ignorar o job com falha no lançamento filho, o lançamento do controlador vai reverter para o estadoIN_PROGRESS
.
A seguir
Confira o guia de início rápido de implantação canário.
Saiba como gerenciar o ciclo de vida dos rollouts do seu canary.
Acesse o guia relevante para seu ambiente de destino específico: