Configurez HPA pour ajuster automatiquement le nombre de réplicas de pods en fonction du processeur, de la mémoire ou d’autres métriques.
HPA convient aux services dont la demande fluctue, qui nécessitent des mises à l’échelle fréquentes ou qui gèrent de nombreuses charges de travail. Ce scénario est courant dans les secteurs du commerce électronique, de l’enseignement en ligne et des services financiers.
Fonctionnement de HPA
HPA s’exécute sous forme de boucle de contrôle : toutes les 15 secondes, le contrôleur interroge l’API Metrics et compare l’utilisation aux cibles définies. L’API Metrics récupère les données depuis le kubelet toutes les 60 secondes ; par conséquent, HPA évalue effectivement les métriques sur un cycle de 60 secondes.
La formule fondamentale de mise à l’échelle est la suivante :
desiredReplicas = ceil(currentReplicas * (currentMetricValue / desiredMetricValue))
Par exemple, si l’utilisation actuelle du processeur est de 80 % et que la cible est de 50 %, HPA calcule ceil(currentReplicas * 80/50) et ajuste le déploiement. Une bande de tolérance de 10 % évite les oscillations : HPA ne déclenche pas de mise à l’échelle lorsque le ratio se situe à moins de 0,1 de 1,0.
|
Comportement |
Détail |
|
Montée en charge (Scale-out) |
Immédiate. HPA augmente le nombre de réplicas dès qu’une métrique dépasse la cible (en tenant compte de la tolérance). |
|
Descente en charge (Scale-in) |
Délai d’attente par défaut de 5 minutes pour éviter une réduction prématurée lors de baisses transitoires. |
|
Métriques multiples |
HPA déclenche la mise à l’échelle lorsque l’une des métriques spécifiées dépasse son seuil. |
|
Requêtes de ressources obligatoires |
HPA calcule l’utilisation selon la formule |
Consultez la section Détails de l’algorithme.
Prérequis
Metrics Server est installé. Installez-le depuis la page Add-ons de la console ACK.
Créer une application activant HPA dans la console ACK
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, localisez le cluster cible et cliquez sur son nom ou sur Details dans la colonne Actions.
Dans le volet de navigation de gauche, sélectionnez Workloads > Deployments.
Sur la page Deployments, cliquez sur Create from Image.
-
Sur la page Create, configurez les sections suivantes :
Basic Information : Définissez le nom de l’application et le nombre de réplicas.
Container : Sélectionnez l’image et spécifiez les ressources CPU et mémoire. > Important : Définissez les requêtes de ressources, sans quoi HPA ne prendra pas effet.
-
Advanced :
Dans la section Access Control, cliquez sur Create à côté de Services pour configurer le service.
-
Dans la section Scaling, définissez HPA sur Enable et configurez les paramètres de mise à l’échelle :
Paramètre
Description
Métriques
Sélectionnez l’utilisation du processeur ou de la mémoire. Le type doit correspondre à celui défini dans les ressources requises. Si les deux sont spécifiés, HPA déclenche la mise à l’échelle lorsque l’une ou l’autre dépasse son seuil.
Condition
Seuil d’utilisation des ressources déclenchant la mise à l’échelle.
Max. Replicas
Nombre maximal de réplicas. Doit être supérieur au minimum.
Min. Replicas
Nombre minimal de réplicas. Entier, au moins 1.
Consultez la rubrique Créer une application sans état à partir d’une image.
Créer une application activant HPA avec kubectl
Cette section utilise un déploiement NGINX pour illustrer la configuration de HPA avec kubectl. Créez un seul HPA par charge de travail.
Étape 1 : Créer un déploiement
Créez un fichier nommé nginx.yml :
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9 # Replace with your actual image_name:tag.
ports:
- containerPort: 80
resources:
requests: # Required for HPA to calculate utilization.
cpu: 500m
Définissez resources.requests pour vos conteneurs. HPA calcule l’utilisation selon la formule currentUsage / requests ; sans requêtes, il ne peut pas déterminer l’utilisation et ne déclenchera pas la mise à l’échelle.
Appliquez le déploiement :
kubectl apply -f nginx.yml
Étape 2 : Créer un HPA
Créez un fichier nommé hpa.yml. Le HPA utilise scaleTargetRef pour cibler le déploiement nginx et déclenche la mise à l’échelle lorsque l’utilisation moyenne du processeur dépasse 50 %.
Pour Kubernetes 1.24 et versions ultérieures (recommandé — utilise autoscaling/v2) :
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx # Target Deployment name.
minReplicas: 1 # Minimum replica count. Integer >= 1.
maxReplicas: 10 # Maximum replica count. Must exceed minReplicas.
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50 # Target average CPU utilization (percentage of requests).
Pour les versions de Kubernetes antérieures à 1.24 (héritage)
Utilisez autoscaling/v2beta2 à la place :
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
autoscaling/v2beta2est déprécié dans Kubernetes 1.23 et supprimé dans la version 1.26. Migrez versautoscaling/v2dès que possible.
Appliquez le HPA :
kubectl apply -f hpa.yml
(Facultatif) Utiliser plusieurs métriques
Pour effectuer une mise à l’échelle basée à la fois sur le processeur et la mémoire, spécifiez les deux types de ressources dans le champ metrics d’un seul HPA. Ne créez pas de HPA distincts pour chaque métrique. HPA déclenche la mise à l’échelle lorsque n’importe quelle métrique atteint son seuil.
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 50
Vérifier l’état de HPA
Après avoir appliqué le HPA, la collecte initiale des métriques prend quelques instants. Durant cette période, la commande kubectl describe hpa peut afficher des avertissements tels que les suivants :
Warning FailedGetResourceMetric 2m (x6 over 4m) horizontal-pod-autoscaler missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5897-mqzs7
Warning FailedComputeMetricsReplicas 2m (x6 over 4m) horizontal-pod-autoscaler failed to get cpu utilization: missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5
Ces avertissements indiquent que HPA est toujours en cours d’initialisation et que les métriques ne sont pas encore disponibles.
Vérifiez l’état de HPA :
kubectl get hpa
Vérifiez les événements de mise à l’échelle :
kubectl describe hpa nginx-hpa
Lorsque HPA fonctionne correctement, la section Events affiche une sortie similaire à celle-ci :
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulRescale 5m6s horizontal-pod-autoscaler New size: 1; reason: All metrics below target
Nettoyer les ressources
Pour supprimer les ressources créées dans ce tutoriel :
kubectl delete hpa nginx-hpa
kubectl delete deployment nginx