Usar uma estratégia de implantação canário

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 destino compatíveis

A implantação canário no Cloud Deploy é compatível com todos os tipos de destino, incluindo:

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 o 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 em clusters anexados do GKE), 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 antiga e nova, 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 Service Networking, 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 um job de pré-implantação ou pós-implantação, ou ambos, deve ser incluído

    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 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 um job de pré-implantação ou pós-implantação, ou ambos, deve ser incluído

    Além disso, para um canary 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, será necessário ter 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.

  • Quando você cria uma versão, um lançamento do controlador 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 continuar IN_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 depois da atual.

    Se esta for a fase stable, o lançamento do controlador será FAILED.

    HALTED permite que você possa 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 estado IN_PROGRESS.

Usar a análise de implantação com uma estratégia de implantação canário

Em uma estratégia de implantação canário, é possível usar a análise de implantação com algumas ou todas as fases (exceto stable) para ajudar a determinar quando avançar um lançamento para a próxima fase. Além disso, você pode combinar a análise com uma automação advanceRolloutRule para que o lançamento avance automaticamente.

Para isso, inclua uma estrofe analysis na configuração de cada fase que você quer analisar.

Essa análise pode usar métricas do Google Cloud Observability ou do provedor de métricas de sua escolha.

A seguir