Configura el ajuste de escala automático vertical de Pods

El ajuste de escala automático vertical de Pods automatiza la configuración de las solicitudes y los límites de recursos de CPU y memoria para los contenedores dentro de los Pods de Kubernetes. El ajuste de escala automático 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 de forma adecuada.

Antes de comenzar

Antes de configurar el ajuste de escala automático vertical de Pods, asegúrate de cumplir con los siguientes requisitos previos:

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

Habilitar el Ajuste de escala automático vertical de Pods

Habilita el ajuste de escala automático vertical de Pods en tu clúster de metal desnudo configurando una anotación de vista previa y la especificación del clúster:

  1. Agrega o actualiza la anotación de versión preliminar en el recurso personalizado de Cluster.

    Edita el recurso personalizado de Cluster directamente 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 especificar 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 modificaste el archivo de configuración del clúster, aplica los cambios con el siguiente comando:

    bmctl update cluster -c CLUSTER_NAME --kubeconfig KUBECONFIG
    

    Reemplaza lo siguiente:

    • CLUSTER_NAME: El nombre de tu clúster.

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

Crea un recurso personalizado VerticalPodAutoscaler

Después de habilitar el ajuste de escala automático vertical de Pods en tu clúster, define un recurso personalizado VerticalPodAutoscaler para segmentar 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 con 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
    

    Reemplaza lo siguiente:

    • VPA_MANIFEST: Es la ruta de acceso al archivo de manifiesto VerticalPodAutoscaler.

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

Comprende los modos del ajuste de escala automático vertical de Pods

El ajuste de escala automático vertical de Pods opera en diferentes modos que controlan cómo aplica las recomendaciones de recursos.

Modo de recomendación

En el modo de recomendación, el ajuste de escala automático vertical de Pods 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 recursos personalizados VerticalPodAutoscaler que creas.

Para ver las recomendaciones de límites y solicitudes 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 muestra:

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

En este modo, los Pods no se actualizan automáticamente. Usa estas recomendaciones para actualizar manualmente las configuraciones de Pod. Este es el comportamiento predeterminado si enableUpdater no está configurado o es false.

Modo de actualización automática

Cuando configuras enableUpdater enableUpdater en true, los controladores del ciclo de vida de equipos físicos implementan los componentes del actualizador y del controlador de admisión del ajuste de escala automático vertical de Pods, además del recomendador. El actualizador supervisa los Pods cuyas solicitudes de recursos actuales se desvían significativamente de las recomendaciones.

La política de actualización en el recurso VerticalPodAutoscaler especifica cómo el actualizador aplica las recomendaciones. De forma predeterminada, el modo de actualización es Auto, que indica que el actualizador asigna la configuración de recursos actualizada en la creación del Pod. En el siguiente ejemplo de VerticalPodAutoscaler, se muestra cómo establecer 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 siguientes cinco modos:

  • Auto: El actualizador expulsa el Pod. El controlador de admisión intercepta la solicitud de creación del Pod nuevo y la modifica para que use los valores recomendados de CPU y memoria que proporciona el recomendador. La actualización de recursos requiere la recreación del Pod, lo que puede causar interrupciones. Usa presupuestos de interrupción de Pods, que el actualizador respeta, para administrar el proceso de expulsión. Este modo equivale a Recreate.

  • Recreate: El actualizador expulsa los Pods y asigna solicitudes y límites de recursos recomendados cuando se vuelve a crear el Pod.

  • InPlaceOrRecreate(alfa): El actualizador intenta realizar actualizaciones en el lugar con el mejor esfuerzo posible, pero puede recurrir a la recreación del Pod si no es posible realizar actualizaciones en el lugar. Para obtener más información, consulta la documentación sobre el cambio de tamaño del pod in situ.

  • Initial: El actualizador solo asigna solicitudes de recursos en la creación del Pod y nunca las cambia más adelante.

  • 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, usa 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 podrían aparecer las recomendaciones de recursos en la sección Status del contenedor hamster. En la muestra, también se muestra un ejemplo de un evento de desalojo de Pod, que se produce cuando el actualizador desaloja 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 de Ahorro de memoria

El modo de ahorro de memoria reduce la utilización de memoria del componente de recomendación del ajuste de escala automático vertical de Pods. Cuando configuras enableMemorySaver en true, el recomendador solo hace un seguimiento de las agregaciones y las calcula para los Pods que tienen un recurso personalizado VerticalPodAutoscaler coincidente.

La desventaja es que, cuando creas un recurso personalizado VerticalPodAutoscaler nuevo para una carga de trabajo existente, el recomendador tarda un tiempo (hasta 24 horas) en recopilar el historial suficiente para proporcionar recomendaciones precisas. Este modo está false de forma predeterminada para la mayoría de los tipos de clústeres, pero se establece en true para los clústeres perimetrales.

Inhabilita el Ajuste de escala automático vertical de Pods

Inhabilita el ajuste de escala automático vertical de Pods quitando sus recursos personalizados y su configuración del clúster:

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

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

    Puedes editar el recurso personalizado de Cluster directamente 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 cuando uses el ajuste de escala automático vertical de Pods:

  • El ajuste de escala automático vertical de Pods aún no está listo para usarse con cargas de trabajo basadas en JVM debido a la visibilidad limitada del uso real de la memoria de la carga de trabajo.
  • El actualizador requiere un mínimo de dos réplicas de Pod para que los Deployments reemplacen a los Pods con valores de recursos revisados.
  • El actualizador no actualiza rápidamente los Pods que se encuentran en un bucle de fallas debido a errores de memoria insuficiente (OOM).
  • La política de actualización InPlaceOrRecreate para Pods es una función alfa dentro del ajuste de escala automático vertical de Pods. Intenta realizar actualizaciones en el lugar con el mejor esfuerzo, pero puede recurrir a la recreación del Pod si no es posible realizar actualizaciones en el lugar.

¿Qué sigue?