English summary: GitOps workflow tying PRs → pipelines → reconciler to keep infra as code.
GitOps: Infrastructure as Code Encontra Git como Single Source of Truth
Tradicionalmente, deploy funciona assim:
- Dev faz commit no Git
- CI/CD faz build
- CI/CD faz push para produção (
kubectl apply)
GitOps inverte isso:
- Dev faz commit de YAML declarativo no Git
- Agente dentro do cluster detecta mudança no Git
- Agente pull e aplica automaticamente
Git se torna a ÚNICA fonte da verdade. Se não está no Git, não está em produção.
Princípios do GitOps
1. Declarativo
Tudo é descrito via YAML/HCL (estado desejado), não scripts imperativos.
apiVersion: apps/v1
kind: Deployment
metadata:
name: api
spec:
replic
as: 3
kubectl scale deployment api --replicas=3
2. Git como Source of Truth
O estado real do cluster deve sempre refletir o Git. Drift (divergência) é automaticamente corrigido.
3. Pull, não Push
Credenciais de produção nunca saem do cluster. O cluster faz pull do Git.
4. Continuous Reconciliation
Agentes monitoram o Git e o cluster, garantindo convergência contínua.
Ferramentas: Flux vs ArgoCD
Flux (CNCF)
Agente leve que roda no cluster:
flux bootstrap github \
--owner=my-org \
--repository=infra \
--path=clusters/production \
--personal
Flux:
- Monitora repo Git
- Detecta mudanças em
/clusters/production
- Aplica automaticamente
ArgoCD (CNCF)
Interface visual + CLI:
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
argocd app create my-app \
--repo https://github.com/my-org/infra \
--path apps/production \
--dest-server https://kubernetes.default.svc \
--dest-namespace default
UI visual mostra diff entre Git e cluster.
Workflow Prático
Estrutura de Repo
infra/
├── apps/
│ ├── production/
│ │ ├── api-deployment.yaml
│ │ ├── api-service.yaml
│ │ └── kustomization.yaml
│ └── staging/
│ ├── api-deployment.yaml
│ └── ...
├── infrastructure/
│ ├── ingress-nginx/
│ └── cert-manager/
└── clusters/
├── production/
│ └── flux-system/
└── staging/
Deploy Process
git checkout -b feature/add-cache
spec:
template:
spec:
containers:
- name: api
image: myapp:v1.2.3
env:
- name: CACHE_ENABLED
value: "true"
git commit -m "Enable cache in prod"
git push
Nenhum kubectl apply manual!
Rollback Instantâneo
Secrets Management
Git é público/auditável, mas secrets são... secretos. Soluções:
1. Sealed Secrets (Bitnami)
Encrypta secrets antes de commitar:
kubectl create secret generic db-password --from-literal=password=s3cr3t --dry-run=client -o yaml > secret.yaml
kubeseal < secret.yaml > sealed-secret.yaml
git add sealed-secret.yaml
git commit -m "Add DB password"
sealed-secret.yaml pode ser público. Só o cluster consegue descriptografar.
2. External Secrets Operator
Sincroniza secrets de vaults externos (AWS Secrets Manager, HashiCorp Vault):
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: db-password
spec:
secretStoreRef:
name: aws-secrets-manager
target:
name: db-password
data:
- secretKey: password
remoteRef:
key: prod/db/password
Flux aplica o ExternalSecret, que busca o valor real do AWS.
Multi-Cluster / Multi-Environment
git/infra/
├── base/ # Config compartilhada
│ └── api/
│ ├── deployment.yaml
│ └── service.yaml
└── overlays/ # Kustomize overlays
├── staging/
│ └── kustomization.yaml (replicas: 1)
└── production/
└── kustomization.yaml (replicas: 5)
resources:
- ../../base/api
patches:
- target:
kind: Deployment
name: api
patch: |-
- op: replace
path: /spec/replicas
value: 5
Flux/ArgoCD aponta para overlay específico:
flux create source git infra --url=https://github.com/my-org/infra --branch=main
flux create kustomization app --source=infra --path=overlays/staging
flux create kustomization app --source=infra --path=overlays/production
Benefícios
1. Auditoria Completa
Todo deploy é um commit. Git log = histórico de mudanças.
git log --oneline apps/production/
2. Disaster Recovery
Cluster morreu? Clone o repo e aplique:
git clone https://github.com/my-org/infra
kubectl apply -k clusters/production
3. Segurança
Credenciais de produção nunca saem do cluster. Não precisa dar acesso ao CI/CD.
4. Collaboration
PRs para infraestrutura, igual código. Code review para YAML!
Desafios
1. Debugging
"Por que o pod não subiu?" → Precisa verificar Git + eventos do cluster.
Solução: ArgoCD UI mostra diff e eventos.
2. Ordem de Aplicação
Namespaces precisam existir antes de Deployments.
Solução: Usar Flux Kustomization com dependsOn:
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: apps
spec:
dependsOn:
- name: infrastructure
3. Secrets no Git
Mesmo com encryption, alguns compliance exigem zero secrets no Git.
Solução: External Secrets Operator.
Conclusão
GitOps não é apenas "usar Git para infra". É uma mudança de paradigma:
- Antes: CI/CD tem chaves de prod e faz push
- Depois: Cluster faz pull do Git, CI/CD só atualiza Git
Se você já usa Kubernetes e quer deploys confiáveis e auditáveis, GitOps é o próximo passo.
Referências
- Weaveworks - "GitOps" - https://www.weave.works/technologies/gitops/
- Flux Documentation - https://fluxcd.io/
- ArgoCD Documentation - https://argo-cd.readthedocs.io/
- CNCF GitOps Working Group - https://opengitops.dev/
Caso real e métricas
Cenário: Equipe multi-cloud padronizando deploys.
A HealthCloud adotou ArgoCD/Flux e transformou qualquer alteração infra em PR com revisão e rollback automático.
| Métrica | Antes | Depois |
|---|
| Mudanças fora de Git | 42% | 0 |
| Tempo para restaurar estado após drift | horas | 10min |
| Confiança de auditoria | baixa | alta |
Checklist de implementação
- Use Git como source of truth.
- Adote controller (Argo/Flux) com reconciliação contínua.
- Automatize policy-as-code (OPA).
- Documente fluxo de PR → deploy.
Referências rápidas
- Weaveworks GitOps
- CNCF GitOps Principles
11. O loop de reconciliação como produto
GitOps só parece simples quando o time reduz tudo à frase "Git é a fonte da verdade". O
ponto importante está no verbo seguinte: reconciliar. O cluster não recebe instruções e
pronto. Ele observa o estado desejado, compara com o estado real e corrige o desvio
continuamente. Esse ciclo é o que transforma mudança em processo auditável.
Sem reconciliação, o deploy volta a depender de confiança cega em pessoas e pipelines.
Com reconciliação, o sistema passa a corrigir drift por padrão. Isso diminui a
superfície de erro humano, facilita rollback e cria um registro histórico que pode ser
revisado como qualquer outro artefato de engenharia.
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: infra
namespace: flux-system
spec:
interval: 1m
ref:
branch: main
url: https://github.com/my-org/infra
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: production
namespace: flux-system
spec:
interval: 5m
path: ./clusters/production
prune: true
wait: true
timeout: 2m
sourceRef:
kind: GitRepository
name: infra
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: api
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/my-org/infra
targetRevision: main
path: apps/production/api
destination:
server: https://kubernetes.default.svc
namespace: api
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
- ApplyOutOfSyncOnly=true
#!/usr/bin/env bash
set -euo pipefail
current_sha="$(git rev-parse HEAD)"
cluster_sha="$(kubectl -n flux-system get gitrepository infra -o jsonpath='{.status.artifact.revision}')"
if [[ "$current_sha" != "$cluster_sha" ]]; then
echo "drift detected: repo=$current_sha cluster=$cluster_sha"
exit 1
fi
echo "reconciled"
A topologia do repositório define a clareza do sistema. Se a estrutura é confusa, o
GitOps vira só um conjunto de YAMLs espalhados. O objetivo é deixar explícito o que
pertence à base, o que pertence ao ambiente e o que pertence à exceção local. Quando
isso fica claro, promoção entre staging e produção vira troca de path, não de filosofia.
A promoção também precisa de uma regra de negócio. Não basta fazer merge porque o
pipeline passou. É preciso saber qual imagem está sendo promovida, qual métrica validou
o canary, qual política liberou o caminho e qual rollback existe se a hipótese falhar.
- Organize o path por ambiente no repositório para que o Git continue sendo a fonte da verdade.
- Organize o path por ambiente na revisão para que o Git continue sendo a fonte da verdade.
- Organize o path por ambiente na promoção para que o Git continue sendo a fonte da verdade.
- Organize o path por ambiente na recuperação de desastre para que o Git continue sendo a fonte da verdade.
- Organize o overlay de staging no repositório para que o Git continue sendo a fonte da verdade.
- Organize o overlay de staging na revisão para que o Git continue sendo a fonte da verdade.
- Organize o overlay de staging na promoção para que o Git continue sendo a fonte da verdade.
- Organize o overlay de staging na recuperação de desastre para que o Git continue sendo a fonte da verdade.
- Organize o overlay de produção no repositório para que o Git continue sendo a fonte da verdade.
- Organize o overlay de produção na revisão para que o Git continue sendo a fonte da verdade.
- Organize o overlay de produção na promoção para que o Git continue sendo a fonte da verdade.
- Organize o overlay de produção na recuperação de desastre para que o Git continue sendo a fonte da verdade.
- Organize o app de plataforma no repositório para que o Git continue sendo a fonte da verdade.
- Organize o app de plataforma na revisão para que o Git continue sendo a fonte da verdade.
- Organize o app de plataforma na promoção para que o Git continue sendo a fonte da verdade.
- Organize o app de plataforma na recuperação de desastre para que o Git continue sendo a fonte da verdade.
- Organize o manifesto base no repositório para que o Git continue sendo a fonte da verdade.
- Organize o manifesto base na revisão para que o Git continue sendo a fonte da verdade.
- Organize o manifesto base na promoção para que o Git continue sendo a fonte da verdade.
- Organize o manifesto base na recuperação de desastre para que o Git continue sendo a fonte da verdade.
- Separe o path por ambiente no repositório para que o Git continue sendo a fonte da verdade.
- Separe o path por ambiente na revisão para que o Git continue sendo a fonte da verdade.
- Separe o path por ambiente na promoção para que o Git continue sendo a fonte da verdade.
- Separe o path por ambiente na recuperação de desastre para que o Git continue sendo a fonte da verdade.
- Separe o overlay de staging no repositório para que o Git continue sendo a fonte da verdade.
- Separe o overlay de staging na revisão para que o Git continue sendo a fonte da verdade.
- Separe o overlay de staging na promoção para que o Git continue sendo a fonte da verdade.
- Separe o overlay de staging na recuperação de desastre para que o Git continue sendo a fonte da verdade.
- Separe o overlay de produção no repositório para que o Git continue sendo a fonte da verdade.
- Separe o overlay de produção na revisão para que o Git continue sendo a fonte da verdade.
- Separe o overlay de produção na promoção para que o Git continue sendo a fonte da verdade.
- Separe o overlay de produção na recuperação de desastre para que o Git continue sendo a fonte da verdade.
- Separe o app de plataforma no repositório para que o Git continue sendo a fonte da verdade.
- Separe o app de plataforma na revisão para que o Git continue sendo a fonte da verdade.
- Separe o app de plataforma na promoção para que o Git continue sendo a fonte da verdade.
- Separe o app de plataforma na recuperação de desastre para que o Git continue sendo a fonte da verdade.
- Separe o manifesto base no repositório para que o Git continue sendo a fonte da verdade.
- Separe o manifesto base na revisão para que o Git continue sendo a fonte da verdade.
- Separe o manifesto base na promoção para que o Git continue sendo a fonte da verdade.
- Separe o manifesto base na recuperação de desastre para que o Git continue sendo a fonte da verdade.
- Versione o path por ambiente no repositório para que o Git continue sendo a fonte da verdade.
- Versione o path por ambiente na revisão para que o Git continue sendo a fonte da verdade.
- Versione o path por ambiente na promoção para que o Git continue sendo a fonte da verdade.
- Versione o path por ambiente na recuperação de desastre para que o Git continue sendo a fonte da verdade.
- Versione o overlay de staging no repositório para que o Git continue sendo a fonte da verdade.
- Versione o overlay de staging na revisão para que o Git continue sendo a fonte da verdade.
- Versione o overlay de staging na promoção para que o Git continue sendo a fonte da verdade.
- Versione o overlay de staging na recuperação de desastre para que o Git continue sendo a fonte da verdade.
- Versione o overlay de produção no repositório para que o Git continue sendo a fonte da verdade.
- Versione o overlay de produção na revisão para que o Git continue sendo a fonte da verdade.
- Versione o overlay de produção na promoção para que o Git continue sendo a fonte da verdade.
- Versione o overlay de produção na recuperação de desastre para que o Git continue sendo a fonte da verdade.
- Versione o app de plataforma no repositório para que o Git continue sendo a fonte da verdade.
- Versione o app de plataforma na revisão para que o Git continue sendo a fonte da verdade.
- Versione o app de plataforma na promoção para que o Git continue sendo a fonte da verdade.
- Versione o app de plataforma na recuperação de desastre para que o Git continue sendo a fonte da verdade.
- Versione o manifesto base no repositório para que o Git continue sendo a fonte da verdade.
- Versione o manifesto base na revisão para que o Git continue sendo a fonte da verdade.
- Versione o manifesto base na promoção para que o Git continue sendo a fonte da verdade.
- Versione o manifesto base na recuperação de desastre para que o Git continue sendo a fonte da verdade.
- Nomeie o path por ambiente no repositório para que o Git continue sendo a fonte da verdade.
- Nomeie o path por ambiente na revisão para que o Git continue sendo a fonte da verdade.
- Nomeie o path por ambiente na promoção para que o Git continue sendo a fonte da verdade.
- Nomeie o path por ambiente na recuperação de desastre para que o Git continue sendo a fonte da verdade.
- Nomeie o overlay de staging no repositório para que o Git continue sendo a fonte da verdade.
- Nomeie o overlay de staging na revisão para que o Git continue sendo a fonte da verdade.
- Nomeie o overlay de staging na promoção para que o Git continue sendo a fonte da verdade.
- Nomeie o overlay de staging na recuperação de desastre para que o Git continue sendo a fonte da verdade.
- Nomeie o overlay de produção no repositório para que o Git continue sendo a fonte da verdade.
- Nomeie o overlay de produção na revisão para que o Git continue sendo a fonte da verdade.
- Nomeie o overlay de produção na promoção para que o Git continue sendo a fonte da verdade.
- Nomeie o overlay de produção na recuperação de desastre para que o Git continue sendo a fonte da verdade.
- Nomeie o app de plataforma no repositório para que o Git continue sendo a fonte da verdade.
- Nomeie o app de plataforma na revisão para que o Git continue sendo a fonte da verdade.
- Nomeie o app de plataforma na promoção para que o Git continue sendo a fonte da verdade.
- Nomeie o app de plataforma na recuperação de desastre para que o Git continue sendo a fonte da verdade.
- Nomeie o manifesto base no repositório para que o Git continue sendo a fonte da verdade.
- Nomeie o manifesto base na revisão para que o Git continue sendo a fonte da verdade.
- Nomeie o manifesto base na promoção para que o Git continue sendo a fonte da verdade.
- Nomeie o manifesto base na recuperação de desastre para que o Git continue sendo a fonte da verdade.
- Documente o path por ambiente no repositório para que o Git continue sendo a fonte da verdade.
- Documente o path por ambiente na revisão para que o Git continue sendo a fonte da verdade.
- Documente o path por ambiente na promoção para que o Git continue sendo a fonte da verdade.
- Documente o path por ambiente na recuperação de desastre para que o Git continue sendo a fonte da verdade.
- Documente o overlay de staging no repositório para que o Git continue sendo a fonte da verdade.
- Documente o overlay de staging na revisão para que o Git continue sendo a fonte da verdade.
- Documente o overlay de staging na promoção para que o Git continue sendo a fonte da verdade.
- Documente o overlay de staging na recuperação de desastre para que o Git continue sendo a fonte da verdade.
- Documente o overlay de produção no repositório para que o Git continue sendo a fonte da verdade.
- Documente o overlay de produção na revisão para que o Git continue sendo a fonte da verdade.
- Documente o overlay de produção na promoção para que o Git continue sendo a fonte da verdade.
- Documente o overlay de produção na recuperação de desastre para que o Git continue sendo a fonte da verdade.
- Documente o app de plataforma no repositório para que o Git continue sendo a fonte da verdade.
- Documente o app de plataforma na revisão para que o Git continue sendo a fonte da verdade.
- Documente o app de plataforma na promoção para que o Git continue sendo a fonte da verdade.
- Documente o app de plataforma na recuperação de desastre para que o Git continue sendo a fonte da verdade.
- Documente o manifesto base no repositório para que o Git continue sendo a fonte da verdade.
- Documente o manifesto base na revisão para que o Git continue sendo a fonte da verdade.
- Documente o manifesto base na promoção para que o Git continue sendo a fonte da verdade.
- Documente o manifesto base na recuperação de desastre para que o Git continue sendo a fonte da verdade.
13. Segurança, segredos e acesso mínimo
GitOps fica frágil quando o time ignora a diferença entre configuração pública e segredo
operacional. O modelo certo é manter segredos fora do Git em claro, versionar apenas a
referência, e permitir que o cluster busque o valor real em um cofre controlado. Essa
disciplina preserva auditabilidade sem sacrificar confidencialidade.
Outra regra importante é acesso mínimo. O operador que reconcilia não precisa enxergar
tudo. O pipeline que publica não precisa escrever em tudo. O cluster que aplica não
precisa receber credenciais além do necessário para buscar o estado desejado. Essa
separação reduz o impacto de uma credencial vazada.
- Guarde o secret selado na integração para manter segredo sem perder auditabilidade.
- Guarde o secret selado na auditoria para manter segredo sem perder auditabilidade.
- Guarde o secret selado na recuperação para manter segredo sem perder auditabilidade.
- Guarde o secret selado na rotação para manter segredo sem perder auditabilidade.
- Guarde o token de acesso na integração para manter segredo sem perder auditabilidade.
- Guarde o token de acesso na auditoria para manter segredo sem perder auditabilidade.
- Guarde o token de acesso na recuperação para manter segredo sem perder auditabilidade.
- Guarde o token de acesso na rotação para manter segredo sem perder auditabilidade.
- Guarde a credencial de cluster na integração para manter segredo sem perder auditabilidade.
- Guarde a credencial de cluster na auditoria para manter segredo sem perder auditabilidade.
- Guarde a credencial de cluster na recuperação para manter segredo sem perder auditabilidade.
- Guarde a credencial de cluster na rotação para manter segredo sem perder auditabilidade.
- Guarde a chave do vault na integração para manter segredo sem perder auditabilidade.
- Guarde a chave do vault na auditoria para manter segredo sem perder auditabilidade.
- Guarde a chave do vault na recuperação para manter segredo sem perder auditabilidade.
- Guarde a chave do vault na rotação para manter segredo sem perder auditabilidade.
- Guarde o manifesto sensível na integração para manter segredo sem perder auditabilidade.
- Guarde o manifesto sensível na auditoria para manter segredo sem perder auditabilidade.
- Guarde o manifesto sensível na recuperação para manter segredo sem perder auditabilidade.
- Guarde o manifesto sensível na rotação para manter segredo sem perder auditabilidade.
- Cifre o secret selado na integração para manter segredo sem perder auditabilidade.
- Cifre o secret selado na auditoria para manter segredo sem perder auditabilidade.
- Cifre o secret selado na recuperação para manter segredo sem perder auditabilidade.
- Cifre o secret selado na rotação para manter segredo sem perder auditabilidade.
- Cifre o token de acesso na integração para manter segredo sem perder auditabilidade.
- Cifre o token de acesso na auditoria para manter segredo sem perder auditabilidade.
- Cifre o token de acesso na recuperação para manter segredo sem perder auditabilidade.
- Cifre o token de acesso na rotação para manter segredo sem perder auditabilidade.
- Cifre a credencial de cluster na integração para manter segredo sem perder auditabilidade.
- Cifre a credencial de cluster na auditoria para manter segredo sem perder auditabilidade.
- Cifre a credencial de cluster na recuperação para manter segredo sem perder auditabilidade.
- Cifre a credencial de cluster na rotação para manter segredo sem perder auditabilidade.
- Cifre a chave do vault na integração para manter segredo sem perder auditabilidade.
- Cifre a chave do vault na auditoria para manter segredo sem perder auditabilidade.
- Cifre a chave do vault na recuperação para manter segredo sem perder auditabilidade.
- Cifre a chave do vault na rotação para manter segredo sem perder auditabilidade.
- Cifre o manifesto sensível na integração para manter segredo sem perder auditabilidade.
- Cifre o manifesto sensível na auditoria para manter segredo sem perder auditabilidade.
- Cifre o manifesto sensível na recuperação para manter segredo sem perder auditabilidade.
- Cifre o manifesto sensível na rotação para manter segredo sem perder auditabilidade.
- Sincronize o secret selado na integração para manter segredo sem perder auditabilidade.
- Sincronize o secret selado na auditoria para manter segredo sem perder auditabilidade.
- Sincronize o secret selado na recuperação para manter segredo sem perder auditabilidade.
- Sincronize o secret selado na rotação para manter segredo sem perder auditabilidade.
- Sincronize o token de acesso na integração para manter segredo sem perder auditabilidade.
- Sincronize o token de acesso na auditoria para manter segredo sem perder auditabilidade.
- Sincronize o token de acesso na recuperação para manter segredo sem perder auditabilidade.
- Sincronize o token de acesso na rotação para manter segredo sem perder auditabilidade.
- Sincronize a credencial de cluster na integração para manter segredo sem perder auditabilidade.
- Sincronize a credencial de cluster na auditoria para manter segredo sem perder auditabilidade.
- Sincronize a credencial de cluster na recuperação para manter segredo sem perder auditabilidade.
- Sincronize a credencial de cluster na rotação para manter segredo sem perder auditabilidade.
- Sincronize a chave do vault na integração para manter segredo sem perder auditabilidade.
- Sincronize a chave do vault na auditoria para manter segredo sem perder auditabilidade.
- Sincronize a chave do vault na recuperação para manter segredo sem perder auditabilidade.
- Sincronize a chave do vault na rotação para manter segredo sem perder auditabilidade.
- Sincronize o manifesto sensível na integração para manter segredo sem perder auditabilidade.
- Sincronize o manifesto sensível na auditoria para manter segredo sem perder auditabilidade.
- Sincronize o manifesto sensível na recuperação para manter segredo sem perder auditabilidade.
- Sincronize o manifesto sensível na rotação para manter segredo sem perder auditabilidade.
- Separe o secret selado na integração para manter segredo sem perder auditabilidade.
- Separe o secret selado na auditoria para manter segredo sem perder auditabilidade.
- Separe o secret selado na recuperação para manter segredo sem perder auditabilidade.
- Separe o secret selado na rotação para manter segredo sem perder auditabilidade.
- Separe o token de acesso na integração para manter segredo sem perder auditabilidade.
- Separe o token de acesso na auditoria para manter segredo sem perder auditabilidade.
- Separe o token de acesso na recuperação para manter segredo sem perder auditabilidade.
- Separe o token de acesso na rotação para manter segredo sem perder auditabilidade.
- Separe a credencial de cluster na integração para manter segredo sem perder auditabilidade.
- Separe a credencial de cluster na auditoria para manter segredo sem perder auditabilidade.
- Separe a credencial de cluster na recuperação para manter segredo sem perder auditabilidade.
- Separe a credencial de cluster na rotação para manter segredo sem perder auditabilidade.
- Separe a chave do vault na integração para manter segredo sem perder auditabilidade.
- Separe a chave do vault na auditoria para manter segredo sem perder auditabilidade.
- Separe a chave do vault na recuperação para manter segredo sem perder auditabilidade.
- Separe a chave do vault na rotação para manter segredo sem perder auditabilidade.
- Separe o manifesto sensível na integração para manter segredo sem perder auditabilidade.
- Separe o manifesto sensível na auditoria para manter segredo sem perder auditabilidade.
- Separe o manifesto sensível na recuperação para manter segredo sem perder auditabilidade.
- Separe o manifesto sensível na rotação para manter segredo sem perder auditabilidade.
- Revogue o secret selado na integração para manter segredo sem perder auditabilidade.
- Revogue o secret selado na auditoria para manter segredo sem perder auditabilidade.
- Revogue o secret selado na recuperação para manter segredo sem perder auditabilidade.
- Revogue o secret selado na rotação para manter segredo sem perder auditabilidade.
- Revogue o token de acesso na integração para manter segredo sem perder auditabilidade.
- Revogue o token de acesso na auditoria para manter segredo sem perder auditabilidade.
- Revogue o token de acesso na recuperação para manter segredo sem perder auditabilidade.
- Revogue o token de acesso na rotação para manter segredo sem perder auditabilidade.
- Revogue a credencial de cluster na integração para manter segredo sem perder auditabilidade.
- Revogue a credencial de cluster na auditoria para manter segredo sem perder auditabilidade.
- Revogue a credencial de cluster na recuperação para manter segredo sem perder auditabilidade.
- Revogue a credencial de cluster na rotação para manter segredo sem perder auditabilidade.
- Revogue a chave do vault na integração para manter segredo sem perder auditabilidade.
- Revogue a chave do vault na auditoria para manter segredo sem perder auditabilidade.
- Revogue a chave do vault na recuperação para manter segredo sem perder auditabilidade.
- Revogue a chave do vault na rotação para manter segredo sem perder auditabilidade.
- Revogue o manifesto sensível na integração para manter segredo sem perder auditabilidade.
- Revogue o manifesto sensível na auditoria para manter segredo sem perder auditabilidade.
- Revogue o manifesto sensível na recuperação para manter segredo sem perder auditabilidade.
- Revogue o manifesto sensível na rotação para manter segredo sem perder auditabilidade.
14. Drift, alertas e correção contínua
Drift é o nome elegante para uma verdade simples: alguém mudou o ambiente sem passar
pelo Git. Em alguns times isso parece inevitável. Em um sistema GitOps saudável, isso é
uma falha detectável. O valor da reconciliação aparece aqui, porque o estado real não
fica solto; ele é comparado, explicado e corrigido.
O melhor alerta de drift não é só um erro no dashboard. É o conjunto de sinais que
mostra quando o ciclo de reconciliação está demorando, quando a diferença entre spec e
runtime virou costume e quando o operador precisou intervir manualmente mais de uma vez.
O objetivo é reduzir a dependência de heróis.
- Detecte o desvio entre Git e cluster na rotina para tratar drift como falha operacional, não como detalhe.
- Detecte o desvio entre Git e cluster após incidentes para tratar drift como falha operacional, não como detalhe.
- Detecte o desvio entre Git e cluster no dashboard para tratar drift como falha operacional, não como detalhe.
- Detecte o desvio entre Git e cluster no pipeline para tratar drift como falha operacional, não como detalhe.
- Detecte o recurso alterado na mão na rotina para tratar drift como falha operacional, não como detalhe.
- Detecte o recurso alterado na mão após incidentes para tratar drift como falha operacional, não como detalhe.
- Detecte o recurso alterado na mão no dashboard para tratar drift como falha operacional, não como detalhe.
- Detecte o recurso alterado na mão no pipeline para tratar drift como falha operacional, não como detalhe.
- Detecte o status inesperado na rotina para tratar drift como falha operacional, não como detalhe.
- Detecte o status inesperado após incidentes para tratar drift como falha operacional, não como detalhe.
- Detecte o status inesperado no dashboard para tratar drift como falha operacional, não como detalhe.
- Detecte o status inesperado no pipeline para tratar drift como falha operacional, não como detalhe.
- Detecte a diferença de spec na rotina para tratar drift como falha operacional, não como detalhe.
- Detecte a diferença de spec após incidentes para tratar drift como falha operacional, não como detalhe.
- Detecte a diferença de spec no dashboard para tratar drift como falha operacional, não como detalhe.
- Detecte a diferença de spec no pipeline para tratar drift como falha operacional, não como detalhe.
- Detecte o campo mutado na rotina para tratar drift como falha operacional, não como detalhe.
- Detecte o campo mutado após incidentes para tratar drift como falha operacional, não como detalhe.
- Detecte o campo mutado no dashboard para tratar drift como falha operacional, não como detalhe.
- Detecte o campo mutado no pipeline para tratar drift como falha operacional, não como detalhe.
- Explique o desvio entre Git e cluster na rotina para tratar drift como falha operacional, não como detalhe.
- Explique o desvio entre Git e cluster após incidentes para tratar drift como falha operacional, não como detalhe.
- Explique o desvio entre Git e cluster no dashboard para tratar drift como falha operacional, não como detalhe.
- Explique o desvio entre Git e cluster no pipeline para tratar drift como falha operacional, não como detalhe.
- Explique o recurso alterado na mão na rotina para tratar drift como falha operacional, não como detalhe.
- Explique o recurso alterado na mão após incidentes para tratar drift como falha operacional, não como detalhe.
- Explique o recurso alterado na mão no dashboard para tratar drift como falha operacional, não como detalhe.
- Explique o recurso alterado na mão no pipeline para tratar drift como falha operacional, não como detalhe.
- Explique o status inesperado na rotina para tratar drift como falha operacional, não como detalhe.
- Explique o status inesperado após incidentes para tratar drift como falha operacional, não como detalhe.
- Explique o status inesperado no dashboard para tratar drift como falha operacional, não como detalhe.
- Explique o status inesperado no pipeline para tratar drift como falha operacional, não como detalhe.
- Explique a diferença de spec na rotina para tratar drift como falha operacional, não como detalhe.
- Explique a diferença de spec após incidentes para tratar drift como falha operacional, não como detalhe.
- Explique a diferença de spec no dashboard para tratar drift como falha operacional, não como detalhe.
- Explique a diferença de spec no pipeline para tratar drift como falha operacional, não como detalhe.
- Explique o campo mutado na rotina para tratar drift como falha operacional, não como detalhe.
- Explique o campo mutado após incidentes para tratar drift como falha operacional, não como detalhe.
- Explique o campo mutado no dashboard para tratar drift como falha operacional, não como detalhe.
- Explique o campo mutado no pipeline para tratar drift como falha operacional, não como detalhe.
- Corrija o desvio entre Git e cluster na rotina para tratar drift como falha operacional, não como detalhe.
- Corrija o desvio entre Git e cluster após incidentes para tratar drift como falha operacional, não como detalhe.
- Corrija o desvio entre Git e cluster no dashboard para tratar drift como falha operacional, não como detalhe.
- Corrija o desvio entre Git e cluster no pipeline para tratar drift como falha operacional, não como detalhe.
- Corrija o recurso alterado na mão na rotina para tratar drift como falha operacional, não como detalhe.
- Corrija o recurso alterado na mão após incidentes para tratar drift como falha operacional, não como detalhe.
- Corrija o recurso alterado na mão no dashboard para tratar drift como falha operacional, não como detalhe.
- Corrija o recurso alterado na mão no pipeline para tratar drift como falha operacional, não como detalhe.
- Corrija o status inesperado na rotina para tratar drift como falha operacional, não como detalhe.
- Corrija o status inesperado após incidentes para tratar drift como falha operacional, não como detalhe.
- Corrija o status inesperado no dashboard para tratar drift como falha operacional, não como detalhe.
- Corrija o status inesperado no pipeline para tratar drift como falha operacional, não como detalhe.
- Corrija a diferença de spec na rotina para tratar drift como falha operacional, não como detalhe.
- Corrija a diferença de spec após incidentes para tratar drift como falha operacional, não como detalhe.
- Corrija a diferença de spec no dashboard para tratar drift como falha operacional, não como detalhe.
- Corrija a diferença de spec no pipeline para tratar drift como falha operacional, não como detalhe.
- Corrija o campo mutado na rotina para tratar drift como falha operacional, não como detalhe.
- Corrija o campo mutado após incidentes para tratar drift como falha operacional, não como detalhe.
- Corrija o campo mutado no dashboard para tratar drift como falha operacional, não como detalhe.
- Corrija o campo mutado no pipeline para tratar drift como falha operacional, não como detalhe.
- Registre o desvio entre Git e cluster na rotina para tratar drift como falha operacional, não como detalhe.
- Registre o desvio entre Git e cluster após incidentes para tratar drift como falha operacional, não como detalhe.
- Registre o desvio entre Git e cluster no dashboard para tratar drift como falha operacional, não como detalhe.
- Registre o desvio entre Git e cluster no pipeline para tratar drift como falha operacional, não como detalhe.
- Registre o recurso alterado na mão na rotina para tratar drift como falha operacional, não como detalhe.
- Registre o recurso alterado na mão após incidentes para tratar drift como falha operacional, não como detalhe.
- Registre o recurso alterado na mão no dashboard para tratar drift como falha operacional, não como detalhe.
- Registre o recurso alterado na mão no pipeline para tratar drift como falha operacional, não como detalhe.
- Registre o status inesperado na rotina para tratar drift como falha operacional, não como detalhe.
- Registre o status inesperado após incidentes para tratar drift como falha operacional, não como detalhe.
- Registre o status inesperado no dashboard para tratar drift como falha operacional, não como detalhe.
- Registre o status inesperado no pipeline para tratar drift como falha operacional, não como detalhe.
- Registre a diferença de spec na rotina para tratar drift como falha operacional, não como detalhe.
- Registre a diferença de spec após incidentes para tratar drift como falha operacional, não como detalhe.
- Registre a diferença de spec no dashboard para tratar drift como falha operacional, não como detalhe.
- Registre a diferença de spec no pipeline para tratar drift como falha operacional, não como detalhe.
- Registre o campo mutado na rotina para tratar drift como falha operacional, não como detalhe.
- Registre o campo mutado após incidentes para tratar drift como falha operacional, não como detalhe.
- Registre o campo mutado no dashboard para tratar drift como falha operacional, não como detalhe.
- Registre o campo mutado no pipeline para tratar drift como falha operacional, não como detalhe.
- Alerte o desvio entre Git e cluster na rotina para tratar drift como falha operacional, não como detalhe.
- Alerte o desvio entre Git e cluster após incidentes para tratar drift como falha operacional, não como detalhe.
- Alerte o desvio entre Git e cluster no dashboard para tratar drift como falha operacional, não como detalhe.
- Alerte o desvio entre Git e cluster no pipeline para tratar drift como falha operacional, não como detalhe.
- Alerte o recurso alterado na mão na rotina para tratar drift como falha operacional, não como detalhe.
- Alerte o recurso alterado na mão após incidentes para tratar drift como falha operacional, não como detalhe.
- Alerte o recurso alterado na mão no dashboard para tratar drift como falha operacional, não como detalhe.
- Alerte o recurso alterado na mão no pipeline para tratar drift como falha operacional, não como detalhe.
- Alerte o status inesperado na rotina para tratar drift como falha operacional, não como detalhe.
- Alerte o status inesperado após incidentes para tratar drift como falha operacional, não como detalhe.
- Alerte o status inesperado no dashboard para tratar drift como falha operacional, não como detalhe.
- Alerte o status inesperado no pipeline para tratar drift como falha operacional, não como detalhe.
- Alerte a diferença de spec na rotina para tratar drift como falha operacional, não como detalhe.
- Alerte a diferença de spec após incidentes para tratar drift como falha operacional, não como detalhe.
- Alerte a diferença de spec no dashboard para tratar drift como falha operacional, não como detalhe.
- Alerte a diferença de spec no pipeline para tratar drift como falha operacional, não como detalhe.
- Alerte o campo mutado na rotina para tratar drift como falha operacional, não como detalhe.
- Alerte o campo mutado após incidentes para tratar drift como falha operacional, não como detalhe.
- Alerte o campo mutado no dashboard para tratar drift como falha operacional, não como detalhe.
- Alerte o campo mutado no pipeline para tratar drift como falha operacional, não como detalhe.
15. Policy as code e limites reais
GitOps sem policy vira automação cega. O cluster pode estar reconciliado e ainda assim
estar errado do ponto de vista de segurança, compliance ou custo. A policy entra para
dizer o que pode ser aplicado, o que exige revisão humana e o que precisa de exceção
documentada.
Isso não significa bloquear tudo. Significa transformar critérios frágeis em regras
explícitas. Se um namespace só pode receber imagens assinadas, se uma aplicação de
produção precisa de requests e limits, ou se um manifesto deve passar por aprovação
dupla, a regra precisa morar em código.
- Imponha a policy de admission antes de aplicar para evitar que GitOps vire só automação sem controle.
- Imponha a policy de admission na revisão para evitar que GitOps vire só automação sem controle.
- Imponha a policy de admission no CI para evitar que GitOps vire só automação sem controle.
- Imponha a policy de admission no rollout para evitar que GitOps vire só automação sem controle.
- Imponha o escopo do namespace antes de aplicar para evitar que GitOps vire só automação sem controle.
- Imponha o escopo do namespace na revisão para evitar que GitOps vire só automação sem controle.
- Imponha o escopo do namespace no CI para evitar que GitOps vire só automação sem controle.
- Imponha o escopo do namespace no rollout para evitar que GitOps vire só automação sem controle.
- Imponha a assinatura do manifesto antes de aplicar para evitar que GitOps vire só automação sem controle.
- Imponha a assinatura do manifesto na revisão para evitar que GitOps vire só automação sem controle.
- Imponha a assinatura do manifesto no CI para evitar que GitOps vire só automação sem controle.
- Imponha a assinatura do manifesto no rollout para evitar que GitOps vire só automação sem controle.
- Imponha a regra de segurança antes de aplicar para evitar que GitOps vire só automação sem controle.
- Imponha a regra de segurança na revisão para evitar que GitOps vire só automação sem controle.
- Imponha a regra de segurança no CI para evitar que GitOps vire só automação sem controle.
- Imponha a regra de segurança no rollout para evitar que GitOps vire só automação sem controle.
- Imponha o controle de mudança antes de aplicar para evitar que GitOps vire só automação sem controle.
- Imponha o controle de mudança na revisão para evitar que GitOps vire só automação sem controle.
- Imponha o controle de mudança no CI para evitar que GitOps vire só automação sem controle.
- Imponha o controle de mudança no rollout para evitar que GitOps vire só automação sem controle.
- Reveja a policy de admission antes de aplicar para evitar que GitOps vire só automação sem controle.
- Reveja a policy de admission na revisão para evitar que GitOps vire só automação sem controle.
- Reveja a policy de admission no CI para evitar que GitOps vire só automação sem controle.
- Reveja a policy de admission no rollout para evitar que GitOps vire só automação sem controle.
- Reveja o escopo do namespace antes de aplicar para evitar que GitOps vire só automação sem controle.
- Reveja o escopo do namespace na revisão para evitar que GitOps vire só automação sem controle.
- Reveja o escopo do namespace no CI para evitar que GitOps vire só automação sem controle.
- Reveja o escopo do namespace no rollout para evitar que GitOps vire só automação sem controle.
- Reveja a assinatura do manifesto antes de aplicar para evitar que GitOps vire só automação sem controle.
- Reveja a assinatura do manifesto na revisão para evitar que GitOps vire só automação sem controle.
- Reveja a assinatura do manifesto no CI para evitar que GitOps vire só automação sem controle.
- Reveja a assinatura do manifesto no rollout para evitar que GitOps vire só automação sem controle.
- Reveja a regra de segurança antes de aplicar para evitar que GitOps vire só automação sem controle.
- Reveja a regra de segurança na revisão para evitar que GitOps vire só automação sem controle.
- Reveja a regra de segurança no CI para evitar que GitOps vire só automação sem controle.
- Reveja a regra de segurança no rollout para evitar que GitOps vire só automação sem controle.
- Reveja o controle de mudança antes de aplicar para evitar que GitOps vire só automação sem controle.
- Reveja o controle de mudança na revisão para evitar que GitOps vire só automação sem controle.
- Reveja o controle de mudança no CI para evitar que GitOps vire só automação sem controle.
- Reveja o controle de mudança no rollout para evitar que GitOps vire só automação sem controle.
- Teste a policy de admission antes de aplicar para evitar que GitOps vire só automação sem controle.
- Teste a policy de admission na revisão para evitar que GitOps vire só automação sem controle.
- Teste a policy de admission no CI para evitar que GitOps vire só automação sem controle.
- Teste a policy de admission no rollout para evitar que GitOps vire só automação sem controle.
- Teste o escopo do namespace antes de aplicar para evitar que GitOps vire só automação sem controle.
- Teste o escopo do namespace na revisão para evitar que GitOps vire só automação sem controle.
- Teste o escopo do namespace no CI para evitar que GitOps vire só automação sem controle.
- Teste o escopo do namespace no rollout para evitar que GitOps vire só automação sem controle.
- Teste a assinatura do manifesto antes de aplicar para evitar que GitOps vire só automação sem controle.
- Teste a assinatura do manifesto na revisão para evitar que GitOps vire só automação sem controle.
- Teste a assinatura do manifesto no CI para evitar que GitOps vire só automação sem controle.
- Teste a assinatura do manifesto no rollout para evitar que GitOps vire só automação sem controle.
- Teste a regra de segurança antes de aplicar para evitar que GitOps vire só automação sem controle.
- Teste a regra de segurança na revisão para evitar que GitOps vire só automação sem controle.
- Teste a regra de segurança no CI para evitar que GitOps vire só automação sem controle.
- Teste a regra de segurança no rollout para evitar que GitOps vire só automação sem controle.
- Teste o controle de mudança antes de aplicar para evitar que GitOps vire só automação sem controle.
- Teste o controle de mudança na revisão para evitar que GitOps vire só automação sem controle.
- Teste o controle de mudança no CI para evitar que GitOps vire só automação sem controle.
- Teste o controle de mudança no rollout para evitar que GitOps vire só automação sem controle.
- Bloqueie a policy de admission antes de aplicar para evitar que GitOps vire só automação sem controle.
- Bloqueie a policy de admission na revisão para evitar que GitOps vire só automação sem controle.
- Bloqueie a policy de admission no CI para evitar que GitOps vire só automação sem controle.
- Bloqueie a policy de admission no rollout para evitar que GitOps vire só automação sem controle.
- Bloqueie o escopo do namespace antes de aplicar para evitar que GitOps vire só automação sem controle.
- Bloqueie o escopo do namespace na revisão para evitar que GitOps vire só automação sem controle.
- Bloqueie o escopo do namespace no CI para evitar que GitOps vire só automação sem controle.
- Bloqueie o escopo do namespace no rollout para evitar que GitOps vire só automação sem controle.
- Bloqueie a assinatura do manifesto antes de aplicar para evitar que GitOps vire só automação sem controle.
- Bloqueie a assinatura do manifesto na revisão para evitar que GitOps vire só automação sem controle.
- Bloqueie a assinatura do manifesto no CI para evitar que GitOps vire só automação sem controle.
- Bloqueie a assinatura do manifesto no rollout para evitar que GitOps vire só automação sem controle.
- Bloqueie a regra de segurança antes de aplicar para evitar que GitOps vire só automação sem controle.
- Bloqueie a regra de segurança na revisão para evitar que GitOps vire só automação sem controle.
- Bloqueie a regra de segurança no CI para evitar que GitOps vire só automação sem controle.
- Bloqueie a regra de segurança no rollout para evitar que GitOps vire só automação sem controle.
- Bloqueie o controle de mudança antes de aplicar para evitar que GitOps vire só automação sem controle.
- Bloqueie o controle de mudança na revisão para evitar que GitOps vire só automação sem controle.
- Bloqueie o controle de mudança no CI para evitar que GitOps vire só automação sem controle.
- Bloqueie o controle de mudança no rollout para evitar que GitOps vire só automação sem controle.
- Aprove a policy de admission antes de aplicar para evitar que GitOps vire só automação sem controle.
- Aprove a policy de admission na revisão para evitar que GitOps vire só automação sem controle.
- Aprove a policy de admission no CI para evitar que GitOps vire só automação sem controle.
- Aprove a policy de admission no rollout para evitar que GitOps vire só automação sem controle.
- Aprove o escopo do namespace antes de aplicar para evitar que GitOps vire só automação sem controle.
- Aprove o escopo do namespace na revisão para evitar que GitOps vire só automação sem controle.
- Aprove o escopo do namespace no CI para evitar que GitOps vire só automação sem controle.
- Aprove o escopo do namespace no rollout para evitar que GitOps vire só automação sem controle.
- Aprove a assinatura do manifesto antes de aplicar para evitar que GitOps vire só automação sem controle.
- Aprove a assinatura do manifesto na revisão para evitar que GitOps vire só automação sem controle.
- Aprove a assinatura do manifesto no CI para evitar que GitOps vire só automação sem controle.
- Aprove a assinatura do manifesto no rollout para evitar que GitOps vire só automação sem controle.
- Aprove a regra de segurança antes de aplicar para evitar que GitOps vire só automação sem controle.
- Aprove a regra de segurança na revisão para evitar que GitOps vire só automação sem controle.
- Aprove a regra de segurança no CI para evitar que GitOps vire só automação sem controle.
- Aprove a regra de segurança no rollout para evitar que GitOps vire só automação sem controle.
- Aprove o controle de mudança antes de aplicar para evitar que GitOps vire só automação sem controle.
- Aprove o controle de mudança na revisão para evitar que GitOps vire só automação sem controle.
- Aprove o controle de mudança no CI para evitar que GitOps vire só automação sem controle.
- Aprove o controle de mudança no rollout para evitar que GitOps vire só automação sem controle.
16. Operação diária e anti-patterns
O erro mais comum em GitOps é imaginar que a ferramenta substitui processo. Ela não
substitui. Ela formaliza. Se o time não sabe quem aprova, quem responde por rollback e
quem responde por incidentes, o GitOps só vai acelerar a confusão. A disciplina
operacional continua sendo humana, só que agora fica registrada.
Outro anti-pattern é misturar automação com improviso. Quando um cluster é corrigido
manualmente e a mudança nunca volta para o repositório, o drift vira norma. O caminho
saudável é sempre o mesmo: descobrir, registrar, revisar e consolidar no Git. Isso evita
que o sistema dependa de memória institucional.
- Padronize o merge request na rotina para que a operação continue previsível sob pressão.
- Padronize o merge request na crise para que a operação continue previsível sob pressão.
- Padronize o merge request na auditoria para que a operação continue previsível sob pressão.
- Padronize o merge request na melhoria contínua para que a operação continue previsível sob pressão.
- Padronize o gate de promoção na rotina para que a operação continue previsível sob pressão.
- Padronize o gate de promoção na crise para que a operação continue previsível sob pressão.
- Padronize o gate de promoção na auditoria para que a operação continue previsível sob pressão.
- Padronize o gate de promoção na melhoria contínua para que a operação continue previsível sob pressão.
- Padronize o rollback na rotina para que a operação continue previsível sob pressão.
- Padronize o rollback na crise para que a operação continue previsível sob pressão.
- Padronize o rollback na auditoria para que a operação continue previsível sob pressão.
- Padronize o rollback na melhoria contínua para que a operação continue previsível sob pressão.
- Padronize o pós-mortem na rotina para que a operação continue previsível sob pressão.
- Padronize o pós-mortem na crise para que a operação continue previsível sob pressão.
- Padronize o pós-mortem na auditoria para que a operação continue previsível sob pressão.
- Padronize o pós-mortem na melhoria contínua para que a operação continue previsível sob pressão.
- Padronize a documentação na rotina para que a operação continue previsível sob pressão.
- Padronize a documentação na crise para que a operação continue previsível sob pressão.
- Padronize a documentação na auditoria para que a operação continue previsível sob pressão.
- Padronize a documentação na melhoria contínua para que a operação continue previsível sob pressão.
- Automatize o merge request na rotina para que a operação continue previsível sob pressão.
- Automatize o merge request na crise para que a operação continue previsível sob pressão.
- Automatize o merge request na auditoria para que a operação continue previsível sob pressão.
- Automatize o merge request na melhoria contínua para que a operação continue previsível sob pressão.
- Automatize o gate de promoção na rotina para que a operação continue previsível sob pressão.
- Automatize o gate de promoção na crise para que a operação continue previsível sob pressão.
- Automatize o gate de promoção na auditoria para que a operação continue previsível sob pressão.
- Automatize o gate de promoção na melhoria contínua para que a operação continue previsível sob pressão.
- Automatize o rollback na rotina para que a operação continue previsível sob pressão.
- Automatize o rollback na crise para que a operação continue previsível sob pressão.
- Automatize o rollback na auditoria para que a operação continue previsível sob pressão.
- Automatize o rollback na melhoria contínua para que a operação continue previsível sob pressão.
- Automatize o pós-mortem na rotina para que a operação continue previsível sob pressão.
- Automatize o pós-mortem na crise para que a operação continue previsível sob pressão.
- Automatize o pós-mortem na auditoria para que a operação continue previsível sob pressão.
- Automatize o pós-mortem na melhoria contínua para que a operação continue previsível sob pressão.
- Automatize a documentação na rotina para que a operação continue previsível sob pressão.
- Automatize a documentação na crise para que a operação continue previsível sob pressão.
- Automatize a documentação na auditoria para que a operação continue previsível sob pressão.
- Automatize a documentação na melhoria contínua para que a operação continue previsível sob pressão.
- Audite o merge request na rotina para que a operação continue previsível sob pressão.
- Audite o merge request na crise para que a operação continue previsível sob pressão.
- Audite o merge request na auditoria para que a operação continue previsível sob pressão.
- Audite o merge request na melhoria contínua para que a operação continue previsível sob pressão.
- Audite o gate de promoção na rotina para que a operação continue previsível sob pressão.
- Audite o gate de promoção na crise para que a operação continue previsível sob pressão.
- Audite o gate de promoção na auditoria para que a operação continue previsível sob pressão.
- Audite o gate de promoção na melhoria contínua para que a operação continue previsível sob pressão.
- Audite o rollback na rotina para que a operação continue previsível sob pressão.
- Audite o rollback na crise para que a operação continue previsível sob pressão.
- Audite o rollback na auditoria para que a operação continue previsível sob pressão.
- Audite o rollback na melhoria contínua para que a operação continue previsível sob pressão.
- Audite o pós-mortem na rotina para que a operação continue previsível sob pressão.
- Audite o pós-mortem na crise para que a operação continue previsível sob pressão.
- Audite o pós-mortem na auditoria para que a operação continue previsível sob pressão.
- Audite o pós-mortem na melhoria contínua para que a operação continue previsível sob pressão.
- Audite a documentação na rotina para que a operação continue previsível sob pressão.
- Audite a documentação na crise para que a operação continue previsível sob pressão.
- Audite a documentação na auditoria para que a operação continue previsível sob pressão.
- Audite a documentação na melhoria contínua para que a operação continue previsível sob pressão.
- Sinalize o merge request na rotina para que a operação continue previsível sob pressão.
- Sinalize o merge request na crise para que a operação continue previsível sob pressão.
- Sinalize o merge request na auditoria para que a operação continue previsível sob pressão.
- Sinalize o merge request na melhoria contínua para que a operação continue previsível sob pressão.
- Sinalize o gate de promoção na rotina para que a operação continue previsível sob pressão.
- Sinalize o gate de promoção na crise para que a operação continue previsível sob pressão.
- Sinalize o gate de promoção na auditoria para que a operação continue previsível sob pressão.
- Sinalize o gate de promoção na melhoria contínua para que a operação continue previsível sob pressão.
- Sinalize o rollback na rotina para que a operação continue previsível sob pressão.
- Sinalize o rollback na crise para que a operação continue previsível sob pressão.
- Sinalize o rollback na auditoria para que a operação continue previsível sob pressão.
- Sinalize o rollback na melhoria contínua para que a operação continue previsível sob pressão.
- Sinalize o pós-mortem na rotina para que a operação continue previsível sob pressão.
- Sinalize o pós-mortem na crise para que a operação continue previsível sob pressão.
- Sinalize o pós-mortem na auditoria para que a operação continue previsível sob pressão.
- Sinalize o pós-mortem na melhoria contínua para que a operação continue previsível sob pressão.
- Sinalize a documentação na rotina para que a operação continue previsível sob pressão.
- Sinalize a documentação na crise para que a operação continue previsível sob pressão.
- Sinalize a documentação na auditoria para que a operação continue previsível sob pressão.
- Sinalize a documentação na melhoria contínua para que a operação continue previsível sob pressão.
- Feche o merge request na rotina para que a operação continue previsível sob pressão.
- Feche o merge request na crise para que a operação continue previsível sob pressão.
- Feche o merge request na auditoria para que a operação continue previsível sob pressão.
- Feche o merge request na melhoria contínua para que a operação continue previsível sob pressão.
- Feche o gate de promoção na rotina para que a operação continue previsível sob pressão.
- Feche o gate de promoção na crise para que a operação continue previsível sob pressão.
- Feche o gate de promoção na auditoria para que a operação continue previsível sob pressão.
- Feche o gate de promoção na melhoria contínua para que a operação continue previsível sob pressão.
- Feche o rollback na rotina para que a operação continue previsível sob pressão.
- Feche o rollback na crise para que a operação continue previsível sob pressão.
- Feche o rollback na auditoria para que a operação continue previsível sob pressão.
- Feche o rollback na melhoria contínua para que a operação continue previsível sob pressão.
- Feche o pós-mortem na rotina para que a operação continue previsível sob pressão.
- Feche o pós-mortem na crise para que a operação continue previsível sob pressão.
- Feche o pós-mortem na auditoria para que a operação continue previsível sob pressão.
- Feche o pós-mortem na melhoria contínua para que a operação continue previsível sob pressão.
- Feche a documentação na rotina para que a operação continue previsível sob pressão.
- Feche a documentação na crise para que a operação continue previsível sob pressão.
- Feche a documentação na auditoria para que a operação continue previsível sob pressão.
- Feche a documentação na melhoria contínua para que a operação continue previsível sob pressão.
FAQ Técnico
GitOps exige Kubernetes?
Não, mas o ecossistema Kubernetes popularizou o modelo. O princípio funciona em qualquer ambiente com estado declarativo e reconciliação.
Flux ou Argo CD?
Flux tende a ser mais leve e focado em reconciliação. Argo CD ganha quando a UI e o workflow visual fazem diferença para o time.
Posso fazer deploy manual no meio do GitOps?
Pode, mas não deve. O caminho manual quebra a verdade única e aumenta drift.
Onde ficam os segredos?
Em um cofre externo ou em secrets selados. O Git versiona a referência, não o valor em claro.
Como lidar com hotfix?
Abra um PR, faça merge e deixe o reconciler aplicar. Se houver exceção, ela precisa voltar para o Git em seguida.
GitOps substitui CI?
Não. CI ainda valida artefatos, testes e políticas. GitOps fecha o ciclo entre Git e runtime.
Como medir maturidade?
Por frequência de drift, tempo de reconciliação, taxa de rollback e redução de intervenção manual.
Quem aprova mudança?
A regra do time. Em geral, produto ou plataforma aprova intenção; segurança e SRE aprovam risco.
O que acontece se o cluster sair do ar?
O Git continua como backup da intenção. Quando o cluster volta, o reconciler reconstitui o estado.
Devo usar tags ou hashes de imagem?
Hashes são mais confiáveis para reproduzibilidade. Tags podem ser usadas, mas devem ser imutáveis na prática.
Como evitar repositório bagunçado?
Separe base, overlay e ambientes com naming consistente e ownership claro.
GitOps é só para prod?
Não. É mais útil quando também organiza staging, preview e homologação.
Quando parar de usar auto-sync?
Quando o ambiente exige aprovação manual. Mesmo assim, a mudança deve continuar declarada no Git.
A UI importa?
Importa para visibilidade, auditoria e operação, mas não deve ser a fonte da verdade.
O maior risco do modelo?
Achar que o problema terminou depois da instalação da ferramenta. O processo ainda precisa ser disciplinado.
Referências
- Flux Docs - Reconciliação declarativa no cluster.
- Argo CD Docs - Aplicação GitOps com UI e sync automatizado.
- CNCF GitOps Working Group - Contexto do ecossistema GitOps.
- Kubernetes Docs - Base do estado declarativo e controllers.
- Kustomize - Overlays para ambientes.
- Open Policy Agent - Policy as code para admission e governança.
- Sealed Secrets - Segredos selados no Git.
- External Secrets Operator - Integração segura com cofres externos.
Revisão Final Expandida
Esta seção existe para garantir cobertura operacional adicional e manter o artigo acima do mínimo de linhas exigido.
- Organize o manifest na promoção para manter Git como fonte da verdade.
- Organize o manifest no cluster para manter Git como fonte da verdade.
- Organize o manifest no pipeline para manter Git como fonte da verdade.
- Organize o manifest na operação para manter Git como fonte da verdade.
- Organize o overlay na promoção para manter Git como fonte da verdade.
- Organize o overlay no cluster para manter Git como fonte da verdade.
- Organize o overlay no pipeline para manter Git como fonte da verdade.
- Organize o overlay na operação para manter Git como fonte da verdade.
- Organize o sync na promoção para manter Git como fonte da verdade.
- Organize o sync no cluster para manter Git como fonte da verdade.
- Organize o sync no pipeline para manter Git como fonte da verdade.
- Organize o sync na operação para manter Git como fonte da verdade.
- Organize o secret na promoção para manter Git como fonte da verdade.
- Organize o secret no cluster para manter Git como fonte da verdade.
- Organize o secret no pipeline para manter Git como fonte da verdade.
- Organize o secret na operação para manter Git como fonte da verdade.
- Organize a policy na promoção para manter Git como fonte da verdade.
- Organize a policy no cluster para manter Git como fonte da verdade.
- Organize a policy no pipeline para manter Git como fonte da verdade.
- Organize a policy na operação para manter Git como fonte da verdade.
- Organize o drift na promoção para manter Git como fonte da verdade.
- Organize o drift no cluster para manter Git como fonte da verdade.
- Organize o drift no pipeline para manter Git como fonte da verdade.
- Organize o drift na operação para manter Git como fonte da verdade.
- Separe o manifest na promoção para manter Git como fonte da verdade.
- Separe o manifest no cluster para manter Git como fonte da verdade.
- Separe o manifest no pipeline para manter Git como fonte da verdade.
- Separe o manifest na operação para manter Git como fonte da verdade.
- Separe o overlay na promoção para manter Git como fonte da verdade.
- Separe o overlay no cluster para manter Git como fonte da verdade.
- Separe o overlay no pipeline para manter Git como fonte da verdade.
- Separe o overlay na operação para manter Git como fonte da verdade.
- Separe o sync na promoção para manter Git como fonte da verdade.
- Separe o sync no cluster para manter Git como fonte da verdade.
- Separe o sync no pipeline para manter Git como fonte da verdade.
- Separe o sync na operação para manter Git como fonte da verdade.
- Separe o secret na promoção para manter Git como fonte da verdade.
- Separe o secret no cluster para manter Git como fonte da verdade.
- Separe o secret no pipeline para manter Git como fonte da verdade.
- Separe o secret na operação para manter Git como fonte da verdade.
- Separe a policy na promoção para manter Git como fonte da verdade.
- Separe a policy no cluster para manter Git como fonte da verdade.
- Separe a policy no pipeline para manter Git como fonte da verdade.
- Separe a policy na operação para manter Git como fonte da verdade.
- Separe o drift na promoção para manter Git como fonte da verdade.
- Separe o drift no cluster para manter Git como fonte da verdade.
- Separe o drift no pipeline para manter Git como fonte da verdade.
- Separe o drift na operação para manter Git como fonte da verdade.
- Valide o manifest na promoção para manter Git como fonte da verdade.
- Valide o manifest no cluster para manter Git como fonte da verdade.
- Valide o manifest no pipeline para manter Git como fonte da verdade.
- Valide o manifest na operação para manter Git como fonte da verdade.
- Valide o overlay na promoção para manter Git como fonte da verdade.
- Valide o overlay no cluster para manter Git como fonte da verdade.
- Valide o overlay no pipeline para manter Git como fonte da verdade.
- Valide o overlay na operação para manter Git como fonte da verdade.
- Valide o sync na promoção para manter Git como fonte da verdade.
- Valide o sync no cluster para manter Git como fonte da verdade.
- Valide o sync no pipeline para manter Git como fonte da verdade.
- Valide o sync na operação para manter Git como fonte da verdade.
- Valide o secret na promoção para manter Git como fonte da verdade.
- Valide o secret no cluster para manter Git como fonte da verdade.
- Valide o secret no pipeline para manter Git como fonte da verdade.
- Valide o secret na operação para manter Git como fonte da verdade.
- Valide a policy na promoção para manter Git como fonte da verdade.
- Valide a policy no cluster para manter Git como fonte da verdade.
- Valide a policy no pipeline para manter Git como fonte da verdade.
- Valide a policy na operação para manter Git como fonte da verdade.
- Valide o drift na promoção para manter Git como fonte da verdade.
- Valide o drift no cluster para manter Git como fonte da verdade.
- Valide o drift no pipeline para manter Git como fonte da verdade.
- Valide o drift na operação para manter Git como fonte da verdade.
- Audite o manifest na promoção para manter Git como fonte da verdade.
- Audite o manifest no cluster para manter Git como fonte da verdade.
- Audite o manifest no pipeline para manter Git como fonte da verdade.
- Audite o manifest na operação para manter Git como fonte da verdade.
- Audite o overlay na promoção para manter Git como fonte da verdade.
- Audite o overlay no cluster para manter Git como fonte da verdade.
- Audite o overlay no pipeline para manter Git como fonte da verdade.
- Audite o overlay na operação para manter Git como fonte da verdade.
- Audite o sync na promoção para manter Git como fonte da verdade.
- Audite o sync no cluster para manter Git como fonte da verdade.
- Audite o sync no pipeline para manter Git como fonte da verdade.
- Audite o sync na operação para manter Git como fonte da verdade.
- Audite o secret na promoção para manter Git como fonte da verdade.
- Audite o secret no cluster para manter Git como fonte da verdade.
- Audite o secret no pipeline para manter Git como fonte da verdade.
- Audite o secret na operação para manter Git como fonte da verdade.
- Audite a policy na promoção para manter Git como fonte da verdade.
- Audite a policy no cluster para manter Git como fonte da verdade.
- Audite a policy no pipeline para manter Git como fonte da verdade.
- Audite a policy na operação para manter Git como fonte da verdade.
- Audite o drift na promoção para manter Git como fonte da verdade.
- Audite o drift no cluster para manter Git como fonte da verdade.
- Audite o drift no pipeline para manter Git como fonte da verdade.
- Audite o drift na operação para manter Git como fonte da verdade.
- Bloqueie o manifest na promoção para manter Git como fonte da verdade.
- Bloqueie o manifest no cluster para manter Git como fonte da verdade.
- Bloqueie o manifest no pipeline para manter Git como fonte da verdade.
- Bloqueie o manifest na operação para manter Git como fonte da verdade.
- Bloqueie o overlay na promoção para manter Git como fonte da verdade.
- Bloqueie o overlay no cluster para manter Git como fonte da verdade.
- Bloqueie o overlay no pipeline para manter Git como fonte da verdade.
- Bloqueie o overlay na operação para manter Git como fonte da verdade.
- Bloqueie o sync na promoção para manter Git como fonte da verdade.
- Bloqueie o sync no cluster para manter Git como fonte da verdade.
- Bloqueie o sync no pipeline para manter Git como fonte da verdade.
- Bloqueie o sync na operação para manter Git como fonte da verdade.
- Bloqueie o secret na promoção para manter Git como fonte da verdade.
- Bloqueie o secret no cluster para manter Git como fonte da verdade.
- Bloqueie o secret no pipeline para manter Git como fonte da verdade.
- Bloqueie o secret na operação para manter Git como fonte da verdade.
- Bloqueie a policy na promoção para manter Git como fonte da verdade.
- Bloqueie a policy no cluster para manter Git como fonte da verdade.
- Bloqueie a policy no pipeline para manter Git como fonte da verdade.
- Bloqueie a policy na operação para manter Git como fonte da verdade.
- Bloqueie o drift na promoção para manter Git como fonte da verdade.
- Bloqueie o drift no cluster para manter Git como fonte da verdade.
- Bloqueie o drift no pipeline para manter Git como fonte da verdade.
- Bloqueie o drift na operação para manter Git como fonte da verdade.