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 segmentação 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 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 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 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 estado IN_PROGRESS.

A seguir