Kubernetes en production : GitOps, observabilité, GKE
Déployer un service IA par Argo CD depuis Git, le livrer en canary avec analyse Prometheus automatique, l'observer avec kube-prometheus-stack, puis décrire le même déploiement sur GKE Autopilot en Terraform avec Workload Identity vers Vertex AI, sans aucune clé.

Trois mois après la mise en service de l'assistant interne de Ferrand Médical sur Kubernetes, l'équipe plateforme fait le bilan des incidents. Une version qui répondait 200 mais renvoyait des réponses vides est passée en production : les sondes étaient vertes, le rolling update l'a déployée sur tous les pods en 40 secondes. Un collègue a corrigé une variable « en urgence » avec kubectl edit ; personne ne s'en souvenait au déploiement suivant, qui l'a écrasée. Et la clé d'API Gemini, copiée dans trois Secrets de trois namespaces, n'a jamais été changée depuis sa création.
Ce projet traite ces trois causes avec les outils que les équipes plateforme utilisent réellement : Git comme seule source de ce qui tourne, une livraison progressive qui s'arrête seule quand les métriques se dégradent, et une identité de pod qui rend la clé inutile.
Ce que vous livrez
- Une plateforme GitOps locale sur kind : Argo CD 3.5, Argo Rollouts 1.10, kube-prometheus-stack 92.9, un serveur Git dans le cluster.
- Un dépôt de déploiement : le chart et les valeurs par environnement, versionnés dans
gitops-source/et transformés en dépôt git local (gitops-repo/) parmake gitops-init. Déployer, revenir en arrière et corriger se font par commit. - Une livraison canary avec analyse Prometheus : 34 % puis 67 % du trafic, taux de succès mesuré sur les seuls pods canary, annulation automatique sous 95 %.
- Un tableau de bord Grafana, deux alertes d'astreinte (PrometheusRule) et les requêtes PromQL qui servent au diagnostic.
- Un module Terraform GKE Autopilot (réseau privé, Artifact Registry, compte de nœuds dédié, Workload Identity vers Vertex AI) validé et planifié, et la preuve que l'application fonctionne en mode Vertex AI sans clé.
Architecture
flowchart LR
DEV["Équipe (commit)"] -->|"git push"| GIT["Serveur Git (dans le cluster)"]
subgraph KIND["Cluster kind lab-k8s-gitops"]
GIT -->|"lecture toutes les 3 min ou sur refresh"| ACD["Argo CD"]
ACD -->|"helm template + apply, prune, selfHeal"| RO["Rollout inference (canary)"]
ARO["Argo Rollouts"] --> RO
ARO -->|"AnalysisRun : taux de succès du canary"| PROM["Prometheus"]
PROM -->|"ServiceMonitor, toutes les 15 s"| RO
GRAF["Grafana"] --> PROM
ING["Ingress NGINX"] --> RO
end
RO -.->|"mode simulé par défaut ; clé d'API en option"| GEM["API Gemini"]
subgraph GKE["GKE Autopilot (Terraform, plan seulement)"]
POD["Pod inference (KSA assistant/inference)"] -->|"Workload Identity, aucun secret"| VX["Vertex AI europe-west1"]
end
Stack
| Couche | Choix | Pourquoi |
|---|---|---|
| Déploiement | Argo CD v3.5.5 | réconciliation continue, interface lisible par l'astreinte, rendu Helm natif |
| Livraison progressive | Argo Rollouts v1.10.1 | canary avec analyse Prometheus sans maillage de services |
| Observabilité | kube-prometheus-stack 92.9.0 (Prometheus, Grafana) | standard de fait ; sur GKE, Managed Service for Prometheus prend le relais |
| Secrets | External Secrets Operator + Secret Manager (expliqué), Workload Identity (testé en mode ADC) | la meilleure clé est celle qui n'existe pas |
| Cloud | GKE Autopilot, Terraform, provider google 8.7 | facturation au pod, nœuds gérés par Google |
Coût et durée
| Poste | Coût |
|---|---|
| Cluster kind avec toute la plateforme | 0 € ; 4,1 Go de RAM mesurés (leçon 1) |
make e2e | 0 appel modèle : le cluster tourne en mode simulé (backend fake) |
make e2e-vertex | 1 appel Vertex AI Gemini 2.5 Flash, hors cluster |
| Démonstrations canary | 0 appel modèle |
make tf-plan | 0 € : rien n'est créé |
| GKE Autopilot si vous l'appliquez | 0,10 /h pour 3 pods, détail en leçon 6 |
Durée : 8 heures.
Prérequis
- Le projet Déployer un service IA sur Kubernetes avec Helm, ou une pratique équivalente des charts, sondes et HPA.
- Docker avec 6 Go de RAM libres,
kind,kubectl,helm3.8+,git, Terraform 1.9+, Python 3.10+. - Pour la partie GKE et l'appel réel :
gcloudet des identifiants ADC sur un projet avec Vertex AI activé. Une clé Gemini est facultative (sans elle, le cluster répond en mode simulé).
Programme
| Leçon | Ce qui avance | Commande qui marche à la fin |
|---|---|---|
| 1. La plateforme GitOps sur kind | Argo CD, Rollouts, Prometheus, serveur Git, application déclarée | make up puis make status : Synced, Healthy |
| 2. Synchroniser, corriger la dérive, revenir en arrière | déploiement par commit, self-heal mesuré, git revert | make gitops-revert |
| 3. Livraison progressive avec Argo Rollouts | canary 34/67/100, analyse Prometheus, annulation automatique | canary défaillant annulé seul |
| 4. Observer le service avec Prometheus et Grafana | ServiceMonitor, PromQL d'astreinte, tableau de bord | make e2e vert |
| 5. Secrets et identité : External Secrets, Workload Identity | Secret Manager, ESO, Vertex AI sans clé | make e2e-vertex |
| 6. GKE Autopilot en Terraform, et ce que ça coûte | réseau privé, cluster, IAM, coûts, nettoyage | make tf-plan, make cloud-down, make down |
Le dépôt complet est dans files/.
Recursos
Descargar todo (.zip)Referencias
- Argo CD : documentationargo-cd.readthedocs.io
- Argo Rollouts : analyse et livraison progressiveargoproj.github.io
- kube-prometheus-stack (Helm chart)github.com
- GKE : Workload Identity Federation for GKEcloud.google.com
- GKE : tarification (Autopilot, frais de cluster, crédit gratuit)cloud.google.com
- External Secrets Operator : fournisseur Google Secret Managerexternal-secrets.io
- Terraform : google_container_clusterregistry.terraform.io
- OpenGitOps : les quatre principesopengitops.dev