Esperamos que você leia primeira parte, onde explicamos brevemente o que são implantações Canary. Também mostramos como implementá-lo usando recursos padrão do Kubernetes.
Lançamentos do Argo
Argo Rollouts é um controlador de implantação nativo do Kubernetes. Ele fornece um CRD (definição de recursos personalizados) para Kubernetes. Graças a isso, podemos usar uma nova entidade: Rollout, que gerencia implantações azul-verde e canário com diversas opções de configuração.
Controlador Argo Rollouts usado por um recurso personalizado Rollout, Permite estratégias de implantação adicionais, como azul-verde e canário para Kubernetes. Recurso Rollout fornece funcionalidade equivalente Deployment, apenas com estratégias de implantação adicionais.
recurso Deployments tem duas estratégias para implantação: RollingUpdate и Recreate. Embora essas estratégias sejam adequadas para a maioria dos casos, para implantação em servidores em grande escala, são utilizadas estratégias adicionais, como azul-verde ou canário, que não estão disponíveis no controlador de implantação. Para usar essas estratégias no Kubernetes, os usuários tiveram que escrever scripts além de suas implantações. O Argo Rollouts Controller expõe essas estratégias como parâmetros simples, declarativos e configuráveis. https://argoproj.github.io/argo-rollouts
Há também o Argo CI, que fornece uma interface web conveniente para uso com Rollouts, veremos isso no próximo artigo.
Em nosso nabo de infraestrutura (veja abaixo) já adicionamos install.yaml como i/k8s/argo-rollouts/install.yaml. Desta forma, o GitlabCI irá instalá-lo no cluster.
Esta é uma API Python+Flask muito simples que retorna uma resposta como JSON. Construiremos o pacote usando GitlabCI e enviaremos o resultado para o Registro Gitlab. No registro, temos duas versões de lançamento diferentes:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
A única diferença entre eles é o arquivo JSON retornado. Usamos este aplicativo para visualizar o mais facilmente possível com qual versão estamos nos comunicando.
Repositório de infraestrutura
Neste repositório usaremos GitlabCI para implantação no Kubernetes, .gitlab-ci.yml se parece com isto:
Rollout funciona da mesma forma que a implantação. Se não definirmos uma estratégia de atualização (como canário aqui), ela se comportará como a implantação de atualização contínua padrão.
Definimos duas etapas no yaml para implantação canário:
10% do tráfego para canário (aguarde OK manual)
50% do tráfego para canário (espere 2 minutos e continue até 100%)
Executando a implantação inicial
Após a implantação inicial, nossos recursos ficarão assim:
E recebemos uma resposta apenas da primeira versão do aplicativo:
Executando implantação canário
Etapa 1: 10% de tráfego
Para iniciar uma implantação canário, precisamos apenas alterar a versão da imagem como normalmente fazemos com implantações:
Eu realmente recomendo este vídeo, ele mostra como o Argo Rollouts e o Argo CI funcionam juntos:
Total
Gosto muito da ideia de usar CRDs que gerenciam a criação de tipos adicionais de implantações ou replicasets, redirecionam tráfego, etc. Trabalhar com eles é tranquilo. A seguir gostaria de testar a integração com Argo CI.
No entanto, parece haver uma grande fusão entre Argo CI e Flux CI, então posso esperar até que a nova versão seja lançada: Fluxo Argo.
Você já teve alguma experiência com Argo Rollouts ou Argo CI?