Aller au contenu

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

:nsargocd, 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

  1. Installe ArgoCD, récupère le mot de passe, ouvre l'UI.
  2. Déploie l'Application guestbook ci-dessus. Observe la synchro dans l'UI et dans k9s.

Exercice 3e.2 — Self-heal

  1. Avec selfHeal: true, scale le deployment à la main (replicas=5).
  2. Observe ArgoCD revenir à l'état Git. Combien de temps ? Que dit l'UI (Synced/OutOfSync) ?
  3. 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.prune supprime l'obsolète ; selfHeal corrige 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)