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, você configura cada fase 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.
Todos os tipos de destino são compatíveis com o canary personalizado.
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 da 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: