Configurar el autoescalado de pods vertical

El autoescalado vertical de pods automatiza la configuración de las solicitudes y los límites de recursos de CPU y memoria de los contenedores de los pods de Kubernetes. El autoescalado vertical de pods analiza el uso de recursos histórico y actual para proporcionar recomendaciones, que puede mostrar o aplicar automáticamente actualizando los pods. Esta función mejora la estabilidad y la rentabilidad al asignar los recursos del tamaño adecuado.

Antes de empezar

Antes de configurar el autoescalado vertical de pods, asegúrate de que cumples los siguientes requisitos previos:

  • Tienes un clúster de bare metal en ejecución.
  • Tienes acceso kubectl al clúster.
  • Metrics Server está disponible en el clúster. Los clústeres Bare Metal incluyen Metrics Server de forma predeterminada.

Habilitar el autoescalado de pods vertical

Habilita el autoescalado vertical de pods en tu clúster de bare metal configurando una anotación de vista previa y la especificación del clúster:

  1. Añade o actualiza la anotación de vista previa en el recurso personalizado Cluster.

    Edita directamente el recurso personalizado Cluster o modifica el archivo de configuración del clúster y usa bmctl update.

    metadata:
      annotations:
        preview.baremetal.cluster.gke.io/vertical-pod-autoscaler: enable
    
  2. Modifica el spec del recurso personalizado Cluster para incluir el campo verticalPodAutoscaling y especifica los modos enableUpdater y 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 has modificado el archivo de configuración del clúster, aplica los cambios con el siguiente comando:

    bmctl update cluster -c CLUSTER_NAME --kubeconfig KUBECONFIG
    

    Haz los cambios siguientes:

    • CLUSTER_NAME: el nombre de tu clúster.

    • KUBECONFIG: la ruta del archivo kubeconfig de tu clúster.

Crear un recurso personalizado VerticalPodAutoscaler

Después de habilitar el autoescalado vertical de pods en tu clúster, define un recurso personalizado VerticalPodAutoscaler para orientarlo a cargas de trabajo específicas:

  1. Define un recurso VerticalPodAutoscaler en el mismo espacio de nombres que la carga de trabajo de destino.

    Este recurso personalizado especifica a qué pods se dirige mediante targetRef y cualquier política de recursos.

    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. Aplica el manifiesto VerticalPodAutoscaler con el siguiente comando:

    kubectl apply -f VPA_MANIFEST \
        --kubeconfig KUBECONFIG
    

    Haz los cambios siguientes:

    • VPA_MANIFEST: la ruta del archivo de manifiesto VerticalPodAutoscaler.

    • KUBECONFIG: la ruta del archivo kubeconfig del clúster.

Información sobre los modos de autoescalado de pods vertical

El autoescalado de pods vertical funciona en diferentes modos que controlan cómo aplica las recomendaciones de recursos.

Modo de recomendación

En el modo de recomendación, el autoescalado de pods vertical instala el componente de recomendación. Este componente analiza el uso de recursos y publica los valores recomendados para las solicitudes y los límites de CPU y memoria en la sección de estado de los VerticalPodAutoscalerrecursos personalizados que crees.

Para ver las recomendaciones de solicitudes y límites de recursos, usa el siguiente comando:

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 respuesta debe contener una sección Status similar a la siguiente:

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

Los pods no se actualizan automáticamente en este modo. Sigue estas recomendaciones para actualizar manualmente las configuraciones de tus pods. Este es el comportamiento predeterminado si enableUpdater no se define o es false.

Modo de actualización automática

Cuando asignas el valor true a enableUpdater enableUpdater, los controladores del ciclo de vida de hardware desnudo implementan los componentes de actualización y de controlador de admisión del autoescalado de pods vertical, además del componente de recomendación. El actualizador monitoriza los pods cuyas solicitudes de recursos actuales se desvían significativamente de las recomendaciones.

La política de actualización del recurso VerticalPodAutoscaler especifica cómo aplica el actualizador las recomendaciones. De forma predeterminada, el modo de actualización es Auto, que indica que el actualizador asigna los ajustes de recursos actualizados al crear el pod. En el siguiente ejemplo VerticalPodAutoscaler se muestra cómo definir el modo de actualización en 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"
    ...

