Uso de la escala automática de pod vertical de Kubernetes
Descubra cómo utilizar la escala automática de pod vertical de Kubernetes para ajustar automáticamente las solicitudes de recursos y los límites de los contenedores que se ejecutan en pods en un cluster que ha creado mediante Container Engine for Kubernetes (OKE).
No puede utilizar la escala automática de pod vertical de Kubernetes con pools de nodos virtuales.
- Defina las solicitudes automáticamente en función del uso para asegurarse de que la cantidad de recursos adecuada esté disponible para cada pod.
- Mantener ratios entre solicitudes y límites especificados en las configuraciones iniciales de contenedores.
- Reducir verticalmente pods que solicitan un exceso de recursos, en función de su uso a lo largo del tiempo.
- Escalar verticalmente pods que solicitan demasiados pocos recursos, en función de su uso a lo largo del tiempo.
La escala automática de pod vertical tiene tres componentes:
- Recomendador: supervisa el consumo de recursos actual y anterior, y proporciona valores de solicitud de CPU y memoria recomendados para un contenedor.
- Actualizador: comprueba si hay pods con recursos incorrectos y los suprime para que los pods puedan volver a crearse con los valores de solicitud actualizados.
- Plugin de admisión: define las solicitudes de recursos correctas en nuevos pods (es decir, nuevos pods creados o creados de nuevo por su controlador debido a los cambios realizados por el Actualizador).
Para obtener más información, consulte la sección sobre la escala automática de pod vertical y la sección sobre la gestión de recursos para contenedores en la documentación de Kubernetes.
Puede configurar la escala automática de pod vertical mediante el objeto de definición de recurso personalizado VerticalPodAutoscaler
. El objeto VerticalPodAutoscaler
permite especificar los pods para escala automática vertical y las recomendaciones de recursos que se deben aplicar (si las hay). Para obtener más información, consulte la sección sobre el objeto VerticalPodAutoscaler y la sección sobre la definición de recursos personalizados en la documentación de Kubernetes.
La escala automática de pod vertical requiere la instalación de un origen de métricas, como el servidor de métricas de Kubernetes, en el cluster. Para obtener más información, consulte Despliegue del servidor de métricas de Kubernetes en un cluster.
Sustitución de rangos límite
La escala automática de pod vertical intenta hacer recomendaciones dentro de los valores mínimos y máximos especificados por un rango límite, si se ha definido uno. Sin embargo, si el rango límite aplicable entra en conflicto con los valores especificados en la sección resourcePolicy
del manifiesto VerticalPodAutoscaler
, la escala automática de pod vertical da prioridad a la política de recursos y hace recomendaciones en consecuencia (incluso si los valores están fuera del rango límite). Para obtener más información, consulte la sección sobre rangos límite y la sección sobre la política de recursos que sustituye el rango límite en la documentación de Kubernetes.
Creación de recomendaciones sin aplicarlas
Puede utilizar la escala automática de pod vertical para crear y aplicar recomendaciones, o simplemente para crear recomendaciones (sin actualizar pods). Para simplemente crear recomendaciones sin aplicarlas, defina updateMode: "Off"
en la sección updatePolicy
del manifiesto VerticalPodAutoscaler
.
Cuando se crean pods, la escala automática de pod vertical analiza las necesidades de CPU y memoria de los contenedores, y registra esas recomendaciones en su campo Status
. La escala automática de pod vertical no realiza ninguna acción para actualizar las solicitudes de recursos para los contenedores en ejecución.
Exclusión de contenedores específicos
Puede utilizar la escala automática de pod vertical para crear y aplicar recomendaciones a todos los contenedores de un pod o excluir selectivamente contenedores concretos. A fin de desactivar las recomendaciones para un contenedor concreto, en la sección resourcePolicy
del manifiesto VerticalPodAutoscaler
, especifique un containerName
y defina mode: "Off"
en la sección containerPolicies
.
Notas sobre la escala automática de pod vertical
Tenga en cuenta lo siguiente:
- Actualmente, se recomienda no utilizar la escala automática de pod vertical con la escala automática de pod horizontal en las métricas de uso de CPU o memoria. Sin embargo, tenga en cuenta que puede utilizar la escala automática de pod vertical con la escala automática de pod horizontal en métricas personalizadas y externas. Consulte la sección sobre soporte para obtener métricas personalizadas en la documentación de Kubernetes.
- Las recomendaciones de la escala automática de pod vertical pueden exceder los recursos disponibles (por ejemplo, tamaño de nodo, tamaño disponible, cuota disponible). Tenga en cuenta que la aplicación de las recomendaciones puede causar que los pods entren en un estado pendiente.
- Cada vez que la escala automática de pod vertical actualiza los recursos de pod, se vuelve a crear el pod, lo que hace que se reinicien todos los contenedores en ejecución. Tenga en cuenta que el pod puede volver a crearse en un nodo diferente.
- Puede utilizar la escala automática de pod vertical de Kubernetes con pools de nodos gestionados, pero no con pools de nodos virtuales.
Trabajo con la escala automática de pod vertical
Las siguientes instrucciones le guiarán a través del despliegue de la escala automática de pod vertical en un cluster. Describen cómo:
- Verificar que el servidor de métricas de Kubernetes se ha instalado en un cluster.
- Descargar y desplegar la escala automática de pod vertical.
- Desplegar una aplicación de ejemplo.
- Ver la operación de escala en acción.
- Ver la recomendación.
- Limpie eliminando la aplicación de ejemplo y la escala automática de pod vertical.
Paso 1: Verificar la instalación del servidor de métricas de Kubernetes
-
Si todavía no lo ha hecho, siga los pasos para configurar el archivo de configuración kubeconfig del cluster y (si es necesario) defina la variable de entorno KUBECONFIG para que apunte al archivo. Tenga en cuenta que debe configurar su propio archivo kubeconfig. No puede acceder a un cluster utilizando un archivo kubeconfig que haya configurado un usuario diferente. Consulte Configuración del acceso a los clusters.
-
Confirme que el servidor de métricas de Kubernetes se ha desplegado correctamente en el cluster y que está disponible introduciendo:
kubectl -n kube-system get deployment/metrics-server
Si el comando devuelve un error "No encontrado", debe desplegar el servidor de métricas de Kubernetes en el cluster antes de continuar. Consulte Despliegue del servidor de métricas de Kubernetes en un cluster.
Paso 2: Descargar y desplegar la escala automática de pod vertical
- Descargue el código fuente de la escala automática de pod vertical de GitHub. Por ejemplo, introduzca:
git clone -b vpa-release-0.8 https://github.com/kubernetes/autoscaler.git
-
Cambie al directorio
vertical-pod-autoscaler
:cd autoscaler/vertical-pod-autoscaler
-
Si ya ha desplegado la escala automática de pod vertical, suprímala introduciendo:
./hack/vpa-down.sh
-
Despliegue la escala automática de pod vertical introduciendo:
./hack/vpa-up.sh
-
Verifique que los pods de la escala automática de pod vertical se han creado correctamente introduciendo:
kubectl get pods -n kube-system
La salida del comando anterior muestra los pods:
vpa-admission-controller-59d9965cfb-bzs8l 1/1 Running 0 6m34s vpa-recommender-5bcb58569-mqdds 1/1 Running 0 6m43s vpa-updater-5979cbf757-scw2d 1/1 Running 0 6m46s
Tenga en cuenta que probablemente verá diferentes nombres y números.
Paso 3: Desplegar la aplicación de ejemplo
- Despliegue la aplicación hámster de ejemplo para crear un despliegue y una escala automática de pod vertical correspondiente introduciendo:
kubectl apply -f examples/hamster.yaml
La salida del comando anterior confirma el despliegue y la creación:
verticalpodautoscaler.autoscaling.k8s.io/hamster-vpa created deployment.apps/hamster created
El despliegue de la aplicación hámster crea un despliegue con dos pods y una escala automática de pod vertical que apunta al despliegue.
- Verifique que los pods hámster se han creado correctamente introduciendo:
kubectl get pods -l app=hamster
La salida del comando anterior confirma la creación:
NAME READY STATUS RESTARTS AGE hamster-7cbfd64f57-mqqnk 1/1 Running 0 54s hamster-7cbfd64f57-rq6wv 1/1 Running 0 55s
Tenga en cuenta que probablemente verá diferentes nombres para los pods hámster.
- Vea las reservas de CPU y memoria mediante el comando
kubectl describe pod
y uno de los nombres de pod hámster devueltos en el paso anterior. Por ejemplo:kubectl describe pod hamster-7cbfd64f57-rq6wv
Tenga en cuenta que el comando anterior es solo un ejemplo. Debe utilizar uno de los nombres de pod hámster que se devolvieron al ejecutar el comando
kubectl get pods -l app=hamster
en el paso anterior.En la sección de solicitudes de la salida, puede ver las reservas actuales de CPU y memoria del pod. Por ejemplo:
Requests: cpu: 100m memory: 50Mi
La escala automática de pod vertical (específicamente, el Recomendador) analiza los pods y observa su comportamiento para determinar si estas reservas de CPU y memoria son adecuadas. Tenga en cuenta que puede ver diferentes reservas de CPU y memoria.
Las reservas no son suficientes porque la aplicación hámster de ejemplo tiene deliberadamente recursos insuficientes. Cada pod ejecuta un solo contenedor que:
- solicita 100 milinúcleos, pero intenta utilizar más de 500 milinúcleos
- reserva mucho menos memoria de la que necesita para ejecutarse
Paso 4: Ver la operación de escala
Tras analizar los pods originales en la aplicación hámster de ejemplo y determinar que las reservas de CPU y memoria son inadecuadas, la escala automática de pod vertical (específicamente, el Actualizador) vuelve a iniciar los pods con diferentes valores, como propone el Recomendador. Tenga en cuenta que la escala automática de pod vertical no modifica la plantilla en el despliegue, sino que actualiza las solicitudes reales de los pods.
-
Supervise los pods de la aplicación hámster de ejemplo y espere a que el Actualizador inicie un nuevo pod hámster con un nuevo nombre, introduciendo:
kubectl get --watch pods -l app=hamster
-
Cuando vea que se ha iniciado un nuevo pod hámster, vea sus reservas de CPU y memoria mediante el comando
kubectl describe pod
y el nombre del pod. Por ejemplo:kubectl describe pod hamster-7cbfd64f57-wmg4
En la sección de solicitudes de la salida, puede ver las reservas nuevas de CPU y memoria del pod.
Requests: cpu: 587m memory: 262144k
En el ejemplo anterior, observe que la reserva de CPU ha aumentado a 587 milinúcleos y que la reserva de memoria ha aumentado a 262 144 kilobytes. El pod original tenía recursos insuficientes y la escala automática de pod vertical ha corregido las reservas originales con valores más apropiados. Tenga en cuenta que puede ver diferentes reservas de CPU y memoria.
Paso 5: Ver la recomendación
Para ver las recomendaciones de la escala automática de pod vertical (específicamente, del Recomendador), introduzca:
kubectl describe vpa/hamster-vpa
La salida del comando anterior muestra las recomendaciones:
Name: hamster-vpa
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"autoscaling.k8s.io/v1beta2","kind":"VerticalPodAutoscaler","metadata":{"annotations":{},"name":"hamster-vpa","namespace":"d...
API Version: autoscaling.k8s.io/v1
Kind: VerticalPodAutoscaler
Metadata:
Creation Timestamp: 2020-09-22T18:08:09Z
Generation: 27
Resource Version: 19466955
Self Link: /apis/autoscaling.k8s.io/v1/namespaces/default/verticalpodautoscalers/hamster-vpa
UID: 689cee90-6fed-404d-adf9-b6fa8c1da660
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: 2020-09-22T18:10:10Z
Status: True
Type: RecommendationProvided
Recommendation:
Container Recommendations:
Container Name: hamster
Lower Bound:
Cpu: 519m
Memory: 262144k
Target:
Cpu: 587m
Memory: 262144k
Uncapped Target:
Cpu: 587m
Memory: 262144k
Upper Bound:
Cpu: 1
Memory: 500Mi
Events: <none>
Tenga en cuenta que puede ver diferentes recomendaciones.
Paso 6: Limpiar
- Elimine la aplicación de ejemplo introduciendo:
kubectl delete -f examples/hamster.yaml
-
En el directorio
vertical-pod-autoscaler
, suprima el despliegue de la escala automática de pod vertical introduciendo:./hack/vpa-down.sh