Exercice 05 : Gérer les Deployments
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Créer un Deployment avec un nombre de réplicas défini
- ✅ Comprendre la relation ReplicaSet → Pod dans un Deployment
- ✅ Scaler horizontalement avec
kubectl scale - ✅ Suivre l'état d'un déploiement avec
kubectl rollout status
Durée estimée : 20 minutes
Difficulté : ⭐⭐☆☆☆ (Débutant+)
Prérequis : minikube démarré, exercices 01-04 terminés
📖 Contexte
Un Pod simple n'est pas résilient : s'il meurt, il n'est pas recréé. Le Deployment résout ce problème en gérant un ReplicaSet qui maintient le nombre souhaité de réplicas en vie. C'est la ressource de base pour déployer des applications sans état en production.
📋 Énoncé
Vous allez créer un Deployment nginx, le scaler, supprimer un pod manuellement pour observer l'auto-réparation, puis exposer l'ensemble avec un Service.
Résultat attendu :
- Un Deployment
nginx-deployavec 3 réplicas stables - Observation de l'auto-réparation après suppression d'un pod
🧭 Déroulement de l'exercice
Tâche 1 : Créer le Deployment
Appliquez le manifest nginx-deploy.yaml (fourni en solution) et vérifiez que 3 pods sont créés.
Indice : Les pods créés par un Deployment ont un nom généré automatiquement :
nginx-deploy-<hash>-<hash>.
Vérification : kubectl get deployment nginx-deploy affiche 3/3 READY.
Tâche 2 : Inspecter la hiérarchie
Listez les ReplicaSets créés par le Deployment, puis observez comment les pods leur appartiennent.
Indice :
kubectl get replicasetsetkubectl get pods -l app=nginx-deploy
Vérification : Un seul ReplicaSet existe avec 3 DESIRED / 3 READY. Les pods ont le label app=nginx-deploy.
Tâche 3 : Observer l'auto-réparation
Supprimez un pod manuellement et observez immédiatement ce qu'il se passe.
Indice :
kubectl delete pod <nom-du-pod>puiskubectl get pods -wpour observer en temps réel.
Vérification : Kubernetes recrée un nouveau pod pour maintenir le nombre de réplicas à 3.
Tâche 4 : Scaler le Deployment
Scalez le Deployment à 5 réplicas, observez les pods créés, puis redescendez à 2.
Indice :
kubectl scale deployment nginx-deploy --replicas=5
Vérification : kubectl get deployment nginx-deploy affiche 5/5 puis 2/2 après le changement.
Tâche 5 : Exposer avec un Service
Créez un Service NodePort associé au Deployment via le label app: nginx-deploy, et testez l'accès.
Indice : Le Service sélectionne les pods via leur label, pas via le Deployment directement.
Vérification : minikube service nginx-svc --url retourne une URL fonctionnelle.
🗂️ Mini-Projet : Deployment avec Service complet
Déployez une stack complète avec un Deployment 3 réplicas et un Service NodePort.
# stack-complete.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp
labels:
app: webapp
spec:
replicas: 3
selector:
matchLabels:
app: webapp
template:
metadata:
labels:
app: webapp
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: webapp-svc
spec:
type: NodePort
selector:
app: webapp
ports:
- port: 80
targetPort: 80
nodePort: 30090Checkpoints :
kubectl get deployment webappaffiche3/3 READYkubectl get replicasetsmontre un RS avec 3 podskubectl delete pod <un-pod-webapp>→ un nouveau pod est recréé automatiquementkubectl scale deployment webapp --replicas=5→5/5 READYcurl $(minikube service webapp-svc --url)retourne la page nginx