0 XP

DEVOPSQUEST

Minha Trilha
Módulo 9 · GitOps com ArgoCD

Deploy progressivo com GitOps: canary e sync waves

Avançado 35 min+25 XPArgo RolloutsArgo CD

Objetivos desta aula

  • Entender deploy canary e por que ele reduz risco
  • Configurar um Rollout canary com análise de métricas
  • Ordenar aplicação de recursos com sync waves
  • Combinar GitOps com deploy progressivo

Deploy tradicional: a versão nova substitui a antiga de uma vez. Se vier com bug, 100% dos usuários sofrem juntos. O deploy canary manda a versão nova para uma fatia pequena do tráfego (5%, depois 25%, 50%) e só completa se tudo estiver saudável.

O nome vem dos canários que mineiros levavam para detectar gás: se o canário (a fatia pequena) passa bem, o resto avança. Se dá problema, o rollback atinge poucos usuários.

No Kubernetes isso é feito pelo Argo Rollouts, que substitui o Deployment por um Rollout: você define os passos (setWeight: 10, pause: {duration: 5m}...) e ele controla quantas réplicas novas recebem tráfego.

O ponto forte é a análise automática: o Rollout consulta métricas (taxa de erro no Prometheus, por exemplo) a cada passo. Se os erros passarem do limite, ele faz rollback sozinho — sem ninguém acordar de madrugada.

As sync waves do Argo CD resolvem outra ordem de problema: aplicar recursos na sequência certa. Anote argocd.argoproj.io/sync-wave: "-1" no que deve vir primeiro (ex.: namespace, migração de banco) e ondas maiores para o que depende deles.

Combinando tudo: o pipeline publica a imagem, atualiza a tag no repositório GitOps, o Argo CD sincroniza (na ordem das waves) e o Rollout libera o tráfego gradualmente com análise de métricas.

Quando usar canary? Em serviços com tráfego real e métricas confiáveis. Para apps internas pequenas, um rolling update com readiness probe já basta.

Cuidado: canary exige que a aplicação tolere duas versões rodando juntas (API compatível, migrações de banco para trás-compatíveis).

Na prática

Rollout canary com análise

yaml

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: api
spec:
  replicas: 5
  selector:
    matchLabels: { app: api }
  template:
    metadata:
      labels: { app: api }
    spec:
      containers:
        - name: api
          image: minha/api:1.5.0
  strategy:
    canary:
      steps:
        - setWeight: 10        # 10% do tráfego
        - pause: { duration: 5m }
        - setWeight: 50
        - pause: { duration: 10m }
      analysis:                # rollback automático se errar
        templates:
          - templateName: taxa-de-erro

Sync waves: banco antes da app

yaml

metadata:
  annotations:
    argocd.argoproj.io/sync-wave: "-1"   # migração primeiro
# aplicação sem anotação entra na onda 0, depois

Por que isso importa

Deploy progressivo é o padrão das empresas que fazem dezenas de deploys por dia sem derrubar o serviço.

Erro comum

Ativar canary sem métricas de análise: vira só um deploy lento, sem proteção automática.

Dica de produção

Comece com pesos pequenos e pausas longas; encurte conforme a confiança nas métricas aumentar.

Pergunta de entrevista

Como funciona um deploy canary e o que acontece quando a taxa de erro sobe no meio dele?

Glossário

Canary
Liberação gradual da versão nova para parte do tráfego.
Argo Rollouts
Controlador que faz deploys progressivos no Kubernetes.
Sync wave
Ordem de aplicação de recursos no Argo CD.
Analysis
Checagem de métricas que decide avançar ou voltar.

Conexão com o CloudShop

O checkout do CloudShop usa canary de 10% com análise de erros antes de liberar para todos.

Quiz da aula

  1. 1. Qual a vantagem do canary sobre o deploy direto?

  2. 2. O que a análise de métricas faz num Rollout?

  3. 3. Para que servem sync waves?

Minhas anotações

Salvo automaticamente neste navegador.

AnteriorPróxima