Module 3e · GitOps avec ArgoCD¶
Objectifs
- Comprendre le principe GitOps : Git = source de vérité, le cluster se synchronise.
- Installer ArgoCD et déployer une app depuis un dépôt Git.
- Observer drift, sync et self-heal en direct, le tout via k9s.
- Durée : ~2 h · Pré-requis : Module 3d.
1. GitOps en une idée¶
Au lieu de kubectl apply à la main, on décrit l'état désiré dans Git. Un opérateur
(ArgoCD) compare en continu Git ↔ cluster et réconcilie.
graph LR
Dev[Commit dans Git] --> Repo[(Dépôt Git)]
Repo -->|surveille| Argo[ArgoCD]
Argo -->|applique / réconcilie| K8s[(Cluster)]
K8s -->|état réel| Argo
| Avantage | Concrètement |
|---|---|
| Traçabilité | tout changement = un commit (qui, quoi, quand) |
| Rollback | git revert → l'état précédent revient |
| Cohérence | le cluster ne dérive pas : ArgoCD corrige (self-heal) |
| Revue | les changements passent par une PR |
2. Installer ArgoCD¶
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
Mot de passe admin initial :
bash
kubectl -n argocd get secret argocd-initial-admin-secret \
-o jsonpath="{.data.password}" | base64 -d; echo
Accès à l'UI (port-forward — ou via k9s, touche Shift-f sur le pod argocd-server) :
```bash kubectl -n argocd port-forward svc/argocd-server 8080:443
puis https://localhost:8080 (user: admin)¶
```
Dans k9s
:ns → argocd, observe les pods se créer. Sur argocd-server, Shift-f pour le
port-forward sans quitter le terminal.
3. Déclarer une application¶
Une Application ArgoCD dit : « surveille ce dépôt/ce chemin et applique-le dans ce namespace ».
yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: demo
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/argoproj/argocd-example-apps
path: guestbook
targetRevision: HEAD
destination:
server: https://kubernetes.default.svc
namespace: demo
syncPolicy:
automated:
prune: true # supprime ce qui n'est plus dans Git
selfHeal: true # corrige toute modif manuelle (drift)
syncOptions:
- CreateNamespace=true
bash
kubectl apply -f application.yaml
kubectl -n argocd get applications
4. Drift & self-heal (le moment magique)¶
Avec selfHeal: true, modifie une ressource à la main et regarde ArgoCD la remettre comme dans Git :
```bash kubectl -n demo scale deploy/guestbook-ui --replicas=5 # drift volontaire
ArgoCD détecte l'écart et ramène au nombre déclaré dans Git¶
```
Sans selfHeal, l'app passe simplement OutOfSync : ArgoCD signale l'écart mais ne corrige
qu'au prochain Sync manuel.
5. Le lien avec ce projet¶
C'est exactement le modèle utilisé pour déployer cette plateforme et les sandboxes : des manifests dans Git, ArgoCD qui réconcilie. Tu retrouveras ce pattern partout en production.
6. Exercices¶
Exercice 3e.1 — Première app GitOps
- Installe ArgoCD, récupère le mot de passe, ouvre l'UI.
- Déploie l'
Applicationguestbook ci-dessus. Observe la synchro dans l'UI et dans k9s.
Exercice 3e.2 — Self-heal
- Avec
selfHeal: true, scale le deployment à la main (replicas=5). - Observe ArgoCD revenir à l'état Git. Combien de temps ? Que dit l'UI (Synced/OutOfSync) ?
- Refais l'expérience sans
selfHeal: l'app reste OutOfSync jusqu'à un Sync manuel.
7. Ce qu'il faut retenir¶
- GitOps : Git = source de vérité, un opérateur réconcilie cluster ↔ Git.
automated.prunesupprime l'obsolète ;selfHealcorrige le drift automatiquement.- OutOfSync = écart détecté ; Synced = cluster conforme à Git.
- Rollback =
git revert. Traçabilité = l'historique Git.
➡️ Suite : Module 4 — Cloud provider (AWS EKS)