0 XP
Módulo 9 · GitOps com ArgoCD

Drift, rollback por Git e promoção entre ambientes

Avançado 40 min+25 XPArgoCDGitKustomize

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 push

Ignorar 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.clusterIP

Nota 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 push

Ignorando 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. 1. Qual a forma correta de rollback em GitOps?

  2. 2. Por que preferir git revert ao rollback pela interface do ArgoCD?

  3. 3. HPA muda as réplicas e o ArgoCD mostra OutOfSync. Solução?

Minhas anotações

Salvo automaticamente neste navegador.

AnteriorPróxima