Configurer l'autoscaling vertical des pods

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 :

  1. 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
    
  2. Modifiez le spec de la ressource personnalisée du cluster pour inclure le champ verticalPodAutoscaling et spécifier les modes enableUpdater et enableMemorySaver :

    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
    
  3. 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 cluster

    • KUBECONFIG : 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 :

  1. 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"]
    
  2. 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 manifeste VerticalPodAutoscaler.

    • 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'objet VerticalPodAutoscaler.

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 :

  1. Supprimez toutes les ressources personnalisées VerticalPodAutoscaler que vous avez créées.

  2. Modifiez la ressource personnalisée du cluster et supprimez l'intégralité de la section verticalPodAutoscaling de spec.

    Vous pouvez modifier directement la ressource personnalisée du cluster ou modifier le fichier de configuration du cluster et utiliser bmctl update.

  3. 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