Drift, rollback por Git e promoção entre ambientes
Objetivos desta aula
- Diagnosticar OutOfSync
- Reverter por Git
- Promover versão de staging para produção
OutOfSync significa divergência entre Git e cluster. As causas se dividem em três: alguém alterou o cluster à mão, um controller mutou o objeto (injeção de sidecar, defaults) ou o Git mudou e o sync ainda não ocorreu. argocd app diff aponta exatamente o campo — e é por onde começa a investigação.
Quando o campo é legitimamente gerenciado por outro componente, configure ignoreDifferences para aquele caminho específico; ignorar amplamente esconde problemas reais. Nunca 'resolva' OutOfSync desligando o self-heal.
Rollback em GitOps é git revert do commit que alterou a tag da imagem: o cluster volta ao estado anterior e o histórico registra o que houve. Promoção entre ambientes é o mesmo mecanismo: um PR que atualiza a tag no overlay de produção com a versão já validada em staging.
1. O que é drift
Drift é a diferença entre o que está no Git e o que roda no cluster — normalmente causada por um kubectl edit "só para testar". Com selfHeal ligado, o ArgoCD desfaz em segundos; sem ele, a app fica OutOfSync e alerta.
2. Diferenças legítimas
Alguns campos mudam sozinhos (réplicas controladas pelo HPA, campos preenchidos por webhooks). Use ignoreDifferences para não brigar com eles.
3. Rollback do jeito certo
Rollback pela interface do ArgoCD é temporário e desliga o auto-sync. O caminho definitivo é git revert: o histórico fica correto e o próximo sync não traz o erro de volta.
4. Promoção entre ambientes
Promover é copiar a mesma versão (tag ou digest da imagem) de staging para prod via pull request. Artefato imutável: o que foi testado é exatamente o que vai para produção.
5. Entregas progressivas
Argo Rollouts troca o Deployment por um Rollout com canary (10% → 50% → 100%) e análise automática de métricas; se a taxa de erro sobe, aborta sozinho.
Na prática
Diagnóstico, ignoreDifferences e rollback
bash
argocd app get cloudshop-producao
argocd app diff cloudshop-producao
kubectl describe deploy cloudshop-api -n cloudshop | tail -20
# rollback: reverter o commit que subiu a versao ruim
git -C cloudshop-gitops log --oneline -5 -- overlays/producao
git -C cloudshop-gitops revert 4c1f8ab
git -C cloudshop-gitops push
argocd app sync cloudshop-producao
argocd app history cloudshop-producao
# promocao de staging para producao
cd cloudshop-gitops/overlays/producao
kustomize edit set image ghcr.io/sua-org/cloudshop/api=ghcr.io/sua-org/cloudshop/api:v1.2.0
git commit -am "chore(prod): promove api para v1.2.0" && git pushIgnorar campo mutado por outro controller
yaml
spec:
ignoreDifferences:
- group: apps
kind: Deployment
name: cloudshop-api
jsonPointers:
- /spec/replicas # gerenciado pelo HPA
- group: ""
kind: Service
jqPathExpressions:
- .spec.clusterIPNota de segurança: Não use ignoreDifferences em campos de segurança (securityContext, imagem): esconderia alteração maliciosa.
Promovendo e revertendo com Git
bash
# promover a versão testada em staging para prod
cd cloudshop-gitops/apps/api/overlays/prod
kustomize edit set image ghcr.io/cloudshop/api=ghcr.io/cloudshop/api:1.5.0
git checkout -b promote/api-1.5.0 && git commit -am "promote(prod): api 1.5.0"
gh pr create --title "Promove api 1.5.0 para prod" --body "Validado em staging"
# deu problema? reverter o merge:
git revert -m 1 <sha-do-merge> && git pushIgnorando réplicas gerenciadas pelo HPA
yaml
spec:
ignoreDifferences:
- group: apps
kind: Deployment
jsonPointers: [/spec/replicas]Por que isso importa
Rollback por revert é a demonstração mais clara de valor do GitOps em um incidente.
Erro comum
Corrigir produção com kubectl edit; o self-heal desfaz e o problema volta em segundos.
Dica de produção
Promoção sempre por PR com a versão exata já validada em staging — nunca rebuild para produção.
Pergunta de entrevista
Como você faria rollback de uma versão ruim em um cluster gerido por ArgoCD?
Glossário
- OutOfSync
- Estado em que o cluster difere do estado declarado no Git.
- promoção
- Levar uma versão já validada de um ambiente para o próximo.
- Drift
- Divergência entre o estado declarado no Git e o real no cluster.
- Promoção
- Levar o mesmo artefato validado de um ambiente para o próximo.
- Canary
- Liberar a nova versão para uma fração pequena do tráfego antes de todos.
Conexão com o CloudShop
Promover a v1.2.0 do CloudShop de staging para produção via PR.
Quiz da aula
1. Qual a forma correta de rollback em GitOps?
2. Por que preferir git revert ao rollback pela interface do ArgoCD?
3. HPA muda as réplicas e o ArgoCD mostra OutOfSync. Solução?
Minhas anotações
Salvo automaticamente neste navegador.