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
- 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 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 | |
---|---|
|
Grupo de API, versión y tipo |
metadata |
Metadatos de objeto estándar |
spec |
El comportamiento deseado de |
status |
El estado más reciente del |
VerticalPodAutoscalerSpec v1 autoscaling.k8s.io
Campos | |
---|---|
targetRef |
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 |
updatePolicy |
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 |
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 |
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 | |
---|---|
|
Grupo de API, versión y tipo |
metadata |
Metadatos de objeto estándar |
items |
Una lista de objetos |
PodUpdatePolicy v1 autoscaling.k8s.io
Campos | |
---|---|
updateMode |
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 |
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 |
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 |
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 |
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 |
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 |
Especifica los requisitos de CPU y memoria máximos permitidos para el contenedor. De forma predeterminada, no hay un valor máximo aplicado. |
ControlledResources |
Especifica el tipo de recomendaciones que procesará (y que probablemente aplicará) el |
VerticalPodAutoscalerRecommenderSelector v1 autoscaling.k8s.io
Campos | |
---|---|
name |
Nombre del recomendador responsable de generar recomendaciones para este objeto. |
VerticalPodAutoscalerStatus v1 autoscaling.k8s.io
Campos | |
---|---|
recommendation |
Los requisitos de CPU y memoria recomendados más recientes |
conditions |
Describe el estado actual del |
RecommendedPodResources v1 autoscaling.k8s.io
Campos | |
---|---|
containerRecommendation |
Un arreglo de recomendaciones de recursos para contenedores individuales |
RecommendedContainerResources v1 autoscaling.k8s.io
Campos | |
---|---|
containerName |
El nombre del contenedor al cual se aplica la recomendación. |
target |
Los requisitos de CPU y memoria recomendados para el contenedor. |
lowerBound |
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 |
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 |
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 |
El tipo de condición que se describe. Los valores posibles son “RecommendationProvided”, “LowConfidence”, “NoPodsMatched” y “FetchingHistory”. |
status |
El estado de la condición. Los posibles valores son Verdadero, Falso y Desconocido. |
lastTransitionTime |
La última vez que la condición hizo una transición de un estado a otro. |
reason |
La razón por la cual se realizó la última transición de un estado a otro. |
message |
Una string legible que proporciona detalles sobre la última transición de un estado a otro |
¿Qué sigue?
- Obtén información sobre cómo escalar las solicitudes y los límites de los recursos del contenedor.
- Obtén información sobre las prácticas recomendadas para ejecutar aplicaciones de Kubernetes con optimización de costos en GKE.
- Obtén más información sobre el escalador automático de clústeres.