L'autoscaling vertical des pods automatise la définition des demandes et des limites de ressources de processeur et de mémoire pour les conteneurs dans les pods Kubernetes. L'autoscaling de pods vertical analyse l'utilisation des ressources historiques et actuelles pour fournir des recommandations, qu'il peut afficher ou appliquer automatiquement en mettant à jour les pods. Cette fonctionnalité améliore la stabilité et la rentabilité en dimensionnant correctement les allocations de ressources.
Avant de commencer
Avant de configurer l'autoscaling vertical des pods, assurez-vous de remplir les conditions préalables suivantes :
- Vous disposez d'un cluster Bare Metal en cours d'exécution.
- Vous disposez d'un accès
kubectl
au cluster. - Le serveur de métriques est disponible dans le cluster. Les clusters Bare Metal incluent Metrics Server par défaut.
Activer l'autoscaling vertical des pods
Activez l'autoscaling de pods vertical sur votre cluster Bare Metal en définissant une annotation d'aperçu et en configurant la spécification du cluster :
Ajoutez ou mettez à jour l'annotation d'aperçu sur la ressource personnalisée du cluster.
Modifiez directement la ressource personnalisée du cluster ou modifiez le fichier de configuration du cluster et utilisez
bmctl update
.metadata: annotations: preview.baremetal.cluster.gke.io/vertical-pod-autoscaler: enable
Modifiez le
spec
de la ressource personnalisée du cluster pour inclure le champverticalPodAutoscaling
et spécifier les modesenableUpdater
etenableMemorySaver
:apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: cluster1 namespace: cluster-cluster1 annotations: preview.baremetal.cluster.gke.io/vertical-pod-autoscaler: enable spec: # ... other cluster spec fields verticalPodAutoscaling: enableUpdater: true # Set to true for automated updates enableMemorySaver: true # Set to true to reduce recommender memory usage
Si vous avez modifié le fichier de configuration du cluster, appliquez les modifications à l'aide de la commande suivante :
bmctl update cluster -c CLUSTER_NAME --kubeconfig KUBECONFIG
Remplacez les éléments suivants :
CLUSTER_NAME
: nom du clusterKUBECONFIG
: chemin d'accès au fichier kubeconfig de votre cluster.
Créer une ressource personnalisée VerticalPodAutoscaler
Après avoir activé l'autoscaling de pods vertical sur votre cluster, définissez une ressource personnalisée VerticalPodAutoscaler
pour cibler des charges de travail spécifiques :
Définissez une ressource
VerticalPodAutoscaler
dans le même espace de noms que la charge de travail cible.Cette ressource personnalisée spécifie les pods qu'elle cible à l'aide de
targetRef
et de toutes les règles de ressources.apiVersion: "autoscaling.k8s.io/v1" kind: VerticalPodAutoscaler metadata: name: hamster-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: hamster resourcePolicy: containerPolicies: - containerName: '*' minAllowed: cpu: 100m memory: 50Mi maxAllowed: cpu: 1 memory: 500Mi controlledResources: ["cpu", "memory"]
Appliquez le fichier manifeste
VerticalPodAutoscaler
à l'aide de la commande suivante :kubectl apply -f VPA_MANIFEST \ --kubeconfig KUBECONFIG
Remplacez les éléments suivants :
VPA_MANIFEST
: chemin d'accès au fichier manifesteVerticalPodAutoscaler
.KUBECONFIG
: chemin d'accès au fichier kubeconfig du cluster.
Comprendre les modes d'autoscaling vertical des pods
L'autoscaling de pods vertical fonctionne dans différents modes qui contrôlent la façon dont il applique les recommandations de ressources.
Mode de recommandation
En mode recommandation, l'autoscaling vertical des pods installe le composant de recommandation. Ce composant analyse l'utilisation des ressources et publie les valeurs recommandées pour les demandes et les limites de ressources de processeur et de mémoire dans la section "État" des ressources personnalisées VerticalPodAutoscaler
que vous créez.
Pour afficher les recommandations concernant les limites et les demandes de ressources, utilisez la commande suivante :
kubectl describe vpa VPA_NAME \
--kubeconfig KUBECONFIG \
-n CLUSTER_NAMESPACE
Replace the following:
* `VPA_NAME`: the name of the `VerticalPodAutoscaler`
that's targeting the workloads for which you are considering resource
adjustments.
* `KUBECONFIG`: the path of the cluster kubeconfig
file.
* `CLUSTER_NAMESPACE`: the name of the cluster that's
running vertical Pod autoscaling.
La réponse doit contenir une section Status
semblable à l'exemple suivant :
Status:
Conditions:
Last Transition Time: 2025-08-04T23:53:32Z
Status: True
Type: RecommendationProvided
Recommendation:
Container Recommendations:
Container Name: hamster
Lower Bound:
Cpu: 100m
Memory: 262144k
Target:
Cpu: 587m
Memory: 262144k
Uncapped Target:
Cpu: 587m
Memory: 262144k
Upper Bound:
Cpu: 1
Memory: 500Mi
Dans ce mode, les pods ne sont pas mis à jour automatiquement. Utilisez ces recommandations pour mettre à jour manuellement vos configurations de pods. Il s'agit du comportement par défaut si enableUpdater
n'est pas défini ou est défini sur false
.
Mode de mise à jour automatique
Lorsque vous définissez enableUpdater
enableUpdater
sur true
, les contrôleurs de cycle de vie Bare Metal déploient les composants de l'updater et du contrôleur d'admission de l'autoscaling vertical des pods en plus du composant de recommandation. Le programme de mise à jour surveille les pods dont les demandes de ressources actuelles s'écartent considérablement des recommandations.
La règle de mise à jour de la ressource VerticalPodAutoscaler
spécifie la manière dont le programme de mise à jour applique les recommandations. Par défaut, le mode de mise à jour est Auto
, qui indique que le programme de mise à jour attribue les paramètres de ressources mis à jour lors de la création du pod. L'exemple VerticalPodAutoscaler
suivant montre comment définir le mode de mise à jour sur Initial
:
apiVersion: "autoscaling.k8s.io/v1"
kind: VerticalPodAutoscaler
metadata:
name: hamster-vpa
spec:
targetRef:
apiVersion: "apps/v1"
kind: Deployment
name: hamster
resourcePolicy:
updatePolicy:
updateMode: "Initial"
...
L'outil de mise à jour est compatible avec les cinq modes suivants :
Auto
: le programme de mise à jour évince le pod. Le contrôleur d'admission intercepte la demande de création du nouveau pod et la modifie pour qu'elle utilise les valeurs de processeur et de mémoire recommandées par le recommander. La mise à jour des ressources nécessite de recréer le pod, ce qui peut entraîner des perturbations. Utilisez des budgets d'interruption de pod, que le programme de mise à jour respecte, pour gérer le processus d'éviction. Ce mode équivaut àRecreate
.Recreate
: le programme de mise à jour évince les pods et attribue les demandes et limites de ressources recommandées lorsque le pod est recréé.InPlaceOrRecreate
(alpha) : le programme de mise à jour tente d'effectuer des mises à jour sur place au mieux, mais peut revenir à la recréation du pod si les mises à jour sur place ne sont pas possibles. Pour en savoir plus, consultez la documentation sur le redimensionnement des pods sur place.Initial
: le programme de mise à jour n'attribue des demandes de ressources que lors de la création du pod et ne les modifie jamais ultérieurement.Off
: le programme de mise à jour ne modifie pas automatiquement les besoins en ressources des pods. Les recommandations sont calculées et peuvent être inspectées dans l'objetVerticalPodAutoscaler
.
Pour en savoir plus sur la ressource personnalisée VerticalPodAutoscaler
, utilisez kubectl
pour récupérer la définition de ressource personnalisée verticalpodautoscalercheckpoints.autoscaling.k8s.io
installée sur le cluster de version 1.33.0 ou ultérieure.
L'exemple suivant montre comment les recommandations de ressources peuvent s'afficher dans la section Status
pour le conteneur hamster
. L'exemple montre également un événement d'éviction de pod, qui se produit lorsque le programme de mise à jour évince un pod avant d'attribuer automatiquement la configuration de ressources recommandée au pod recréé :
Spec:
Resource Policy:
Container Policies:
Container Name: *
Controlled Resources:
cpu
memory
Max Allowed:
Cpu: 1
Memory: 500Mi
Min Allowed:
Cpu: 100m
Memory: 50Mi
Target Ref:
API Version: apps/v1
Kind: Deployment
Name: hamster
Update Policy:
Update Mode: Auto
Status:
Conditions:
Last Transition Time: 2025-08-04T23:53:32Z
Status: True
Type: RecommendationProvided
Recommendation:
Container Recommendations:
Container Name: hamster
Lower Bound:
Cpu: 100m
Memory: 262144k
Target:
Cpu: 587m
Memory: 262144k
Uncapped Target:
Cpu: 587m
Memory: 262144k
Upper Bound:
Cpu: 1
Memory: 500Mi
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal EvictedPod 49s vpa-updater VPA Updater evicted Pod hamster-7cb59fb657-lkrk4 to apply resource recommendation.
Mode Économiseur de mémoire
Le mode Économiseur de mémoire réduit l'empreinte mémoire du composant de recommandation de l'autoscaling vertical des pods. Lorsque vous définissez enableMemorySaver
sur true
, le moteur de recommandation ne suit et ne calcule les agrégations que pour les pods qui disposent d'une ressource personnalisée VerticalPodAutoscaler
correspondante.
En contrepartie, lorsque vous créez une ressource VerticalPodAutoscaler
personnalisée pour une charge de travail existante, le moteur de recommandation met un certain temps (jusqu'à 24 heures) à collecter suffisamment d'historique pour fournir des recommandations précises. Ce mode est false
par défaut pour la plupart des types de clusters, mais il est défini sur true
pour les clusters périphériques.
Désactiver l'autoscaling vertical des pods
Désactivez l'autoscaling vertical des pods en supprimant ses ressources personnalisées et sa configuration de votre cluster :
Supprimez toutes les ressources personnalisées
VerticalPodAutoscaler
que vous avez créées.Modifiez la ressource personnalisée du cluster et supprimez l'intégralité de la section
verticalPodAutoscaling
despec
.Vous pouvez modifier directement la ressource personnalisée du cluster ou modifier le fichier de configuration du cluster et utiliser
bmctl update
.Supprimez l'annotation
preview.baremetal.cluster.gke.io/vertical-pod-autoscaler
de la ressource personnalisée Cluster.
Limites
Tenez compte des limites suivantes lorsque vous utilisez l'autoscaling vertical des pods :
- L'autoscaling de pods verticaux n'est pas encore prêt pour une utilisation avec des charges de travail basées sur JVM en raison d'une visibilité limitée sur l'utilisation réelle de la mémoire de la charge de travail.
- Le programme de mise à jour nécessite au moins deux répliques de pod pour que les déploiements remplacent les pods par des valeurs de ressources révisées.
- Le programme de mise à jour ne met pas à jour rapidement les pods qui sont en boucle de plantage en raison d'erreurs de mémoire saturée (OOM, Out Of Memory).
- La règle de mise à jour
InPlaceOrRecreate
pour les pods est une fonctionnalité alpha de l'autoscaling vertical des pods. Il tente d'effectuer des mises à jour sur place au mieux, mais peut revenir à la recréation du pod si les mises à jour sur place ne sont pas possibles.
Étapes suivantes
- Découvrez les budgets d'interruptions de pods.