Soluciona problemas del ajuste de escala automático vertical de Pods

Cuando el ajuste de escala automático vertical de Pods no funciona como se espera en Google Kubernetes Engine (GKE), es posible que tus cargas de trabajo no se escalen correctamente. Estos problemas pueden impedir que las aplicaciones controlen la carga, lo que podría causar problemas de rendimiento o interrupciones. Es posible que veas que los Pods no se reinician con las nuevas recomendaciones de recursos o que las recomendaciones no coincidan con el uso real.

Usa este documento para resolver problemas habituales con la configuración de VerticalPodAutoscaler o las recomendaciones inesperadas. Seguir estos pasos para solucionar problemas puede ayudar a que tus aplicaciones se escale de manera eficiente y confiable según la demanda.

Esta información es importante para los desarrolladores de aplicaciones que configuran recursos de VerticalPodAutoscaler y necesitan asegurarse de que sus aplicaciones se ajusten correctamente. También ayuda a los administradores y operadores de la plataforma a solucionar problemas relacionados con la configuración del clúster que afectan las cargas de trabajo con escalamiento automático. Para obtener más información sobre los roles comunes y las tareas de ejemplo a las que hacemos referencia en el contenido de Cloud de Confiance by S3NS , consulta Roles y tareas comunes del usuario de GKE.

Diagnostica problemas de VerticalPodAutoscaler

Para diagnosticar problemas con un VerticalPodAutoscaler, inspecciona el estado y la configuración con kubectl o la consola de Cloud de Confiance .

Describe el VerticalPodAutoscaler

Para ver los cálculos en tiempo real y las decisiones de ajuste de escala recientes, usa el comando kubectl describe vpa:

kubectl describe vpa VPA_NAME -n NAMESPACE_NAME

Reemplaza lo siguiente:

  • VPA_NAME: Es el nombre de tu VerticalPodAutoscaler.
  • NAMESPACE_NAME: Es el espacio de nombres de tu VerticalPodAutoscaler.

El resultado es similar a lo siguiente:

Name:         sample-deployment-vpa
Namespace:    default
API Version:  autoscaling.k8s.io/v1
Kind:         VerticalPodAutoscaler
# Multiple lines are omitted here
Spec:
  Target Ref:
    API Version:  apps/v1
    Kind:         Deployment
    Name:         sample-deployment
  Update Policy:
    Update Mode:  Auto
Status:
  Conditions:
    Last Transition Time:  2025-10-09T10:00:00Z
    Message:               VPA is fetching history in order to provide recommendation
    Reason:                FetchingHistory
    Status:                True
    Type:                  FetchingHistory
    Last Transition Time:  2025-10-09T10:05:00Z
    Message:               VPA pod metrics aren't available yet
    Reason:                NoMetrics
    Status:                True
    Type:                  LowConfidence
    Last Transition Time:  2025-10-09T10:10:00Z
    Message:               VPA is able to provide a recommendation
    Reason:                RecommendationProvided
    Status:                True
    Type:                  RecommendationProvided
  Recommendation:
    Container Recommendations:
      Container Name:  sample-container
      Lower Bound:
        Cpu:     100m
        Memory:  128Mi
      Target:
        Cpu:     200m
        Memory:  256Mi
      Upper Bound:
        Cpu:     500m
        Memory:  512Mi
Events:          <none>

En el resultado, revisa estas secciones principales:

  • Spec: Muestra los detalles de configuración, incluidos el campo targetRef (la carga de trabajo objetivo) y el campo updatePolicy (cómo se aplican las actualizaciones).
  • Status: Muestra la sección Conditions (estado operativo) y la sección Recommendation (valores de recursos de CPU y memoria generados para cada contenedor).
  • Events: Enumera las acciones o los errores recientes relacionados con el objeto VerticalPodAutoscaler.

Visualiza el manifiesto de VerticalPodAutoscaler

Para ver la configuración y el estado completos de un VerticalPodAutoscaler, inspecciona su manifiesto YAML con kubectl o la consola de Cloud de Confiance :

Console

  1. En la consola de Cloud de Confiance , ve a la página Navegador de objetos.

    Ir al Navegador de objetos

  2. Haz clic en la lista de filtros Tipo de objeto.

  3. Borra las selecciones existentes.

  4. Selecciona VerticalPodAutoscaler y haz clic en Aceptar.

  5. En la lista filtrada, selecciona el grupo de APIs autoscaling.k8s.io.

  6. Selecciona el tipo de objeto VerticalPodAutoscaler.

  7. Haz clic en el nombre del VerticalPodAutoscaler que deseas inspeccionar.

kubectl

