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:
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
Modifica el
spec
del recurso personalizado Cluster para incluir el campoverticalPodAutoscaling
y especificar los modosenableUpdater
yenableMemorySaver
: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
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:
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"]
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 manifiestoVerticalPodAutoscaler
.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 aRecreate
.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 objetoVerticalPodAutoscaler
.
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:
Borra los recursos personalizados de
VerticalPodAutoscaler
que hayas creado.Modifica el recurso personalizado Cluster y quita toda la sección
verticalPodAutoscaling
despec
.Puedes editar el recurso personalizado de Cluster directamente o modificar el archivo de configuración del clúster y usar
bmctl update
.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?
- Explora los presupuestos de interrupción de Pods.