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, y se proporciona material de referencia para el recurso personalizado VerticalPodAutoscaler y los tipos relacionados.

También puedes obtener información sobre cómo configurar el ajuste de escala automático vertical de Pods.

Descripción general

El ajuste de escala automático vertical de Pods te evita tener que pensar en qué valores especificar para las solicitudes y límites de CPU y las solicitudes y límites de memoria. El escalador automático te puede recomendar valores de solicitudes de CPU y memoria o puede actualizar de manera automática los valores.

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

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

  • Se reduce el tiempo de mantenimiento, ya que el escalador automático puede ajustar los requisitos de CPU y memoria en el tiempo sin que tengas que realizar ninguna acción.

El ajuste de escala automático vertical de pods de Google Kubernetes Engine (GKE) proporciona estos 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, que proporcionan métricas recopiladas antes de que el escalador automático vertical de pods se habilite.

  • 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 del Ajuste de escala automático vertical de Pods:

  • El Ajuste de escala automático vertical de Pods admite un máximo de 500 objetos VerticalPodAutoscaler por clúster.

  • El Ajuste de escala automático vertical de Pods es compatible con los clústeres regionales a partir de la versión 1.12.6.

  • Para usar el Ajuste de escala automático vertical de Pods con Ajuste de escala automático horizontal de Pods, usa el Ajuste de escala automático multidimensional de Pods. También puedes usar el Ajuste de escala automático vertical de Pods con Ajuste de escala automático horizontal de Pods en métricas personalizadas y externas.

  • 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 de memoria real de la carga de trabajo.

  • El Ajuste de escala automático vertical de Pods no puede aplicar de forma automática las recomendaciones de los sidecars incorporados. Si creas un objeto VerticalPodAutoscaler para un pod con sidecars incorporados que tengan un updateMode que no sea "Off", esos sidecars deben inhabilitarse mediante la política de recursos de contenedores. Consulta ContainerResourcePolicy en la sección de referencia y cómo inhabilitar contenedores específicos.

    Uno de los problemas conocidos es el uso del Ajuste de escala automático vertical de Pods junto con Istio. Esta limitación afecta a los sidecars de Istio. Si deseas resolver el problema, usa este comando para extender la especificación VerticalPodAutoscaler que definiste, de modo que se inhabilite el sidecar de Istio:

    resourcePolicy:
      containerPolicies:
      - containerName: istio-proxy
        mode: "Off"
    

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 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 se proporcionan 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.

Referencia

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 del 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, VerticalPodAutoscaler recupera el conjunto de pods desde el ScaleStatus del controlador. En algunos controladores conocidos, como DaemonSet, 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 calcula los recursos recomendados para todos los contenedores en el Pod, sin restricciones adicionales.

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 de 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”.

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

minAllowed

ResourceList

Especifica los requisitos de CPU y memoria mínimos que se permiten para el contenedor.

maxAllowed

ResourceList

Especifica los requisitos de CPU y memoria máximos permitidos para el contenedor.

ControlledResources

[]ResourceName

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

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?