ADR-0010 : ArgoCD comme outil de déploiement GitOps
| Statut | Accepté |
| Date | 2025-10 |
| Décideurs | Équipe Edukit (dev + ops) |
| Périmètre | Pipeline de déploiement continu, cluster K3s |
Contexte
Une fois K3s en place (voir ADR-0009), il faut un moyen d’y déployer les services de façon fiable et traçable. Sans outil dédié, déployer revient à lancer kubectl apply à la main - ce qui ne permet pas de savoir qui a déployé quoi, ni de revenir en arrière facilement.
Les besoins sont :
- Traçabilité : chaque déploiement doit être lié à un commit Git ;
- Détection de dérive : si quelqu’un modifie un déploiement directement dans le cluster (sans passer par Git), on doit le détecter ;
- Rollback facile : revenir à une version précédente doit être simple ;
- Séparation des rôles : les développeurs ne doivent pas avoir accès directement au cluster de production.
Décision
Utiliser ArgoCD pour synchroniser automatiquement les fichiers de configuration Kubernetes depuis Git vers le cluster K3s.
- Les fichiers de déploiement (ce qu’on veut déployer, en quelle quantité, avec quelles variables) sont versionnés dans Git.
- ArgoCD surveille Git et applique les changements sur le cluster dès qu’il en détecte.
- Le pipeline CI (Azure Pipelines) met à jour le numéro de version de l’image dans Git après chaque build ; ArgoCD s’occupe du reste.
- En staging, la synchronisation est automatique. En production, un opérateur valide manuellement le déploiement depuis l’interface ArgoCD.
Conséquences
Bénéfices
- Git comme référence : l’historique Git est le journal de tous les déploiements. On sait exactement ce qui tourne en production et depuis quand.
- Détection de dérive : si le cluster diverge de ce qui est dans Git (modification manuelle, crash), ArgoCD le signale et peut corriger automatiquement.
- Rollback simple : pour revenir en arrière, on revient au commit précédent dans Git - ArgoCD fait le reste.
- Expérience d’équipe : l’équipe connaît déjà ArgoCD, ce qui accélère la mise en place.
- Interface claire : l’interface web d’ArgoCD montre l’état de chaque service, les différences avec Git et l’historique des déploiements.
Coûts et limites
- Les secrets ne vont pas dans Git : ArgoCD ne gère pas les mots de passe et tokens. Ils sont stockés dans Vaultwarden (voir ADR-0013) et créés manuellement comme Kubernetes Secrets - ils ne doivent jamais apparaître dans le dépôt Git.
- Courbe d’apprentissage : la notion d’“application ArgoCD” et ses options de configuration (App of Apps, ApplicationSets) prennent un peu de temps à maîtriser.
- Dépendance à Git : si le dépôt Git est inaccessible, ArgoCD ne peut plus synchroniser. Le cluster continue de fonctionner avec son état actuel, mais aucun nouveau déploiement n’est possible.
Alternatives écartées
- Flux CD : outil GitOps similaire à ArgoCD, maintenu par la CNCF. Les fonctionnalités sont comparables. Écarté uniquement parce que l’équipe est déjà à l’aise avec ArgoCD - changer d’outil n’apporterait rien de plus.
kubectl applydans le pipeline CI : facile à mettre en place, mais sans détection de dérive, sans historique centralisé et sans interface pour visualiser l’état du cluster. Pas adapté à la production.- Helm seul : Helm est un gestionnaire de templates pour les fichiers Kubernetes. Il ne gère pas la réconciliation continue. ArgoCD peut d’ailleurs piloter des charts Helm - les deux sont complémentaires.
- Spinnaker : outil de déploiement continu très complet (déploiements progressifs, blue/green), mais beaucoup trop lourd à installer et opérer pour les besoins d’Edukit.
Références
- ADR-0009 : cluster K3s où ArgoCD déploie les services.
- ADR-0013 : Vaultwarden stocke les secrets de l’équipe ; les Kubernetes Secrets sont créés manuellement à partir de ces valeurs.
- Pipeline CI :
azure-pipelines.yml(met à jour les tags d’image dans Git, ce qui déclenche la synchronisation ArgoCD).