ArgoCD: instalação, Application e sync
Objetivos desta aula
- Instalar o ArgoCD no cluster
- Declarar Application
- Operar sync manual e automático
O ArgoCD roda dentro do cluster e observa repositórios Git. Cada Application define origem (repo, revisão, caminho) e destino (cluster, namespace), além da política de sincronização. Instalar é simples; o valor está em configurar bem a política.
Auto-sync aplica mudanças automaticamente. prune remove recursos que saíram do Git — poderoso e perigoso, porque um caminho errado pode apagar objetos. selfHeal desfaz alterações manuais no cluster, garantindo que o Git prevaleça. Em staging, ligue os três; em produção, muitos times mantêm sync manual ou com janela de aprovação.
Use a interface e a CLI para diagnóstico: status de saúde por recurso, diff entre Git e cluster, histórico de sync e logs do controller. É a visão mais clara de 'o que está rodando' que uma equipe pode ter.
1. Componentes do ArgoCD
- repo-server: clona o Git e renderiza Helm/Kustomize
- application-controller: compara o renderizado com o cluster e sincroniza
- argocd-server: API e interface web
2. O objeto Application
Liga uma source (repo, caminho, revisão) a um destination (cluster, namespace). Status importantes: Synced/OutOfSync (igual ao Git?) e Healthy/Degraded/Progressing (está funcionando?).
3. Políticas de sync
automated aplica sozinho; prune apaga o que saiu do Git; selfHeal desfaz mudanças manuais. Comece com automated em staging e aprovação manual em produção, se o time preferir.
4. Ordem e hooks
sync-wave ordena recursos (CRDs e namespaces antes dos apps); hooks PreSync rodam migrações de banco antes da nova versão.
5. App of Apps e ApplicationSet
Uma Application que cria outras Applications permite subir um cluster inteiro a partir de um único apontamento. O ApplicationSet gera Applications por lista, pastas ou clusters.
6. Acesso e projetos
AppProject limita quais repositórios, clusters e tipos de recurso cada time pode usar. Integre SSO e desative o usuário admin local após configurar.
Na prática
Instalar e declarar a Application
bash
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
kubectl -n argocd rollout status deploy/argocd-server
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath='{.data.password}' | base64 -d
kubectl -n argocd port-forward svc/argocd-server 8081:443
argocd login localhost:8081 --username admin --insecure
argocd app list
argocd app get cloudshop-staging
argocd app diff cloudshop-staging
argocd app sync cloudshop-staging
argocd app history cloudshop-stagingNota de segurança: Troque a senha inicial do admin, habilite SSO quando possível e não exponha o argocd-server publicamente sem autenticação forte.
Application declarativa
yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: cloudshop-staging
namespace: argocd
spec:
project: default
source:
repoURL: git@github.com:sua-org/cloudshop-gitops.git
targetRevision: main
path: overlays/staging
destination:
server: https://kubernetes.default.svc
namespace: cloudshop
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
retry:
limit: 3
backoff: { duration: 10s, factor: 2, maxDuration: 2m }Application da API em staging
yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: api-staging
namespace: argocd
spec:
project: cloudshop
source:
repoURL: https://github.com/cloudshop/cloudshop-gitops.git
targetRevision: main
path: apps/api/overlays/staging
destination:
server: https://kubernetes.default.svc
namespace: cloudshop-staging
syncPolicy:
automated: { prune: true, selfHeal: true }
syncOptions: [CreateNamespace=true]Operando pela CLI
bash
argocd app list
argocd app get api-staging # Sync status + Health
argocd app diff api-staging # o que difere do Git
argocd app sync api-staging
argocd app history api-stagingPor que isso importa
Operar ArgoCD é tarefa concreta de vaga de Platform Engineering.
Erro comum
Ligar prune com caminho errado no repositório e apagar recursos do namespace.
Dica de produção
Produção com sync manual ou aprovação; staging com auto-sync total para feedback rápido.
Alerta de segurança
Repositório privado exige credencial de leitura no ArgoCD; use deploy key restrita.
Pergunta de entrevista
O que fazem prune e selfHeal e quais riscos trazem?
Glossário
- Application
- Recurso do ArgoCD que liga um caminho do Git a um destino no cluster.
- selfHeal
- Reverte automaticamente alterações feitas diretamente no cluster.
- Application
- Recurso do ArgoCD que liga uma fonte Git a um destino no cluster.
- selfHeal
- Opção que desfaz automaticamente alterações feitas fora do Git.
- Sync wave
- Número que define a ordem de aplicação dos recursos.
- ApplicationSet
- Gerador de várias Applications a partir de um modelo.
Conexão com o CloudShop
Criar as Applications de staging e produção do CloudShop.
Quiz da aula
1. Alguém editou um Deployment com kubectl. Com selfHeal ativo, o que ocorre?
2. Uma app aparece 'Synced' mas 'Degraded'. O que significa?
3. Para rodar uma migração de banco antes da nova versão, use:
Minhas anotações
Salvo automaticamente neste navegador.