Aller au contenu principal

GitOps avec ArgoCD

Comment STOA exploite GitOps pour une gestion de configuration déclarative et auditable dans plusieurs environnements.

Philosophie GitOps

STOA adopte les principes GitOps où Git est la source de vérité unique pour toute la configuration de la plateforme :

  • Configuration Déclarative — L'état souhaité est défini en YAML, pas par des scripts impératifs
  • Git comme Source de Vérité — Toute configuration stockée, versionnée et auditable dans Git
  • Synchronisation Automatique — ArgoCD réconcilie en continu l'état réel du cluster avec l'état souhaité
  • Auto-Réparation — La dérive est détectée automatiquement, l'état du cluster est restauré pour correspondre à Git
  • Piste d'Audit — Chaque modification possède un commit Git avec auteur, horodatage et justification

Architecture

STOA utilise ArgoCD pour la gestion des ressources Kubernetes. Chaque composant géré est une Application ArgoCD :

ComposantApplication ArgoCDPolitique de sync
STOA Gatewaystoa-gatewayAuto-sync + auto-réparation
Control Plane APIcontrol-plane-apiAuto-sync + auto-réparation
Console UIcontrol-plane-uiAuto-sync + auto-réparation
Developer Portalstoa-portalAuto-sync + auto-réparation

Promotion Multi-Environnements (ADR-040)

STOA implémente un modèle « Born GitOps » où les environnements sont des citoyens de première classe, et non une réflexion après coup.

Trois Environnements

EnvironnementModeCouleurObjectif
DéveloppementfullVertSans restriction — créer, modifier, supprimer
StagingfullAmbreValidation pré-production
Productionread-onlyRougeVerrouillé — modifications via promotion uniquement

Flux de Promotion

  1. Développer en dev — accès CRUD complet, itération rapide
  2. Promouvoir vers staging — tests automatisés, validation des intégrations
  3. Approuver pour prod — validation manuelle, le mode lecture seule empêche les modifications directes

Opérations Limitées par Environnement

La Console UI reflète l'environnement courant avec des indicateurs visuels :

  • Point vert — Développement (toutes les actions disponibles)
  • Point ambre — Staging (toutes les actions disponibles)
  • Point rouge + icône cadenas — Production (lecture seule, pas de création/édition/suppression)

Les requêtes API sont limitées à l'environnement : GET /v1/apis?environment=staging retourne uniquement les APIs de staging.

Exemple d'Application ArgoCD

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: stoa-gateway
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/stoa-platform/stoa
targetRevision: main
path: stoa-gateway/k8s
destination:
server: https://kubernetes.default.svc
namespace: stoa-system
syncPolicy:
automated:
prune: true # Supprimer les ressources retirées de Git
selfHeal: true # Annuler les modifications manuelles du cluster
syncOptions:
- CreateNamespace=true

Politiques de Sync

PolitiqueEffet
automated.prune: trueLes ressources supprimées de Git sont retirées du cluster
automated.selfHeal: trueLes modifications manuelles via kubectl sont annulées pour correspondre à Git
syncOptions: CreateNamespaceLe namespace est créé automatiquement s'il est absent

Intégration CI/CD

ArgoCD s'intègre avec le pipeline CI de STOA :

ÉtapeOutilDéclencheur
Push de codeGitHubFusion par le développeur
Pipeline CIGitHub ActionsPush vers main
Build DockerGitHub ActionsSuccès CI
Sync ArgoCDArgoCDChangement d'image détecté
Vérification santéArgoCDSonde post-sync
AlertingPrometheusSanté dégradée

Stratégie de Mise à Jour des Images

STOA utilise imagePullPolicy: Always avec kubectl rollout restart pour déployer de nouvelles images. ArgoCD surveille le déploiement et rapporte le statut de synchronisation.

Détection de Dérive

ArgoCD compare en permanence l'état réel du cluster avec l'état défini dans Git :

StatutSignificationAction
Synced + HealthyLe cluster correspond à Git, les pods tournentAucune
OutOfSyncGit a changé, le cluster n'est pas encore mis à jourLa sync automatique applique les modifications
DegradedLes pods échouent aux vérifications de santéInvestiguer, rollback potentiel
UnknownArgoCD ne peut pas atteindre l'applicationVérifier l'accès au dépôt

Lorsque l'auto-réparation est activée, STOA annule automatiquement toute modification manuelle effectuée via kubectl — garantissant que Git reste la source de vérité unique.

Structure du Dépôt de Configuration

stoa/
├── stoa-gateway/
│ └── k8s/
│ └── deployment.yaml # Manifest K8s du Gateway
├── control-plane-ui/
│ └── k8s/
│ └── deployment.yaml # Manifest de la Console UI
├── portal/
│ └── k8s/
│ └── deployment.yaml # Manifest du Portal
└── charts/
└── stoa-platform/
├── crds/ # Définitions CRD (Tool, ToolSet)
├── templates/ # Templates Helm
└── values.yaml # Valeurs par défaut

Bonnes Pratiques

  • Ne jamais modifier manuellement les ressources du cluster — Toutes les modifications via des PRs Git
  • Utiliser des PRs pour tous les changements — Revue de code + validation CI avant fusion
  • Séparation des environnements — Dev pour l'expérimentation, staging pour la validation, prod via promotion
  • Secrets via Infisical — Ne jamais stocker les secrets dans Git ; utiliser la gestion externe des secrets
  • Surveiller le statut de sync ArgoCD — Dashboard Grafana avec alertes sync/santé
  • Rollback via Gitgit revert le commit problématique, ArgoCD se synchronise automatiquement

En Savoir Plus