Thomas Pedot
jeudi 20 mars 2025
ArgoCD GitOps Architecture: Multi-Tenant Kubernetes
📚 Part of the Cloud Native & DevOps Expertise series
GitOps Multi-Tenant Architecture Overview
Loading diagram...
Architecture GitOps Multi-Tenant: 1 git push → ArgoCD détecte → Déploie automatiquement 3 tenants isolés en 5 minutes
GitOps : Au-Delà du Buzzword
GitOps n'est pas qu'un terme à la mode. C'est une méthodologie révolutionnaire qui transforme la façon dont nous gérons l'infrastructure et les déploiements.
Définition GitOps
- Git comme source de vérité
- Déploiement déclaratif
- Synchronisation automatique
- Traçabilité complète
Le Défi : Déploiements Multi-Tenant
Comment déployer et gérer plusieurs environnements de données (tenants) avec :
- Isolation complète
- Configuration dynamique
- Zéro intervention manuelle
- Sécurité renforcée
Notre Architecture
Structure des Repositories
Loading diagram...
3 repositories découplés:
- argocd-apps/ - ApplicationSets et Applications ArgoCD
- helm-charts/ - Charts Helm réutilisables
- tenant-configs/ - Configurations spécifiques par équipe
ApplicationSet Multi-Tenant
1# argocd-apps/applicationset.yaml
2apiVersion: argoproj.io/v1alpha1
3kind: ApplicationSet
4metadata:
5 name: dagster-tenants
6spec:
7 generators:
8 - git:
9 repoURL: https://github.com/slamer59/tenant-configs
10 revision: main
11 directories:
12 - path: '*' # Un dossier = un tenant
13
14 template:
15 metadata:
16 name: 'dagster-{{path.basename}}'
17 spec:
18 project: default
19 source:
20 repoURL: https://github.com/slamer59/helm-charts
21 targetRevision: main
22 path: dagster
23 helm:
24 valueFiles:
25 - https://github.com/slamer59/tenant-configs/{{path.basename}}/values.yaml
26 destination:
27 server: https://kubernetes.default.svc
28 namespace: 'dagster-{{path.basename}}'
29 syncPolicy:
30 automated:
31 prune: true
32 selfHeal: trueIsolation Multi-Tenant
Architecture d'Isolation
Loading diagram...
3 niveaux d'isolation:
- Namespace Kubernetes - Isolation logique
- ResourceQuota - Limites CPU/Memory par tenant
- NetworkPolicy - Isolation réseau stricte
Configuration Kubernetes
1# Namespace dédié
2apiVersion: v1
3kind: Namespace
4metadata:
5 name: dagster-team-analytics
6 labels:
7 tenant: team-analytics
8
9---
10# Resource Quotas
11apiVersion: v1
12kind: ResourceQuota
13metadata:
14 name: tenant-quota
15 namespace: dagster-team-analytics
16spec:
17 hard:
18 requests.cpu: "10"
19 requests.memory: "40Gi"
20 persistentvolumeclaims: "10"
21
22---
23# Network Policy (isolation stricte)
24apiVersion: networking.k8s.io/v1
25kind: NetworkPolicy
26metadata:
27 name: tenant-isolation
28 namespace: dagster-team-analytics
29spec:
30 podSelector: {}
31 policyTypes:
32 - Ingress
33 - Egress
34 ingress:
35 - from:
36 - podSelector: {} # Autoriser uniquement au sein du namespace
37 egress:
38 - to:
39 - podSelector: {}
40 - to: # Autoriser accès PostgreSQL partagé
41 - namespaceSelector:
42 matchLabels:
43 name: databasesWorkflow Développeur
Loading diagram...
Steps détaillés:
1# 1. Créer un nouveau tenant
2mkdir tenant-configs/team-sales
3cp tenant-configs/_template/values.yaml tenant-configs/team-sales/
4
5# 2. Personnaliser la configuration
6vim tenant-configs/team-sales/values.yaml
7
8# 3. Commit & Push
9git add tenant-configs/team-sales/
10git commit -m "Add team-sales tenant"
11git push origin main
12
13# 4. ArgoCD détecte automatiquement (< 30s)
14# → Crée Application ArgoCD automatiquement
15# → Déploie Dagster dans namespace dagster-team-sales
16# → ~3min plus tard: tenant opérationnel ✅Métriques de Performance
Avant l'Architecture GitOps
- Déploiement manuel : 2 heures
- Provisioning tenant : Intervention humaine requise
- Taux de déploiement : 5-10 par semaine
- Rollback : Complexe, risqué
Après l'Architecture GitOps
- Déploiement automatique : 5 minutes
- Provisioning tenant : Zéro intervention
- Taux de déploiement : 50+ par jour
- Rollback : Simple, instantané (git revert)
Statistiques Clés:
- 5 tenants actifs
- 99.5% de déploiements réussis
- Temps moyen de rollback : 45 secondes
Related Cloud Native Articles
- Helm Chart Visualization Tool - Maîtriser les dépendances Helm
- Edge Computing with Jetson Xavier - Optimisation Docker pour ARM64
Technologies Clés
- ArgoCD : Synchronisation Git → Kubernetes
- Helm : Templating de charts
- Kubernetes : Orchestration
- Mustache : Templating dynamique
- Git : Source de vérité
Lessons Learned
- Automatisation totale : Moins de tâches manuelles = moins d'erreurs
- Isolation par défaut : Sécurité intégrée, pas ajoutée après coup
- Configuration as Code : Traçabilité et reproductibilité
Conclusion
Cette architecture GitOps n'est pas qu'une solution technique. C'est une transformation culturelle : déployer devient un acte de configuration, pas d'intervention.
Explorez tous mes projets Cloud Native → Cloud Native & DevOps Hub