Exercice 05 : Mettre en place l'auto-scaling horizontal (HPA)
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Activer
metrics-serverdans minikube - ✅ Créer un HPA avec
kubectl autoscale - ✅ Définir un HPA via manifest YAML avec seuil CPU
- ✅ Simuler une charge et observer le scaling automatique
Durée estimée : 30 minutes
Difficulté : ⭐⭐⭐⭐☆ (Avancé)
Prérequis : minikube démarré, metrics-server activé, exercice 04 terminé
📖 Contexte
Le Horizontal Pod Autoscaler (HPA) ajuste automatiquement le nombre de réplicas d'un Deployment en fonction des métriques (CPU, mémoire, ou métriques custom). C'est un mécanisme clé pour absorber les pics de charge sans intervention manuelle.
📋 Énoncé
Vous allez déployer une application PHP-Apache, configurer un HPA qui scale entre 1 et 10 réplicas selon l'utilisation CPU, puis générer de la charge pour observer le scaling en action.
Résultat attendu :
- Un HPA actif qui ajoute des pods sous charge
- Observation du scale-down après retour au calme
🧭 Déroulement de l'exercice
Tâche 1 : Activer metrics-server et vérifier
Activez l'addon metrics-server de minikube et vérifiez que kubectl top nodes fonctionne.
Indice :
minikube addons enable metrics-server. Attendre 1-2 minutes que les métriques soient collectées.
Vérification : kubectl top nodes affiche la consommation CPU/mémoire sans erreur.
Tâche 2 : Déployer l'application cible
Déployez le manifest php-apache.yaml (fourni en solution) qui inclut les resources.requests.cpu obligatoires pour le HPA.
Indice : Le HPA calcule le pourcentage d'utilisation CPU par rapport aux
requests.cpu. Sansrequests, le HPA ne peut pas fonctionner.
Vérification : kubectl get deployment php-apache affiche 1/1 READY.
Tâche 3 : Créer le HPA avec kubectl autoscale
Créez un HPA pour php-apache avec un minimum de 1 réplica, un maximum de 10, et un seuil à 50% CPU.
Indice :
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
Vérification : kubectl get hpa affiche php-apache avec les paramètres configurés. La colonne TARGETS montre <unknown> puis se met à jour.
Tâche 4 : Simuler une charge CPU
Depuis un pod busybox séparé, générez des requêtes HTTP en boucle vers le service php-apache.
Indice :
kubectl run load-generator --image=busybox --restart=Never -it -- sh -c "while true; do wget -q -O- http://php-apache; done"
Vérification : Dans un autre terminal, kubectl get hpa -w montre l'utilisation CPU monter et le nombre de réplicas augmenter.
Tâche 5 : Observer le scale-down
Arrêtez le générateur de charge (Ctrl+C) et observez le HPA réduire le nombre de réplicas après le cool-down (environ 5 minutes par défaut).
Indice : Le scale-down est intentionnellement lent (5 min) pour éviter le "flapping".
kubectl describe hpa php-apachemontre les events de scaling.
Vérification : kubectl get hpa -w affiche le retour à 1 réplica après le cool-down.
🗂️ Mini-Projet : HPA avec manifest YAML
Définissez le HPA en YAML plutôt qu'avec la CLI impérative pour une gestion GitOps.
# hpa-manifest.yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: php-apache-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50Checkpoints :
kubectl top nodesetkubectl top podsfonctionnentkubectl get hpa php-apache-hpaaffiche les seuils configurés- Sous charge,
kubectl get hpa -wmontre le nombre de réplicas augmenter kubectl describe hpa php-apache-hpaliste les events de scaling (ScalingReplicaSet)- Après l'arrêt de la charge, le nombre de réplicas redescend à 1