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

  1. Git comme source de vérité
  2. Déploiement déclaratif
  3. Synchronisation automatique
  4. 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:

  1. argocd-apps/ - ApplicationSets et Applications ArgoCD
  2. helm-charts/ - Charts Helm réutilisables
  3. tenant-configs/ - Configurations spécifiques par équipe

ApplicationSet Multi-Tenant

YAML
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: true

Isolation Multi-Tenant

Architecture d'Isolation

Loading diagram...

3 niveaux d'isolation:

  1. Namespace Kubernetes - Isolation logique
  2. ResourceQuota - Limites CPU/Memory par tenant
  3. NetworkPolicy - Isolation réseau stricte

Configuration Kubernetes

YAML
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: databases

Workflow Développeur

Loading diagram...

Steps détaillés:

Bash
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

Technologies Clés

  • ArgoCD : Synchronisation Git → Kubernetes
  • Helm : Templating de charts
  • Kubernetes : Orchestration
  • Mustache : Templating dynamique
  • Git : Source de vérité

Lessons Learned

  1. Automatisation totale : Moins de tâches manuelles = moins d'erreurs
  2. Isolation par défaut : Sécurité intégrée, pas ajoutée après coup
  3. 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