Use uma estratégia de implementação canary

Este documento descreve como configurar e usar uma estratégia de implementação canary.

O que é uma implementação de teste?

Uma implementação canária é uma implementação progressiva de uma aplicação que divide o tráfego entre uma versão já implementada e uma nova versão, implementando-a num subconjunto de utilizadores antes da implementação completa.

Tipos de segmentação suportados

A implementação canary no Cloud Deploy suporta todos os tipos de destino, incluindo o seguinte:

O Canary também funciona com vários alvos.

Porquê usar uma estratégia de implementação canary?

Uma implementação canary dá-lhe a oportunidade de lançar parcialmente a sua aplicação. Desta forma, pode garantir que a nova versão da sua aplicação é fiável antes de a disponibilizar a todos os utilizadores.

Se estiver a implementar no GKE ou no GKE Enterprise, por exemplo, implementaria a nova versão da sua aplicação num número limitado de pods. A versão antiga continuaria a ser executada, mas com mais tráfego a ser enviado para os novos pods.

Se estiver a implementar no Cloud Run, o próprio Cloud Run divide o tráfego entre as revisões antigas e novas, de acordo com as percentagens que configurar.

Tipos de testes canários

O Cloud Deploy permite-lhe configurar os seguintes tipos de implementação canary:

  • Automático

    Com uma implementação canary automatizada (para redes de serviços, API Gateway ou Cloud Run), configura o Cloud Deploy com uma série de percentagens que expressam uma implementação progressiva. O Cloud Deploy realiza operações adicionais em seu nome para atribuir percentagens de tráfego entre as versões antiga e nova.

  • Personalizada e automatizada

    Para um teste canário automatizado personalizado (para rede de serviços, API de gateway ou Cloud Run), pode fornecer o seguinte:

    • O nome da fase
    • O objetivo de percentagem
    • O perfil do Skaffold a usar para a fase
    • Se deve ou não incluir um trabalho de validação
    • Se deve ou não incluir uma tarefa de pré-implementação ou pós-implementação, ou ambas

    No entanto, não precisa de fornecer informações de equilíbrio 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 canário personalizado, pode configurar cada fase do canário separadamente, incluindo o seguinte:

    • O nome da fase
    • O objetivo de percentagem
    • O perfil do Skaffold a usar para a fase
    • Se deve ou não incluir um trabalho de validação
    • Se deve ou não incluir uma tarefa de pré-implementação ou pós-implementação, ou ambas

    Além disso, para um teste canário totalmente personalizado, fornece toda a configuração de equilíbrio de tráfego.

    Todos os tipos de alvos são suportados para o teste canário personalizado.

Fases de uma implementação de teste

Quando cria um lançamento para uma implementação canary, a implementação é criada com uma fase para cada incremento canary, além de uma fase stable final para 100%.

Por exemplo, se configurar um teste canário para incrementos de 25%, 50% e 75%, a implementação terá as seguintes fases:

  • canary-25
  • canary-50
  • canary-75
  • stable

Pode ler mais acerca das fases de implementação, das tarefas e das execuções de tarefas em Gerir implementações.

Use a implementação paralela com uma estratégia de implementação canary

Pode executar uma implementação canary através da implementação paralela. Isto significa que o destino para o qual está a fazer a implementação progressiva pode abranger dois ou mais destinos secundários. Por exemplo, pode implementar progressivamente em clusters em regiões separadas, ao mesmo tempo.

Qual é a diferença entre um teste canário paralelo e testes canários de destino único

  • Tal como acontece com a implementação de teste canary de destino único, se estiver a implementar em destinos do GKE, precisa de uma configuração de implementação do Kubernetes e uma configuração de serviço do Kubernetes no seu manifesto.

  • Tal como acontece com a implementação canary de destino único, a configuração do pipeline de fornecimento tem de incluir uma secção strategy.canary na definição da fase para a fase aplicável.

  • Além disso, tem de configurar uma segmentação múltipla e configurar as segmentações secundárias a que essa segmentação múltipla faz referência.

  • Quando cria um lançamento, é criada uma implementação do controlador e as implementações secundárias.

    Ambos os tipos de implementação, de controlador e secundário, têm fases separadas para todas as percentagens de teste canário configuradas e uma fase stable para o teste canário de 100%.

  • Não pode avançar uma implementação parcial.

    Só pode avançar implementações de controladores. Quando avança a implementação do controlador para a fase seguinte, as implementações secundárias também são avançadas pelo Cloud Deploy.

  • Não pode tentar novamente tarefas com falhas na implementação do controlador.

    Só pode tentar novamente uma tarefa em implementações secundárias.

  • Não pode ignorar tarefas com falhas na implementação do controlador.

    Só pode ignorar tarefas com falhas em implementações secundárias.

  • Pode cancelar a implementação de um controlador, mas não pode cancelar implementações secundárias.

  • Só pode terminar execuções de tarefas numa implementação secundária e não numa implementação do controlador.

O que fazer se uma implementação paralela falhar no teste canário

Quando uma implementação secundária falha, a implementação do controlador pode transitar para diferentes estados, consoante o que acontece com as implementações secundárias:

  • Se uma ou mais implementações secundárias falharem, mas pelo menos uma implementação secundária continuar IN_PROGRESS, a implementação do controlador permanece IN_PROGRESS.

  • Se uma ou mais implementações secundárias falharem, mas pelo menos uma implementação secundária for bem-sucedida, a implementação do controlador é HALTED se existirem mais fases após a atual.

    Se estiver na fase stable, a implementação do comando está FAILED.

    HALTED dá-lhe a oportunidade de ignorar, tentar novamente as tarefas com falhas na implementação secundária com falhas ou cancelar a implementação do controlador e impedir ações adicionais nas implementações secundárias.

  • Se a implementação do controlador estiver no estado HALTED devido a uma implementação secundária com falha e ignorar a tarefa com falha na implementação secundária, a implementação do controlador reverte para o estado IN_PROGRESS.

O que se segue?