Ajuste de escala automático vertical de Pods


En esta página, se proporciona una descripción general del ajuste de escala automático vertical de Pods en Google Kubernetes Engine (GKE), junto con material de referencia para el recurso personalizado VerticalPodAutoscaler y los tipos relacionados.

El ajuste de escala automático vertical de Pods proporciona recomendaciones para el uso de recursos a lo largo del tiempo. Para aumentos repentinos en el uso de recursos, usa Horizontal Pod Autoscaler.

Para obtener información sobre cómo usar el ajuste de escala automático vertical de Pods, consulta Escala las solicitudes y límites de recursos de contenedores.

Si deseas obtener prácticas recomendadas sobre el ajuste de escala automático, consulta Prácticas recomendadas para ejecutar aplicaciones de Kubernetes con optimización de costos en GKE.

Cómo funciona el ajuste de escala automático vertical de Pods

El ajuste de escala automático vertical de Pods te permite analizar y configurar los recursos de CPU y memoria que requieren los Pods. En lugar de tener que configurar solicitudes y límites de CPU y solicitudes y límites de memoria actualizados para los contenedores de tu Pods, puedes configurar el ajuste de escala automático vertical de Pods a fin de proporcionar valores recomendados para las solicitudes de CPU y memoria, junto con límites que puedes usar a fin de actualizar de forma manual tus Pods. También puedes configurar el ajuste de escala automático vertical de Pods con el fin de actualizar los valores de forma automática.

El ajuste de escala automático vertical de Pods está habilitado de forma predeterminada en clústeres de Autopilot.

Ajuste de escala automático vertical de Pods en modo automático

Debido a las limitaciones de Kubernetes, la única manera de modificar los requisitos de recursos de un Pod en ejecución es volver a crear el Pod. Si creas un objeto VerticalPodAutoscaler cuyo updateMode es Auto, el VerticalPodAutoscaler expulsa un Pod si necesita cambiar sus solicitudes de recursos.

Para limitar la cantidad de reinicios del Pod, usa un presupuesto de interrupción de Pods. Para asegurarte de que tu clúster pueda controlar los tamaños nuevos de las cargas de trabajo, usa el escalador automático de clústeres y el aprovisionamiento automático de nodos.

El ajuste de escala automático vertical del Pod notifica al escalador automático de clústeres antes de la actualización y proporciona los recursos necesarios para el nuevo tamaño de la carga de trabajo antes de volver a crearla, a fin de minimizar el tiempo de interrupción.

Ventajas

El ajuste de escala automático vertical de Pods proporciona los siguientes beneficios:

  • Configurar los requisitos y límites de recursos correctos para las cargas de trabajo mejora la estabilidad y la rentabilidad. Si los tamaños de recursos de tu Pod son más pequeños de lo que requieren tus cargas de trabajo, tu aplicación puede verse limitada o puede fallar debido a errores por memoria insuficiente. Si los recursos son demasiado grandes, tendrás desperdicio y, por lo tanto, facturas más grandes.
  • Los nodos de clúster se usan de manera eficiente, porque los Pods usan exactamente los recursos que necesitan.
  • Los pods se programan en nodos que tienen los recursos adecuados disponibles.
  • No es necesario que ejecutes tareas comparativas que requieren mucho tiempo para determinar los valores correctos de requisitos de CPU y memoria.
  • Tiempo de mantenimiento reducido, ya que el escalador automático puede ajustar los requisitos de CPU y memoria con el tiempo sin que tengas que realizar ninguna acción.

El ajuste de escala automático vertical de pods de GKE proporciona los siguientes beneficios en el escalador automático de código abierto de Kubernetes:

  • Ten en cuenta el tamaño máximo de los nodos y las cuotas de los recursos para determinar el objetivo de recomendación.
  • Notifica al escalador automático del clúster para ajustar su capacidad.
  • Usa datos históricos y proporciona métricas recopiladas antes de habilitar el escalador automático vertical de Pods.
  • Ejecuta pods del escalador automático vertical de pods como procesos del plano de control, en lugar de como implementaciones en tus nodos trabajadores.

