El autoescalado vertical de pods automatiza la configuración de las solicitudes y los límites de recursos de CPU y memoria de los contenedores de los pods de Kubernetes. El autoescalado 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 del tamaño adecuado.
Antes de empezar
Antes de configurar el autoescalado vertical de pods, asegúrate de que cumples los siguientes requisitos previos:
- Tienes un clúster de bare metal en ejecución.
- Tienes acceso
kubectl
al clúster. - Metrics Server está disponible en el clúster. Los clústeres Bare Metal incluyen Metrics Server de forma predeterminada.
Habilitar el autoescalado de pods vertical
Habilita el autoescalado vertical de pods en tu clúster de bare metal configurando una anotación de vista previa y la especificación del clúster:
Añade o actualiza la anotación de vista previa en el recurso personalizado Cluster.
Edita directamente el recurso personalizado Cluster 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 especifica 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 has modificado el archivo de configuración del clúster, aplica los cambios con el siguiente comando:
bmctl update cluster -c CLUSTER_NAME --kubeconfig KUBECONFIG
Haz los cambios siguientes:
CLUSTER_NAME
: el nombre de tu clúster.KUBECONFIG
: la ruta del archivo kubeconfig de tu clúster.
Crear un recurso personalizado VerticalPodAutoscaler
Después de habilitar el autoescalado vertical de pods en tu clúster, define un recurso personalizado VerticalPodAutoscaler
para orientarlo a 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 mediante
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
Haz los cambios siguientes:
VPA_MANIFEST
: la ruta del archivo de manifiestoVerticalPodAutoscaler
.KUBECONFIG
: la ruta del archivo kubeconfig del clúster.
Información sobre los modos de autoescalado de pods vertical
El autoescalado de pods vertical funciona en diferentes modos que controlan cómo aplica las recomendaciones de recursos.
Modo de recomendación
En el modo de recomendación, el autoescalado de pods vertical 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 VerticalPodAutoscaler
recursos personalizados que crees.
Para ver las recomendaciones de solicitudes y límites 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:
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
Los pods no se actualizan automáticamente en este modo. Sigue estas recomendaciones para actualizar manualmente las configuraciones de tus pods. Este es el comportamiento predeterminado si
enableUpdater
no se define o es false
.
Modo de actualización automática
Cuando asignas el valor true
a
enableUpdater
enableUpdater
, los controladores del ciclo de vida de hardware desnudo implementan los componentes de actualización y de controlador de admisión del autoescalado de pods vertical, además del componente de recomendación. El actualizador monitoriza los pods cuyas solicitudes de recursos actuales se desvían significativamente de las recomendaciones.
La política de actualización del recurso VerticalPodAutoscaler
especifica cómo aplica el actualizador las recomendaciones. De forma predeterminada, el modo de actualización es Auto
,
que indica que el actualizador asigna los ajustes de recursos actualizados al crear el pod. En el siguiente ejemplo VerticalPodAutoscaler
se muestra cómo definir 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 cinco modos siguientes:
Auto
: el actualizador expulsa el pod. El controlador de admisión intercepta la solicitud de creación del nuevo pod y la modifica para que use los valores de CPU y memoria recomendados que proporciona el recomendador. Para actualizar los recursos, es necesario volver a crear el pod, lo que puede provocar interrupciones. Usa Pod Disruption Budgets (Presupuestos de interrupción de pods), que el actualizador respeta, para gestionar el proceso de desalojo. Este modo es equivalente aRecreate
.Recreate
: el actualizador expulsa los pods y asigna los límites y las solicitudes de recursos recomendados cuando se vuelve a crear el pod.InPlaceOrRecreate
(alfa): El actualizador intenta realizar actualizaciones in situ de la mejor forma posible, pero puede volver a crear el pod si no es posible realizar actualizaciones in situ. Para obtener más información, consulta la documentación sobre el cambio de tamaño de los pods in situ.Initial
: el actualizador solo asigna solicitudes de recursos al crear el pod y nunca las cambia después.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
, utilice 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 pueden aparecer las recomendaciones de recursos en la sección Status
del contenedor hamster
. La muestra también muestra un ejemplo de un evento de desalojo de un pod, que se produce cuando el actualizador desalojo 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 Ahorro de memoria
El modo Ahorro de memoria reduce el espacio de memoria del componente de recomendación de autoescalado de pods vertical. Cuando asignas el valor true
a
enableMemorySaver
, la herramienta de recomendaciones solo monitoriza y calcula las agregaciones de los pods que tienen un recurso personalizado VerticalPodAutoscaler
coincidente.
La contrapartida es que, cuando creas un VerticalPodAutoscaler
recurso personalizado
para una carga de trabajo, el recomendador tarda un tiempo (hasta 24 horas) en recoger el historial suficiente para ofrecer recomendaciones precisas. Este modo está false
de forma predeterminada en la mayoría de los tipos de clústeres, pero es true
en los clústeres perimetrales.
Inhabilitar el autoescalado de pods vertical
Para inhabilitar el autoescalado vertical de pods, elimina sus recursos personalizados y su configuración del clúster:
Elimina los recursos personalizados de
VerticalPodAutoscaler
que hayas creado.Modifica el recurso personalizado Cluster y elimina toda la sección
verticalPodAutoscaling
despec
.Puedes editar directamente el recurso personalizado Cluster 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 al usar el autoescalado de pods vertical:
- El autoescalado vertical de pods no está listo para usarse con cargas de trabajo basadas en JVM debido a la visibilidad limitada del uso real de memoria de la carga de trabajo.
- El actualizador requiere un mínimo de dos réplicas de Pod para que los despliegues sustituyan los Pods por valores de recursos revisados.
- El actualizador no actualiza rápidamente los pods que están en bucle de fallos debido a errores de falta de memoria (OOM).
- La política de actualización
InPlaceOrRecreate
de los pods es una función alfa del autoescalado vertical de pods. Intenta realizar actualizaciones in situ de la mejor forma posible, pero puede volver a crear el pod si no es posible realizar actualizaciones in situ.
Siguientes pasos
- Consulta Coberturas para interrupciones de pods.