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.