Aller au contenu principal

Architecture GitOps


Table des matières

  1. Composants d'une architecture GitOps
  2. Flux de déploiement
  3. Patterns d'architecture
  4. Multi-cluster
  5. Haute disponibilité
  6. Exercices pratiques

1 - Composants d'une architecture GitOps

Vue d'ensemble

Composants clés

ComposantRôleExemples
GitOps ControllerRéconciliationArgoCD, Flux
Git RepositorySource de véritéGitHub, GitLab
Image RegistryStockage imagesDocker Hub, ECR, GCR
Secrets ManagerGestion secretsVault, Sealed Secrets
CI PipelineBuild et testsGitHub 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

RepositoryContenuAccès
App SourceCode applicatifDéveloppeurs
GitOps ConfigManifests K8sÉquipe plateforme
Helm ChartsCharts 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/
AvantagesInconvénients
Vue unifiéePermissions complexes
Atomic commitsRepo volumineux
Dépendances clairesCI/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
AvantagesInconvénients
Permissions finesVue fragmentée
CI/CD rapideCoordination complexe
Équipes autonomesDuplication 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

ComposantHA Strategy
Git RepoGitHub/GitLab HA natif
ArgoCD ServerMultiple replicas + LB
ControllerSharding par cluster
RedisRedis 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
  1. App Source Repository : Contient le code de l'application
  2. 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

🔝 Retour à la table des matières


← Chapitre précédent | Chapitre suivant : Outils GitOps →