tadata
← Retour à l'accueil

Patterns GitOps : Git comme Source Unique de Vérité

#gitops#devops#kubernetes#ci-cd#infrastructure

Le GitOps est un cadre opérationnel qui applique les bonnes pratiques DevOps pour l'automatisation d'infrastructure -- en utilisant Git comme source unique de vérité pour l'infrastructure et les applications déclaratives.

Principes Fondamentaux

  • Déclaratif : l'ensemble du système est décrit de manière déclarative (YAML, HCL, JSON)
  • Versionné et immuable : Git fournit la piste d'audit, la capacité de rollback et le modèle de collaboration
  • Tiré automatiquement : des agents logiciels tirent l'état désiré depuis Git et l'appliquent
  • Réconcilié en continu : les agents détectent la dérive et la corrigent automatiquement

Modèle Push vs Pull

AspectModèle Push (CI/CD traditionnel)Modèle Pull (GitOps)
Qui déploieLe pipeline CI pousse vers le clusterL'agent dans le cluster tire depuis Git
CredentialsLe CI a besoin d'accès au clusterSeul l'agent a besoin d'accès au cluster
Détection de dériveAucune -- l'état peut diverger silencieusementRéconciliation continue
SécuritéSurface d'attaque plus largeRéduite -- pas d'accès externe au cluster nécessaire
OutilsJenkins, GitHub Actions, GitLab CIArgoCD, Flux

Le modèle pull est le standard GitOps car il réduit l'exposition des credentials et garantit que le cluster correspond à l'état Git.

tadata

Actors: Git host, argocd-server, repo-server, app-controller, Kubernetes API

  1. Git host → argocd-server webhook: push to main, revision 7be03d1
  2. argocd-server → app-controller refresh apps tracking that repo
  3. app-controller → repo-server render repo@revision, path
  4. repo-server → Git host fetch; check GPG signature
  5. repo-server ⇠ app-controller rendered YAML (cached in redis)
  6. app-controller → Kubernetes API diff live vs desired; apply by sync wave, prune
  7. Kubernetes API ⇠ app-controller admission result, health
Une synchronisation Argo CD après une pull request mergée (avec un webhook ; sinon le polling de 3 minutes déclenche l'étape 2). Rien ne se connecte au cluster en entrée depuis la CI.

Extrait de la fiche « GitOps and Continuous Delivery Security » · Demander la fiche complète

ArgoCD vs Flux

FonctionnalitéArgoCDFlux
InterfaceUI web riche avec visualisationCLI d'abord, UI Weave GitOps optionnelle
ArchitectureCentralisée, multi-cluster depuis une instanceDécentralisée, agent par cluster
Multi-tenancyProjets et RBAC intégrésRBAC natif Kubernetes
Support HelmRend les charts Helm, stocke les manifestsContrôleur Helm natif
KustomizeSupport intégréSupport intégré
NotificationsMoteur de notification intégréContrôleur de notification
CommunautéCNCF diplômé, plus grande communautéCNCF diplômé, écosystème solide
Idéal pourÉquipes voulant de la visibilité et une UIÉquipes préférant une approche légère et composable

Décision : ArgoCD pour les équipes qui valorisent un dashboard visuel et une gestion centralisée. Flux pour les équipes qui préfèrent les primitives natives Kubernetes et l'opération décentralisée.

Promotion Multi-Environnements

Un flux de promotion GitOps typique :

tadata

1 dev/ → 2 staging/ → 3 production/

Flux de commits Git : promotion par pull request

Stratégies :

  • Par répertoire : répertoires séparés par environnement (environments/dev/, environments/prod/)
  • Par branche : branches d'environnement (main = prod, staging, dev) -- moins recommandé à cause de la complexité de merge
  • Par overlays : overlays Kustomize avec une base partagée et des patches spécifiques par environnement

Mécanismes de promotion :

  • PR de la config dev vers la config staging
  • Promotion automatique après des smoke tests réussis
  • Mises à jour de tags d'images via les contrôleurs d'automatisation d'images (Flux) ou image updater (ArgoCD)
tadata
platform-deploy/ (config repo)/ .github/CODEOWNERS clusters/prod/** needs platform review .sops.yaml which keys encrypt which paths apps/ payments/ base/ Deployment, Service, NetworkPolicy overlays/ staging/ image tag, replicas prod/ promotion = PR changing the tag here infrastructure/ ingress, cert-manager, Kyverno policies clusters/ staging/ Argo CD Applications or Flux Kustomizations prod/ root "app of apps": controls everything projects/ Argo CD AppProjects, tenant boundaries
platform-deploy/ (config repo)/ .github/CODEOWNERS clusters/prod/** needs platform review .sops.yaml which keys encrypt which paths apps/ payments/ base/ Deployment, Service, NetworkPolicy overlays/ staging/ image tag, replicas prod/ promotion = PR changing the tag here infrastructure/ ingress, cert-manager, Kyverno policies clusters/ staging/ Argo CD Applications or Flux Kustomizations prod/ root "app of apps": controls everything projects/ Argo CD AppProjects, tenant boundaries
Une organisation courante : le code applicatif et la CI vivent dans les dépôts d'application ; le dépôt de configuration ne contient que l'état désiré. Des répertoires par environnement (et non des branches) font d'une promotion un diff visible dans une seule pull request ; CODEOWNERS dirige les chemins de production vers l'équipe plateforme.

Extrait de la fiche « GitOps and Continuous Delivery Security » · Demander la fiche complète

Gestion des Secrets en GitOps

Les secrets dans les repositories Git nécessitent un traitement spécial :

ApprocheFonctionnementCompromis
Sealed SecretsChiffrer les secrets avec la clé publique du cluster, seul le cluster peut déchiffrerSimple, mais spécifique au cluster
SOPS (Mozilla)Chiffrer avec AWS KMS, GCP KMS, ou clés PGPMulti-cloud, compatible git-diff
External Secrets OperatorSynchroniser les secrets depuis Vault, AWS SM, etc. vers K8sSecrets jamais dans Git, mais ajoute une dépendance
Vault Agent InjectorInjecter les secrets au runtime du podPas de secrets K8s du tout, mais plus complexe

Recommandation : External Secrets Operator pour la plupart des équipes -- les secrets restent dans un vault dédié, jamais dans Git, et se synchronisent automatiquement.

Détection de Derive et Reconciliation

Les agents GitOps comparent en continu l'état désiré (Git) avec l'état réel (cluster) :

  • Auto-sync : appliquer automatiquement les changements quand une dérive est détectée
  • Sync manuel : nécessiter une approbation humaine avant d'appliquer (plus sûr pour la production)
  • Fenêtres de sync : n'autoriser les syncs que pendant les fenêtres de maintenance
  • Visualisation des diffs : ArgoCD montre exactement ce qui va changer avant le sync
  • Health checks : vérifier la santé de l'application après le sync, auto-rollback en cas d'échec
tadata
Synced OutOfSync Syncing SyncFailed new commit ormanual edit auto-sync orSync button all applied admissiondeny, badYAML retry withbackoff
Synced OutOfSync Syncing SyncFailed new commit ormanual edit auto-sync orSync button all applied admissiondeny, badYAML retry withbackoff
Statut de synchronisation Argo CD d'une Application (la santé est suivie séparément : Healthy, Progressing, Degraded, Suspended, Missing, Unknown). Avec selfHeal: true, le contrôleur réapplique git dès qu'un objet live dérive.

Extrait de la fiche « GitOps and Continuous Delivery Security » · Demander la fiche complète

Ressources

Nous utilisons des cookies analytiques pour améliorer votre expérience. Aucune donnée personnelle n'est collectée.