GitOps : tout est dans Git 30 min de lecture

Principes GitOps et outils

Qu'est-ce que GitOps ?

GitOps est un paradigme operationnel ou Git est la source unique de verite pour l'infrastructure et les applications. Tout changement passe par un commit, et un operateur reconcilie automatiquement l'etat desire avec l'etat reel.

Les 4 principes fondamentaux

  • Declaratif : l'ensemble du systeme est decrit de maniere declarative (YAML, HCL, Jsonnet)
  • Versionne : l'etat desire est stocke dans Git, avec historique complet
  • Automatise : les changements approuves sont appliques automatiquement
  • Reconciliation continue : un agent detecte et corrige les derives

ArgoCD : architecture et fonctionnement

ArgoCD est un controleur GitOps pour Kubernetes. Il surveille un depot Git et synchronise les manifestes avec le cluster.

# Installation d'ArgoCD
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

# Creer une Application ArgoCD
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: mon-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://git.example.com/mon-equipe/mon-app.git
    targetRevision: main
    path: k8s/overlays/production
  destination:
    server: https://kubernetes.default.svc
    namespace: production
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true

Flux CD : approche modulaire

Flux v2 utilise des controleurs specialises (source, kustomize, helm, notification) pour une approche plus flexible.

# Bootstrap Flux sur un cluster
flux bootstrap github \
  --owner=mon-org \
  --repository=infra-fleet \
  --path=clusters/production \
  --personal

# GitRepository + Kustomization
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
  name: mon-app
  namespace: flux-system
spec:
  interval: 1m
  url: https://git.example.com/mon-equipe/mon-app.git
  ref:
    branch: main
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
  name: mon-app
  namespace: flux-system
spec:
  interval: 5m
  sourceRef:
    kind: GitRepository
    name: mon-app
  path: ./k8s/overlays/production
  prune: true

Push vs Pull GitOps

  • Push (CI-driven) : le pipeline CI applique les changements (kubectl apply). Moins securise, necessite des credentials dans le CI.
  • Pull (agent-driven) : un operateur dans le cluster tire les changements depuis Git. Plus securise, pas de credentials CI vers le cluster.
Best practice : Privilegiez le modele Pull avec ArgoCD ou Flux. Separarez les depots applicatifs des depots de configuration pour une meilleure gouvernance.