Limitaciones

  • El ajuste de escala automático vertical Pods aún no está listo para usarse con cargas de trabajo basadas en JVM debido a la visibilidad limitada del uso de memoria real de la carga de trabajo.
  • El Ajuste de escala automático vertical de Pods tiene una configuración predeterminada de dos réplicas mínimas para que los Deployments reemplacen a los Pods con valores de recursos revisados. En la versión 1.22 de GKE y las versiones posteriores, puedes anular esta configuración si especificas un valor para minReplicas en el campo PodUpdatePolicy.

Prácticas recomendadas

  • Para evitar interrupciones de la actualización del clúster, te recomendamos mantener la cantidad de objetos VerticalPodAutoscaler por clúster por debajo de 1,000.
  • El ajuste de escala automático vertical de Pods funciona mejor con cargas de trabajo homogéneas de larga duración.

Referencia de API

Esta es la referencia de la API de v1. Recomendamos enfáticamente usar esta versión de la API.

VerticalPodAutoscaler v1 autoscaling.k8s.io

Campos

TypeMeta

Grupo de API, versión y tipo

metadata

ObjectMeta

Metadatos de objeto estándar

spec

VerticalPodAutoscalerSpec

El comportamiento deseado de VerticalPodAutoscaler.

status

VerticalPodAutoscalerStatus

El estado más reciente del VerticalPodAutoscaler.

VerticalPodAutoscalerSpec v1 autoscaling.k8s.io

Campos
targetRef

CrossVersionObjectReference

Referencia al controlador que administra el conjunto de Pods que el escalador automático debe controlar, por ejemplo, un objeto Deployment o StatefulSet. Puedes apuntar un VerticalPodAutoscaler a cualquier controlador que tenga un subrecurso Scale. Por lo general, el VerticalPodAutoscaler recupera el conjunto de pods desde el ScaleStatus del controlador. En algunos controladores conocidos, como DaemonSet, el VerticalPodAutoscaler recupera el conjunto de pods desde las especificaciones del controlador.

updatePolicy

PodUpdatePolicy

Especifica si se aplican las actualizaciones recomendadas cuando se inicia un pod, y si las actualizaciones recomendadas se aplican durante la vida útil del pod.

resourcePolicy

PodResourcePolicy

Especifica las políticas sobre cómo se ajustan los requisitos de CPU y memoria para los contenedores individuales. La política de recursos se puede usar para establecer restricciones en las recomendaciones de contenedores individuales. Si no se especifica, el escalador automático procesa los recursos recomendados para todos los contenedores en el Pod, sin restricciones adicionales.

recommenders

VerticalPodAutoscalerRecommenderSelector array

Recomendador responsable de generar recomendaciones para este objeto del VPA. Deja el campo en blanco para usar el recomendador predeterminado que proporciona GKE. De lo contrario, la lista puede contener exactamente una entrada para un recomendador alternativo proporcionado por el usuario. Compatible desde GKE 1.22.

VerticalPodAutoscalerList v1 autoscaling.k8s.io

Campos

TypeMeta

Grupo de API, versión y tipo

metadata

ObjectMeta

Metadatos de objeto estándar

items

VerticalPodAutoscaler array

Una lista de objetos VerticalPodAutoscaler.

PodUpdatePolicy v1 autoscaling.k8s.io

Campos
updateMode

string

Especifica si se aplican las actualizaciones recomendadas cuando se inicia un pod, y si las actualizaciones recomendadas se aplican durante la vida útil del pod. Los valores posibles son “Apagado”, “Inicial”, “Volver a crear” y “Auto”. El valor predeterminado es "Auto" si no especificas un valor.

minReplicas

int32

Cantidad mínima de réplicas que deben estar activas para que el Actualizador intente la expulsión del Pod (pendientes de otras verificaciones, como el presupuesto de interrupción del Pod). Solo se permiten valores positivos. La configuración predeterminada es la marca global “--min-replicas”, que se establece en 2 en GKE. Compatible desde GKE 1.22.