kubectl get vpa VPA_NAME \
    -n NAMESPACE_NAME \
    -o yaml

Reemplaza lo siguiente:

  • VPA_NAME: Es el nombre de tu VerticalPodAutoscaler.
  • NAMESPACE_NAME: Es el espacio de nombres de tu VerticalPodAutoscaler.

Verifica el estado de VerticalPodAutoscaler en la consola de Cloud de Confiance

Para inspeccionar el estado de VerticalPodAutoscaler de tus cargas de trabajo en la consola de Cloud de Confiance , sigue estos pasos:

  1. Ir a la página Cargas de trabajo.

    Ir a Cargas de trabajo

  2. Haz clic en el nombre de tu carga de trabajo.

  3. Ve a la pestaña Detalles y busca la sección Escalador automático.

  4. Revisa la fila Vertical Pod Autoscaler para ver los mensajes de estado relacionados con la recopilación de métricas y el estado de la configuración.

Recopila registros de decisiones

Para obtener información detallada sobre los cálculos y las decisiones de VerticalPodAutoscaler, habilita los registros de decisiones del escalador automático vertical de Pods (versión preliminar) en Cloud Logging.

En estos registros, se capturan eventos como UPDATE_RECOMMENDATION, EVICT_POD, APPLY_RECOMMENDATION_IN_PLACE y APPLY_RECOMMENDATION_ON_EVICTION.

Para habilitar y revisar los registros de decisiones, consulta Cómo recopilar registros de eventos del escalador automático vertical de Pods.

Soluciona problemas de las recomendaciones de VerticalPodAutoscaler

En las siguientes secciones, se abordan los problemas en los que VerticalPodAutoscaler no genera recomendaciones o genera recomendaciones que difieren de las expectativas.

Un VerticalPodAutoscaler no proporciona recomendaciones

Síntomas:

  • El campo Status.Recommendation del manifiesto de VerticalPodAutoscaler está vacío.
  • Las condiciones en el manifiesto de VerticalPodAutoscaler muestran las condiciones de estado NoPodsMatched, FetchingHistory o LowConfidence.

Causa:

  • Destino incorrecto: El campo spec.targetRef del manifiesto de VerticalPodAutoscaler no apunta a una carga de trabajo existente en el mismo espacio de nombres.
  • Recopilación inicial de métricas: El VerticalPodAutoscaler se creó recientemente y aún está recopilando datos históricos de uso de recursos.
  • Problemas con el componente metrics-server: El VerticalPodAutoscaler se basa en las métricas del componente metrics-server. Si el componente metrics-server no funciona correctamente, VerticalPodAutoscaler no podrá recuperar los datos de uso.
  • No hay Pods en ejecución: La carga de trabajo de destino no tiene Pods en ejecución o listos para que los observe VerticalPodAutoscaler.

Solución:

  • Verifica el campo targetRef: Comprueba los valores de los campos kind, name y apiVersion en la sección spec.targetRef. Asegúrate de que todos los valores coincidan con la carga de trabajo de destino. Para confirmar que existe la carga de trabajo, ejecuta el siguiente comando:

    kubectl get KIND WORKLOAD_NAME \
        -n NAMESPACE_NAME
    

    Reemplaza lo siguiente:

    • KIND: Es el tipo de carga de trabajo, por ejemplo, deployment o statefulset.
    • WORKLOAD_NAME: el nombre de tu carga de trabajo.
    • NAMESPACE_NAME: el espacio de nombres de tu carga de trabajo.
  • Permite tiempo para la recopilación de métricas: Los recursos nuevos de VerticalPodAutoscaler requieren tiempo para recopilar datos. Supervisa el campo Status.Conditions para ver una transición a la condición de estado RecommendationProvided.

  • Verifica el componente metrics-server:

    1. Verifica que el Pod del componente metrics-server se esté ejecutando:

      kubectl get pods -n kube-system | grep metrics-server
      
    2. Si el Pod no se está ejecutando o tiene un recuento de reinicios alto, verifica sus registros:

      kubectl logs -n kube-system -l k8s-app=metrics-server
      

      Las entradas de registro que contienen palabras como error, failed o unable to fetch indican problemas con la recopilación de métricas.

  • Asegúrate de que los Pods se estén ejecutando: Verifica que la carga de trabajo de destino tenga al menos un Pod en ejecución y listo.

Las recomendaciones de VerticalPodAutoscaler son inesperadas

Síntomas:

  • Los valores de CPU o memoria en la sección Status.Recommendation son más altos o más bajos de lo esperado.
  • Las recomendaciones no se alinean con el consumo de recursos de la carga de trabajo observada.

