ArgoCD e GitOps
ArgoCD è lo strumento che usiamo per distribuire i servizi sul cluster Kubernetes. Seguiamo un approccio GitOps: tutta la configurazione è salvata in un repository Git e ArgoCD si assicura che lo stato del cluster corrisponda a quello definito nel repository.
Cos'è GitOps
GitOps è un modo di gestire l'infrastruttura in cui:
- Tutto è codice: la configurazione dei servizi è salvata in file YAML nel repository
- Git è la fonte di verità: se è nel repository, è quello che dovrebbe essere sul cluster
- Le modifiche sono tracciate: ogni cambiamento ha un commit, un autore e una descrizione
- Il deploy è automatico: quando il repository cambia, ArgoCD applica le modifiche
Il repository cngei-gitops
Tutta la configurazione dell'infrastruttura si trova nel repository cngei-gitops. La struttura è organizzata per servizio:
cngei-gitops/
├── vaultwarden/ # Configurazione di Vaultwarden
│ ├── deployment.yaml
│ ├── ingress.yaml
│ └── svc.yaml
├── immich/ # Configurazione di Immich
│ ├── deployment.yaml
│ ├── ingress.yaml
│ └── ...
├── nextcloud/ # Configurazione di Nextcloud
├── wordpress/ # Configurazione di WordPress
├── metabase/ # Configurazione di Metabase
├── zulip/ # Configurazione di Zulip
├── uptime-kuma/ # Configurazione di Uptime Kuma
├── umami/ # Configurazione di Umami
├── assemblee/ # Configurazione di Assemblee
├── misc/ # Configurazioni condivise
└── staging/ # Ambiente di staging
Come funziona ArgoCD
- Rilevamento: ArgoCD controlla il repository Git periodicamente
- Confronto: confronta lo stato desiderato (nel repository) con lo stato attuale del cluster
- Sincronizzazione: se ci sono differenze, applica le modifiche al cluster
Aggiungere un servizio
Per aggiungere un nuovo servizio:
- Crea una nuova directory nel repository con il nome del servizio
- Aggiungi i file di configurazione YAML:
- deployment.yaml: definisce il container del servizio
- ingress.yaml: definisce come il servizio è accessibile dall'esterno
- svc.yaml: definisce il servizio interno al cluster
- Fai commit e push sul branch principale
- ArgoCD rileverà le modifiche e distribuirà il servizio automaticamente
Modificare un servizio esistente
- Modifica i file YAML nel repository
- Fai commit e push
- ArgoCD applicherà le modifiche automaticamente
Rollback
Se qualcosa va male dopo una modifica:
- ArgoCD rileva che lo stato del cluster è diverso da quello desiderato
- Puoi eseguire un rollback direttamente dall'interfaccia di ArgoCD
- Il cluster torna allo stato precedente