Argo CD (GitOps)¶
Referência de deploy declarativo da infraestrutura do GovHub BR via GitOps.
Conceito¶
O Argo CD monitora o repositório continuous-deployment e sincroniza o estado do cluster Kubernetes com os manifests versionados no Git. Em ambientes controlados, evite kubectl apply manual fora do fluxo acordado de GitOps.
sequenceDiagram
participant Dev as Developer
participant Git as GitHub
participant Argo as Argo CD
participant K8s as Kubernetes
Dev->>Git: Push to main
Git->>Argo: Webhook
Argo->>Argo: Detect drift
Argo->>K8s: Sync manifests
K8s-->>Argo: Status: Synced ✓
App-of-Apps¶
Um Application raiz gera e gerencia os Applications filhos:
graph TB
ROOT[App-of-Apps Root] --> PG[PostgreSQL]
ROOT --> MN[MinIO]
ROOT --> AF[Airflow]
ROOT --> SS[Superset]
ROOT --> JH[JupyterHub]
Cada filho pode usar Helm, Kustomize ou plugin kustomized-helm.
Sync Waves¶
Ordem de deploy controlada por anotações:
| Wave | Componentes | Motivo |
|---|---|---|
| Negativa (-1) | PostgreSQL, MinIO | Dependências de infra |
| 0 | Airflow | Orquestrador |
| 1+ | Superset, JupyterHub | Serviços de consumo |
Overlays por Ambiente¶
Arquivos values.*.yaml sobrescrevem apenas o que muda por ambiente (deep-merge):
component/
├── values.yaml # Base (herdado)
├── values.preprod.yaml # Override pré-prod
└── values.prod.yaml # Override produção
Bootstrap¶
- Instalar Argo CD conforme
argocd/README.md - Aplicar
application.<env>.yaml(cria o Application raiz) - Argo CD gera os filhos conforme
app-of-apps/values.<env>.yaml - Sync waves garantem a ordem
# Instalar Argo CD
kubectl apply -n argocd -f argocd/install.yaml
# Aplicar app-of-apps (produção)
kubectl apply -f argocd/application.prod.yaml
Troubleshooting¶
Application OutOfSync¶
Pod CrashLoopBackOff¶
# Ver logs
kubectl logs -n <namespace> <pod> --previous
# Verificar secrets
kubectl get secrets -n <namespace>