El actualizador admite los cinco modos siguientes:

  • Auto: el actualizador expulsa el pod. El controlador de admisión intercepta la solicitud de creación del nuevo pod y la modifica para que use los valores de CPU y memoria recomendados que proporciona el recomendador. Para actualizar los recursos, es necesario volver a crear el pod, lo que puede provocar interrupciones. Usa Pod Disruption Budgets (Presupuestos de interrupción de pods), que el actualizador respeta, para gestionar el proceso de desalojo. Este modo es equivalente a Recreate.

  • Recreate: el actualizador expulsa los pods y asigna los límites y las solicitudes de recursos recomendados cuando se vuelve a crear el pod.

  • InPlaceOrRecreate(alfa): El actualizador intenta realizar actualizaciones in situ de la mejor forma posible, pero puede volver a crear el pod si no es posible realizar actualizaciones in situ. Para obtener más información, consulta la documentación sobre el cambio de tamaño de los pods in situ.

  • Initial: el actualizador solo asigna solicitudes de recursos al crear el pod y nunca las cambia después.

  • Off: El actualizador no cambia automáticamente los requisitos de recursos de los pods. Las recomendaciones se calculan y se pueden inspeccionar en el objeto VerticalPodAutoscaler.

Para obtener más información sobre el recurso personalizado VerticalPodAutoscaler, utilice kubectl para recuperar la definición del recurso personalizado verticalpodautoscalercheckpoints.autoscaling.k8s.io que está instalada en el clúster de la versión 1.33.0 o posterior.

En el siguiente ejemplo se muestra cómo pueden aparecer las recomendaciones de recursos en la sección Status del contenedor hamster. La muestra también muestra un ejemplo de un evento de desalojo de un pod, que se produce cuando el actualizador desalojo un pod antes de asignar automáticamente la configuración de recursos recomendada al pod recreado:

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.

Modo Ahorro de memoria

El modo Ahorro de memoria reduce el espacio de memoria del componente de recomendación de autoescalado de pods vertical. Cuando asignas el valor true a enableMemorySaver, la herramienta de recomendaciones solo monitoriza y calcula las agregaciones de los pods que tienen un recurso personalizado VerticalPodAutoscaler coincidente.

La contrapartida es que, cuando creas un VerticalPodAutoscalerrecurso personalizado para una carga de trabajo, el recomendador tarda un tiempo (hasta 24 horas) en recoger el historial suficiente para ofrecer recomendaciones precisas. Este modo está false de forma predeterminada en la mayoría de los tipos de clústeres, pero es true en los clústeres perimetrales.

Inhabilitar el autoescalado de pods vertical

Para inhabilitar el autoescalado vertical de pods, elimina sus recursos personalizados y su configuración del clúster:

  1. Elimina los recursos personalizados de VerticalPodAutoscaler que hayas creado.

  2. Modifica el recurso personalizado Cluster y elimina toda la sección verticalPodAutoscaling de spec.

    Puedes editar directamente el recurso personalizado Cluster o modificar el archivo de configuración del clúster y usar bmctl update.

  3. Quita la anotación preview.baremetal.cluster.gke.io/vertical-pod-autoscaler del recurso personalizado Cluster.

Limitaciones

Ten en cuenta las siguientes limitaciones al usar el autoescalado de pods vertical:

  • El autoescalado vertical de pods no está listo para usarse con cargas de trabajo basadas en JVM debido a la visibilidad limitada del uso real de memoria de la carga de trabajo.
  • El actualizador requiere un mínimo de dos réplicas de Pod para que los despliegues sustituyan los Pods por valores de recursos revisados.
  • El actualizador no actualiza rápidamente los pods que están en bucle de fallos debido a errores de falta de memoria (OOM).
  • La política de actualización InPlaceOrRecreate de los pods es una función alfa del autoescalado vertical de pods. Intenta realizar actualizaciones in situ de la mejor forma posible, pero puede volver a crear el pod si no es posible realizar actualizaciones in situ.

Siguientes pasos