Architecture GitOps
Table des matières
- Composants d'une architecture GitOps
- Flux de déploiement
- Patterns d'architecture
- Multi-cluster
- Haute disponibilité
- Exercices pratiques
1 - Composants d'une architecture GitOps
Vue d'ensemble
Composants clés
| Composant | Rôle | Exemples |
|---|---|---|
| GitOps Controller | Réconciliation | ArgoCD, Flux |
| Git Repository | Source de vérité | GitHub, GitLab |
| Image Registry | Stockage images | Docker Hub, ECR, GCR |
| Secrets Manager | Gestion secrets | Vault, Sealed Secrets |
| CI Pipeline | Build et tests | GitHub Actions, Jenkins |
Le GitOps Controller
🔝 Retour à la table des matières
2 - Flux de déploiement
Workflow complet
Étapes détaillées
# 1. Développeur pousse du code
git push origin feature/new-api
# 2. CI Pipeline se déclenche
- Build de l'application
- Tests unitaires et intégration
- Build de l'image Docker
- Push vers le registry
# 3. CI met à jour le repo GitOps
yq -i '.spec.template.spec.containers[0].image = "myapp:sha123"' \
gitops-repo/apps/myapp/deployment.yaml
git commit && git push
# 4. GitOps Agent détecte le changement
# (ArgoCD/Flux poll toutes les 3 minutes par défaut)
# 5. Agent applique les changements
kubectl apply -f deployment.yaml
# 6. Kubernetes tire l'image et déploie
Séparation des repositories
| Repository | Contenu | Accès |
|---|---|---|
| App Source | Code applicatif | Développeurs |
| GitOps Config | Manifests K8s | Équipe plateforme |
| Helm Charts | Charts partagés | Équipe plateforme |
🔝 Retour à la table des matières
3 - Patterns d'architecture
Pattern 1 : Monorepo
gitops-monorepo/
├── apps/
│ ├── frontend/
│ ├── backend/
│ └── worker/
├── infrastructure/
│ ├── monitoring/
│ └── ingress/
└── environments/
├── dev/
├── staging/
└── prod/
| Avantages | Inconvénients |
|---|---|
| Vue unifiée | Permissions complexes |
| Atomic commits | Repo volumineux |
| Dépendances claires | CI/CD plus lent |
Pattern 2 : Polyrepo
# Repos séparés
org/gitops-apps
org/gitops-infra
org/gitops-monitoring
org/gitops-env-prod
org/gitops-env-staging
| Avantages | Inconvénients |
|---|---|
| Permissions fines | Vue fragmentée |
| CI/CD rapide | Coordination complexe |
| Équipes autonomes | Duplication possible |
Pattern 3 : App of Apps
# apps/root-app.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: root-app
spec:
source:
path: apps
destination:
namespace: argocd
---
# apps/frontend.yaml, backend.yaml, etc.
# Chaque fichier est une Application ArgoCD
🔝 Retour à la table des matières
4 - Multi-cluster
Architecture hub-spoke
Configuration ArgoCD multi-cluster
# Enregistrer un cluster
apiVersion: v1
kind: Secret
metadata:
name: prod-cluster
labels:
argocd.argoproj.io/secret-type: cluster
type: Opaque
stringData:
name: prod-cluster
server: https://prod-cluster.example.com
config: |
{
"bearerToken": "...",
"tlsClientConfig": {
"insecure": false,
"caData": "..."
}
}
# Application ciblant un cluster spécifique
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp-prod
spec:
destination:
server: https://prod-cluster.example.com
namespace: default
ApplicationSet pour multi-cluster
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: myapp
spec:
generators:
- list:
elements:
- cluster: dev
url: https://dev.example.com
- cluster: staging
url: https://staging.example.com
- cluster: prod
url: https://prod.example.com
template:
metadata:
name: 'myapp-{{cluster}}'
spec:
destination:
server: '{{url}}'
namespace: default
source:
path: 'apps/myapp/overlays/{{cluster}}'
🔝 Retour à la table des matières
5 - Haute disponibilité
ArgoCD HA
# Installation HA
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/ha/install.yaml
# Composants HA :
# - 3 replicas argocd-server
# - 3 replicas argocd-repo-server
# - 3 replicas argocd-application-controller (avec sharding)
# - Redis HA
Considérations
| Composant | HA Strategy |
|---|---|
| Git Repo | GitHub/GitLab HA natif |
| ArgoCD Server | Multiple replicas + LB |
| Controller | Sharding par cluster |
| Redis | Redis Sentinel/Cluster |
Disaster Recovery
# Backup ArgoCD
argocd admin export > backup.yaml
# Restore
argocd admin import < backup.yaml
# Backup Git = le repo lui-même
git clone --mirror [email protected]:org/gitops-repo.git
🔝 Retour à la table des matières
6 - Exercices pratiques
Quiz
Q1. Quels sont les deux types de repositories dans une architecture GitOps ?
Réponse
- App Source Repository : Contient le code de l'application
- GitOps Config Repository : Contient les manifests Kubernetes déclaratifs
Q2. Qu'est-ce que le pattern "App of Apps" ?
Réponse
Une Application ArgoCD "root" qui déploie d'autres Applications ArgoCD. Permet de gérer toutes les applications depuis un seul point d'entrée.
Exercice : Conception d'architecture
Concevez l'architecture GitOps pour :
- 10 microservices
- 3 environnements
- 2 clusters de production (pour HA)
Solution suggérée
gitops-repo/
├── apps/
│ ├── service1/
│ │ ├── base/
│ │ └── overlays/
│ │ ├── dev/
│ │ ├── staging/
│ │ └── prod/
│ └── ... (10 services)
├── infrastructure/
└── applicationsets/
└── all-services.yaml # ApplicationSet pour multi-cluster
Utiliser ApplicationSet pour déployer automatiquement sur les 2 clusters de prod.
🔝 Retour à la table des matières
Points clés à retenir
- Composants : GitOps Controller, Git Repo, Image Registry, Secrets Manager
- Séparer App Source et GitOps Config repos
- Patterns : Monorepo, Polyrepo, App of Apps
- Multi-cluster : Architecture hub-spoke, ApplicationSet
- HA : Replicas, sharding, Redis Sentinel