PodResourcePolicy v1 autoscaling.k8s.io

Campos
containerPolicies

ContainerResourcePolicy array

Un arreglo de políticas de recursos para contenedores individuales Puede haber, como máximo, una entrada para cada contenedor con nombre y, opcionalmente, una entrada de comodín única con “containerName = "*"”, que maneje todos los contenedores que no tienen políticas individuales.

ContainerResourcePolicy v1 autoscaling.k8s.io

Campos
containerName

string

El nombre del contenedor al cual se aplica la política. Si no se especifica, la política se usa como política predeterminada.

mode

ContainerScalingMode

Especifica si se aplican las actualizaciones recomendadas cuando se inicia un contenedor, y si las actualizaciones recomendadas se aplican durante la vida útil del contenedor. Los valores posibles son “Apagado” o “Auto”. El valor predeterminado es "Auto" si no especificas un valor.

minAllowed

ResourceList

Especifica los requisitos de CPU y memoria mínimos que se permiten para el contenedor. De forma predeterminada, no hay un valor mínimo aplicado.

maxAllowed

ResourceList

Especifica los requisitos de CPU y memoria máximos permitidos para el contenedor. De forma predeterminada, no hay un valor máximo aplicado.

ControlledResources

[]ResourceName

Especifica el tipo de recomendaciones que procesará (y que probablemente aplicará) el VerticalPodAutoscaler. Si está vacío, se usa el valor predeterminado [ResourceCPU, ResourceMemory].

VerticalPodAutoscalerRecommenderSelector v1 autoscaling.k8s.io

Campos
name

string

Nombre del recomendador responsable de generar recomendaciones para este objeto.

VerticalPodAutoscalerStatus v1 autoscaling.k8s.io

Campos
recommendation

RecommendedPodResources

Los requisitos de CPU y memoria recomendados más recientes

conditions

VerticalPodAutoscalerCondition array

Describe el estado actual del VerticalPodAutoscaler.

RecommendedPodResources v1 autoscaling.k8s.io

Campos
containerRecommendation

RecommendedContainerResources array

Un arreglo de recomendaciones de recursos para contenedores individuales

RecommendedContainerResources v1 autoscaling.k8s.io

Campos
containerName

string

El nombre del contenedor al cual se aplica la recomendación.

target

ResourceList

Los requisitos de CPU y memoria recomendados para el contenedor.

lowerBound

ResourceList

Los requisitos de CPU y memoria mínimos recomendados para el contenedor. No se garantiza que esta cantidad sea suficiente para que la aplicación permanezca estable. Es probable que la ejecución con menos requisitos de CPU y memoria tenga un impacto considerable en el rendimiento o la disponibilidad.

upperBound

ResourceList

Los requisitos de CPU y memoria máximos recomendados para el contenedor. Es probable que los requisitos de CPU y memoria que superen estos valores se desperdicien.

uncappedTarget

ResourceList

La recomendación de recursos más reciente que procesó el escalador automático, en función del uso real de recursos y sin tener en cuenta la ContainerResourcePolicy. Si el uso real de los recursos hace que el objetivo viole la ContainerResourcePolicy, esto podría ser diferente de la recomendación limitada. Este campo no afecta la asignación real de recursos. Solo se usa como indicador de estado.

VerticalPodAutoscalerCondition v1 autoscaling.k8s.io

Campos
type

VerticalPodAutoscalerConditionType

El tipo de condición que se describe. Los valores posibles son “RecommendationProvided”, “LowConfidence”, “NoPodsMatched” y “FetchingHistory”.

status

ConditionStatus

El estado de la condición. Los posibles valores son Verdadero, Falso y Desconocido.

lastTransitionTime

Time

La última vez que la condición hizo una transición de un estado a otro.

reason

string

La razón por la cual se realizó la última transición de un estado a otro.

message

string

Una string legible que proporciona detalles sobre la última transición de un estado a otro

¿Qué sigue?