
Deploy progressivo com GitOps: canary e sync waves
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-erroSync 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, depoisPor 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. Qual a vantagem do canary sobre o deploy direto?
2. O que a análise de métricas faz num Rollout?
3. Para que servem sync waves?
Minhas anotações
Salvo automaticamente neste navegador.
