Chapitre 17
17 - Exercices DevOps
17 - Exercices DevOps
Cours 17 : Exercices DevOps
Niveau Débutant (Exercices 1-10)
Exercice 1 : Dockerfile basique
Objectif : Écrire un Dockerfile pour une application Node.js simple.
Consignes :
- Base :
node:18-alpine - Copier
package.jsonetpackage-lock.json - Installer les dépendances
- Copier le code source
- Exposer le port 3000
- Commande :
npm start
Fichier attendu : Dockerfile
Exercice 2 : Premier déploiement Kubernetes
Objectif : Déployer Nginx avec un Deployment Kubernetes.
Consignes :
- 3 réplicas
- Image :
nginx:1.25 - Port 80
app: nginxen label
Fichier attendu : deployment.yaml
Exercice 3 : Terraform - Provider AWS
Objectif : Créer un bucket S3 avec Terraform.
Consignes :
- Provider AWS (region
eu-west-3) - Bucket S3 avec nom unique
- Tags :
Environment = "dev",ManagedBy = "Terraform"
Fichier attendu : main.tf
Exercice 4 : Pipeline CI simple
Objectif : Créer un workflow GitHub Actions qui s'exécute sur push.
Consignes :
- Déclencheur : push sur
mainetdevelop - Job :
build - Steps : checkout, Node 18,
npm ci,npm test
Fichier attendu : .github/workflows/ci.yml
Exercice 5 : Docker Compose basique
Objectif : Définir une stack web + database avec Docker Compose.
Consignes :
- Service
web: imagenginx:alpine, port 80:80 - Service
db: imagepostgres:15, variablePOSTGRES_PASSWORD=secret - Network :
app-network
Fichier attendu : docker-compose.yml
Exercice 6 : Monitorer avec Prometheus
Objectif : Configurer Prometheus pour scraper une application.
Consignes :
- Job name :
my-app - Target :
localhost:9090 - Intervalle :
15s - Timeout :
10s
Fichier attendu : prometheus.yml
Exercice 7 : Git - Workflow basique
Objectif : Simuler un workflow Git avec branching.
Consignes :
- Créer une branche
feature/add-auth - Ajouter un fichier
auth.py - Committer avec message conventionnel
- Créer une Pull Request vers
main
Fichier attendu : Log des commandes dans git-workflow.md
Exercice 8 : Configuration NGINX
Objectif : Créer une config NGINX pour reverse proxy.
Consignes :
- Écouter sur le port 80
- Proxy vers
http://localhost:3000 - Header
X-Forwarded-For - Rate limiting : 10 req/s
Fichier attendu : nginx.conf
Exercice 9 : Script de backup
Objectif : Écrire un script bash pour sauvegarder une base PostgreSQL.
Consignes :
- Variable :
DB_NAME,DB_USER,DB_PASSWORD - Backup avec
pg_dump - Compression gzip
- Timestamp dans le nom
- Rotation : garder 7 jours
Fichier attendu : backup.sh
Exercice 10 : Healthcheck API
Objectif : Créer un endpoint /health pour une API REST.
Consignes :
- Retourner
{"status": "ok"}en JSON - HTTP 200
- Ajouter un Dockerfile HEALTHCHECK
- Intervalle : 30s, retries: 3
Fichiers attendus : server.js, Dockerfile
Niveau Intermédiaire (Exercices 11-20)
Exercice 11 : Multi-stage Dockerfile
Objectif : Optimiser un Dockerfile Java/Spring Boot avec multi-stage.
Consignes :
- Stage 1 :
maven:3.9-eclipse-temurin-17pour build - Stage 2 :
eclipse-temurin:17-jre-alpinepour runtime - Copier le JAR du stage 1
- Utilisateur non-root
spring:spring - Taille finale < 200MB
Fichier attendu : Dockerfile
Exercice 12 : Service Kubernetes avec ConfigMap
Objectif : Déployer une app avec configuration externe.
Consignes :
- ConfigMap avec
APP_ENV=production,LOG_LEVEL=info - Deployment : 2 réplicas, image
myapp:v1 - Service Type: ClusterIP, port 8080
- Montrer la ConfigMap en variables d'environnement
Fichiers attendus : configmap.yaml, deployment.yaml, service.yaml
Exercice 13 : Module Terraform VPC
Objectif : Créer un module Terraform réutilisable pour VPC.
Consignes :
- Inputs :
cidr_block,name,environment - Outputs :
vpc_id,public_subnets,private_subnets - 2 sous-réseaux publics, 2 privés
- Internet Gateway + NAT Gateway
Fichiers attendus : modules/vpc/main.tf, modules/vpc/variables.tf, modules/vpc/outputs.tf
Exercice 14 : Pipeline CI/CD complète
Objectif : Créer un pipeline avec build, test, build image, push registry.
Consignes :
- Déclencheurs : push, PR sur
main - Jobs : lint, test, build, docker-build
- Cache node_modules et Docker layers
- Docker Hub push avec credentials secrets
Fichier attendu : .github/workflows/ci-cd.yml
Exercice 15 : Monitoring stack Prometheus + Grafana
Objectif : Déployer la stack Prometheus/Grafana avec Docker Compose.
Consignes :
- Prometheus config scrapé
- Grafana avec dashboards pré-configurés
- Node Exporter pour métriques host
- Volume persistants pour données
Fichiers attendus : docker-compose.yml, prometheus/prometheus.yml, grafana/datasources.yml
Exercice 16 : Déploiement Blue/Green avec Kubernetes
Objectif : Mettre en place un déploiement Blue/Green.
Consignes :
- 2 Deployments :
app-blue,app-green - 1 Service qui switch entre les deux via label selector
- Script pour basculer :
switch.sh - Rollback rapide en 5 secondes
Fichiers attendus : blue-deployment.yaml, green-deployment.yaml, service.yaml, switch.sh
Exercice 17 : ArgoCD Application
Objectif : Déployer une app avec ArgoCD en mode GitOps.
Consignes :
- Application ArgoCD sync automatique
- Source : repo GitHub, dossier
k8s/ - Destination : namespace
production - Sync policy : automated + selfHeal
- Health check personnalisé
Fichier attendu : argocd-application.yaml
Exercice 18 : Helm Chart basique
Objectif : Créer un Helm Chart pour une application web.
Consignes :
- templates : deployment.yaml, service.yaml, ingress.yaml
- values.yaml avec image, replicaCount, resources
- values par environnement (dev/prod)
- helpers.tpl pour labels communs
Fichiers attendus : Chart.yaml, values.yaml, templates/
Exercice 19 : Backup et restauration etcd
Objectif : Sauvegarder et restaurer etcd pour un cluster K8s.
Consignes :
- Snapshot etcd avec
etcdctl - Backup vers S3
- Script de restauration
- Vérification de l'intégrité
Fichier attendu : etcd-backup.sh
Exercice 20 : Alerting avec Alertmanager
Objectif : Configurer des alertes Prometheus + Alertmanager.
Consignes :
- Règle : CPU > 80% pendant 5m
- Règle : Pod crash loop
- Règle : Disk > 85%
- Notification : email + Slack
- Inhibitions si maintenance
Fichiers attendus : rules.yml, alertmanager.yml
Niveau Avancé (Exercices 21-30)
Exercice 21 : Service Mesh avec Istio
Objectif : Déployer Istio et configurer le traffic management.
Consignes :
- Installer Istio sur le cluster
- Déployer 2 versions d'une app (v1, v2)
- VirtualService pour canary (90% v1, 10% v2)
- DestinationRule avec circuit breaker
- Kiali pour visualisation
Fichiers attendus : virtual-service.yaml, destination-rule.yaml
Exercice 22 : Terraform - Infrastructure complète AWS
Objectif : Provisionner une infrastructure AWS complète.
Consignes :
- VPC + subnets + NAT
- EKS cluster avec node groups
- RDS PostgreSQL
- ElastiCache Redis
- Load Balancer ALB
- Outputs pour Kubeconfig
Fichiers attendus : infra/main.tf, infra/variables.tf, infra/outputs.tf
Exercice 23 : Chaos Engineering avec Chaos Mesh
Objectif : Introduire des pannes contrôlées sur un cluster K8s.
Consignes :
- Installer Chaos Mesh
- Créer une expérience : kill pod aléatoire
- Créer une expérience : latence réseau (200ms)
- Créer une expérience : CPU stress (80%)
- Dashboard pour visualiser les expériences
Fichiers attendus : chaos/pod-kill.yaml, chaos/network-delay.yaml, chaos/cpu-stress.yaml
Exercice 24 : Pipeline GitOps avancé
Objectif : Mettre en place un pipeline GitOps complet avec promotion d'environnements.
Consignes :
- Branches : dev, staging, prod
- CI build et push image avec tag commit SHA
- CD ArgoCD sync depuis Git
- Promotion : dev → staging → prod via PR
- Validation automatique (tests, security scan)
Fichier attendu : .github/workflows/gitops-pipeline.yml
Exercice 25 : Stack d'observabilité complète (LGTM)
Objectif : Déployer Loki, Grafana, Tempo, Mimir.
Consignes :
- Loki pour logs (distribué)
- Tempo pour traces (distribué tracing)
- Mimir pour metrics (long terme)
- Grafana avec datasources et dashboards
- App instrumentée avec OpenTelemetry
Fichiers attendus : loki-config.yaml, tempo-config.yaml, docker-compose.yml
Exercice 26 : Security scanning dans CI
Objectif : Intégrer Trivy, Snyk, et OPA dans le pipeline.
Consignes :
- Trivy scan de l'image Docker
- Snyk scan des dépendances
- OPA policies pour K8s manifests
- Fail pipeline si vulnérabilité critique
- Rapport de scan en artifact
Fichier attendu : .github/workflows/security.yml
Exercice 27 : Auto-scaling avancé (HPA + VPA + KEDA)
Objectif : Configurer le scaling automatique sur plusieurs dimensions.
Consignes :
- HPA : CPU > 70%, max 20 pods
- VPA : recommandations auto pour requests/limits
- KEDA : scaling basé sur queue RabbitMQ (messages > 100)
- Tests de charge avec k6
Fichiers attendus : hpa.yaml, vpa.yaml, keda-scaledobject.yaml
Exercice 28 : Politiques réseau Kubernetes
Objectif : Implémenter la segmentation réseau avec NetworkPolicies.
Consignes :
- Namespaces : frontend, backend, database
- Deny all ingress/egress par défaut
- Frontend → Backend (port 8080)
- Backend → Database (port 5432)
- Monitoring → Tous (port 9100)
Fichiers attendus : network-policies/
Exercice 29 : Disaster Recovery Plan
Objectif : Créer et tester un plan de reprise après sinistre.
Consignes :
- Backup Velero des ressources K8s
- Snapshot EBS/RDS automatique
- Script de restauration cross-region
- Test de DR trimestriel automatisé
- Runbook documenté
Fichiers attendus : dr-plan.md, velero-schedule.yaml, restore-script.sh
Exercice 30 : FinOps - Cost optimization
Objectif : Analyser et optimiser les coûts cloud.
Consignes :
- Tagging strategy pour cost allocation
- Budget alerts avec AWS Budgets
- Rightsizing recommendations
- Spot instances pour workloads non-critiques
- Rapport de cost saving mensuel
Fichier attendu : finops/analysis.py
Niveau Expert (Exercices 31-40)
Exercice 31 : Custom Kubernetes Operator
Objectif : Créer un opérateur Kubernetes avec Kubebuilder.
Consignes :
- CRD :
Databaseavec spec (engine, version, storage) - Controller : provisionne un StatefulSet + Service + PVC
- Reconcilier : créer/mettre à jour/supprimer
- Tests d'intégration avec envtest
- Déploiement avec OLM
Fichiers attendus : operator/
Exercice 32 : Multi-cluster Kubernetes avec Cilium Cluster Mesh
Objectif : Connecter deux clusters K8s avec Cilium.
Consignes :
- Cluster 1 : EU (Paris)
- Cluster 2 : US (Virginia)
- Cilium ClusterMesh
- Service global entre clusters
- Network policies cross-cluster
- Latence mesurée avec mTLS
Fichiers attendus : cilium-clustermesh.yaml, global-service.yaml
Exercice 33 : Platform Engineering - IDP avec Backstage
Objectif : Créer une Internal Developer Platform avec Backstage.
Consignes :
- Backstage instance avec plugins
- Software Templates pour scaffolding
- TechDocs pour documentation auto
- Scorecards pour quality gates
- Intégration avec ArgoCD, Datadog, PagerDuty
Fichiers attendus : backstage/app-config.yaml, templates/
Exercice 34 : eBPF - Program XDP basique
Objectif : Écrire un programme eBPF pour filtrer le trafic réseau.
Consignes :
- Programme XDP qui drop les paquets sur le port 22
- Compilation avec clang + LLVM
- Load avec iproute2
- Test avec hping3
- Metrics avec map eBPF
Fichiers attendus : xdp-drop.c, Makefile, load.sh
Exercice 35 : Policy as Code avec OPA/Gatekeeper
Objectif : Implémenter des politiques de gouvernance Kubernetes.
Consignes :
- Installer Gatekeeper
- Policy : tous les pods doivent avoir des resource limits
- Policy : pas de privilege escalation
- Policy : images uniquement de registres autorisés
- Policy : labels obligatoires (team, environment)
- Audit et rapports de violation
Fichiers attendus : gatekeeper/constraints/
Exercice 36 : WebAssembly sur Kubernetes
Objectif : Déployer une application WASM avec containerd.
Consignes :
- Application WASM avec TinyGo
- Runtime containerd avec runwasi
- Déploiement K8s avec runtimeClassName
- Performance benchmark vs natif
- Limitations documentées
Fichiers attendus : wasm-app/, wasm-deployment.yaml
Exercice 37 : AIOps - Anomaly detection avec ML
Objectif : Mettre en place une détection d'anomalies sur métriques Prometheus.
Consignes :
- Collecte de métriques historiques
- Modèle de détection (Z-score, Moving Average)
- Alerting intelligent (réduction faux positifs)
- Dashboard Grafana avec anomalies
- Pipeline de retraining automatique
Fichiers attendus : aiops/anomaly-detector.py, aiops/grafana-dashboard.json
Exercice 38 : Zero-downtime migration
Objectif : Migrer une base de données PostgreSQL sans downtime.
Consignes :
- Application avec downtime budget < 5s
- Migration schema sans lock
- Replication logique PostgreSQL
- Dual-writes pendant transition
- Rollback automatisé
- Tests de charge pendant migration
Fichiers attendus : migration/migration-plan.md, migration/scripts/
Exercice 39 : Supply Chain Security (SLSA + Sigstore)
Objectif : Mettre en place la sécurité de la chaîne d'approvisionnement logicielle.
Consignes :
- SLSA Level 3 attestations
- Sigstore/Cosign pour signer les images
- SBOM avec Syft (SPDX format)
- Vérification des attestations dans le pipeline
- Policy d'admission basée sur SLSA level
Fichiers attendus : supply-chain/
Exercice 40 : Plateforme Multi-Cloud complète
Objectif : Concevoir une plateforme DevOps multi-cloud (AWS + GCP + Azure).
Consignes :
- Terraform modules pour chaque provider
- Crossplane pour gestion unifiée
- Service mesh multi-cloud (Consul)
- Observabilité centralisée (Grafana Cloud)
- GitOps cross-cluster
- Cost management unifié
- Disaster recovery cross-cloud
Fichiers attendus : multi-cloud/
Rendu attendu
Chaque exercice doit être livré dans un dossier dédié :
17-Exercices/
├── exercice-01/
│ ├── Dockerfile
│ └── README.md
├── exercice-02/
│ ├── deployment.yaml
│ └── README.md
...
├── exercice-40/
│ └── ...
└── course.md
Validation
- Chaque exercice doit produire le(s) fichier(s) demandé(s)
- Les manifests YAML doivent passer
kubectl apply --dry-run=client - Les fichiers Terraform doivent passer
terraform validate - Les pipelines CI doivent être testés sur un repo de test
- Les images Docker doivent être buildables