Causa:

  • Cambios en el comportamiento de la carga de trabajo: Las recomendaciones de VerticalPodAutoscaler se basan en el uso histórico. Es posible que aún no se reflejen los cambios recientes en los patrones de consumo de aplicaciones.
  • Características de la carga de trabajo: Es posible que los trabajos o las cargas de trabajo de corta duración con patrones de uso muy irregulares no reciban recomendaciones óptimas.
  • Recursos VerticalPodAutoscaler en conflicto: Es posible que se configuren varios recursos VerticalPodAutoscaler para segmentar la misma carga de trabajo.

Solución:

  • Permite un tiempo de ajuste: Dale tiempo al VerticalPodAutoscaler para que aprenda nuevos patrones de uso después de los cambios en la aplicación.
  • Evalúa la idoneidad: Evalúa si un VerticalPodAutoscaler o un Horizontal Pod Autoscaler son los más adecuados para el tipo de carga de trabajo.
  • Verifica si hay recursos de VerticalPodAutoscaler en conflicto:

    1. Enumera todos los recursos de VerticalPodAutoscaler en tu clúster:

      kubectl get vpa --all-namespaces
      
    2. Examina el campo spec.targetRef de cada recurso. Si varios recursos de VerticalPodAutoscaler tienen como objetivo la misma carga de trabajo, quita o ajusta los recursos en conflicto para que solo un VerticalPodAutoscaler tenga como objetivo una carga de trabajo determinada.

Soluciona problemas relacionados con las actualizaciones de recursos de Pod

En las siguientes secciones, se abordan los problemas en los que existen recomendaciones, pero no se aplican a los Pods de destino.

No se actualizan las solicitudes de recursos de Pods

Síntomas:

  • El manifiesto de VerticalPodAutoscaler muestra recomendaciones en la sección Status, pero el campo resources.requests del manifiesto de Pod no se actualiza.
  • Los Pods no se reinician para aplicar las recomendaciones cuando se usa el modo de actualización Auto o Recreate.

Causa:

  • El campo updateMode es Off: Cuando el campo spec.updatePolicy.updateMode se establece en Off, el VerticalPodAutoscaler genera recomendaciones, pero no las aplica.
  • La carga de trabajo tiene solo una réplica: En el modo de actualización Auto o Recreate, VerticalPodAutoscaler evita expulsar cargas de trabajo con una sola réplica para evitar el tiempo de inactividad.

Solución:

  • Verifica el campo updateMode: Modifica el manifiesto de VerticalPodAutoscaler para establecer el campo spec.updatePolicy.updateMode en Auto, Recreate o InPlaceOrRecreate.
  • Aumenta el recuento de réplicas: Para las cargas de trabajo que usan el modo de actualización Auto o Recreate, asegúrate de que el Deployment o StatefulSet tenga más de una réplica.

Las actualizaciones in situ fallan o permanecen aplazadas

Síntomas:

  • No se completa el cambio de tamaño del contenedor en el lugar o permanece diferido.

Causa:

  • Capacidad de nodo insuficiente: Si el nodo no tiene capacidad para las solicitudes de recursos actualizadas, se aplaza la operación de cambio de tamaño in situ.

Solución:

  • Verifica el estado de cambio de tamaño diferido y la capacidad del nodo:

    Si el cambio de tamaño permanece diferido durante más de cinco minutos, el VerticalPodAutoscaler recurre a desalojar y volver a crear el Pod para aplicar la recomendación. Para verificar el estado de la actualización aplazada, haz lo siguiente:

    1. Inspecciona las anotaciones del Pod para verificar si la anotación vpaInPlaceUpdated está establecida en "true":

      metadata:
        annotations:
          vpaInPlaceUpdated: "true"
          vpaUpdates: 'Pod resources updated by sample-deployment-vpa: container 0: cpu request, memory request'
      
    2. Verifica el estado diferido inspeccionando el campo status.conditions para los eventos de cambio de tamaño diferido:

      status:
        conditions:
        - type: PodResizePending
          status: "True"
          reason: Deferred
          message: "Node didn't have enough resource: ..."
      
    3. Inspecciona los eventos de Kubernetes para el Pod:

      kubectl get events -n NAMESPACE_NAME --field-selector involvedObject.kind=Pod,involvedObject.name=POD_NAME
      

      Reemplaza lo siguiente:

      • NAMESPACE_NAME: Es el espacio de nombres de tu Pod.
      • POD_NAME: es el nombre del Pod.

      Busca eventos con uno de los siguientes motivos: ResizedPod (actualización in situ correcta) o EvictedByVPA (recreación de resguardo).

¿Qué sigue?