En esta página, se explica cómo puedes analizar y ajustar las solicitudes de CPU y las solicitudes de memoria de un contenedor en un clúster de Google Kubernetes Engine (GKE) mediante el Ajuste de escala automático vertical de Pods.
Puedes escalar los recursos de contenedor de forma manual a través de la consola de Google Cloud, analizar los recursos con un objeto VerticalPodAutoscaler
o configurar el ajuste de escala automático mediante el ajuste de escala automático vertical de Pods.
Antes de comenzar
Antes de comenzar, asegúrate de haber realizado las siguientes tareas:
- Habilita la API de Kubernetes Engine de Google. Habilitar la API de Kubernetes Engine de Google
- Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta
gcloud components update
para obtener la versión más reciente.
Analiza las solicitudes de recursos
El escalador automático vertical de Pods analiza tus contenedores de forma automática y proporciona solicitudes de recursos sugeridas. Puedes ver estas solicitudes de recursos con la consola de Gppgñe Cloud, Cloud Monitoring o Google Cloud CLI.
Consola
Para ver las solicitudes de recursos sugeridas en la consola de Google Cloud, debes tener implementada una carga de trabajo existente que tenga al menos 24 horas. Es posible que algunas sugerencias no estén disponibles o no sean relevantes para ciertas cargas de trabajo, como las que se crearon en las últimas 24 horas, los Pods independientes y las apps escritas en Java.
Ve a la página Cargas de trabajo en la consola de Google Cloud.
En la lista de cargas de trabajo, haz clic en el nombre de la carga de trabajo que deseas escalar.
Haz clic en list Acciones > Escalar > Editar solicitudes de recursos.
En la sección Analiza datos de uso de recursos, se muestran datos históricos de uso que el controlador del escalador automático vertical de Pods analizó para crear las solicitudes de recursos sugeridas en la sección Ajusta las solicitudes y límites de recursos.
Cloud Monitoring
Para ver las solicitudes de recursos sugeridas en Cloud Monitoring, debes tener una carga de trabajo existente implementada.
Ve a la página Explorador de métricas en la consola de Google Cloud.
Haz clic en Configuración.
Expande el menú Seleccionar una métrica.
En el menú Recurso, selecciona Escala de Kubernetes.
En el menú Categoría de métrica, selecciona Escalador automático.
En el menú Métrica, selecciona Recomendado por bytes de solicitudes de réplica y Recomendado por núcleo de solicitud de réplica.
Haga clic en Aplicar.
CLI de gcloud
Para ver las solicitudes de recursos sugeridas, debes crear un objeto VerticalPodAutoscaler
y una implementación.
En el caso de los clústeres estándar, habilita el ajuste de escala automático vertical de Pods en tu clúster. En el caso de los clústeres Autopilot, Ajuste de escala automático vertical de Pods está habilitado de forma predeterminada.
gcloud container clusters update CLUSTER_NAME --enable-vertical-pod-autoscaling
Reemplaza
CLUSTER_NAME
por el nombre del clúster.Guarda el siguiente manifiesto como
my-rec-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: my-rec-deployment spec: replicas: 2 selector: matchLabels: app: my-rec-deployment template: metadata: labels: app: my-rec-deployment spec: containers: - name: my-rec-container image: nginx
En este manifiesto, se describe una
Deployment
que no tiene solicitudes de CPU ni de memoria. El valorcontainers.name
demy-rec-deployment
especifica que todos los Pods en la implementación pertenecen aVerticalPodAutoscaler
.Aplica el manifiesto al clúster:
kubectl create -f my-rec-deployment.yaml
Guarda el siguiente manifiesto como
my-rec-vpa.yaml
:apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: my-rec-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: my-rec-deployment updatePolicy: updateMode: "Off"
En este manifiesto, se describe un
VerticalPodAutoscaler
. El valorupdateMode
deOff
significa que, cuando se crean los pods, el controlador del escalador automático vertical de Pods analiza las necesidades de CPU y memoria de los contenedores y registra esas recomendaciones en el campostatus
del recurso. El controlador del escalador automático vertical de Pods no actualiza de forma automática las solicitudes de recursos para ejecutar contenedores.Aplica el manifiesto al clúster:
kubectl create -f my-rec-vpa.yaml
Después de un tiempo, observa
VerticalPodAutoscaler
:kubectl get vpa my-rec-vpa --output yaml
El resultado es similar a este:
... recommendation: containerRecommendations: - containerName: my-rec-container lowerBound: cpu: 25m memory: 262144k target: cpu: 25m memory: 262144k upperBound: cpu: 7931m memory: 8291500k ...
El resultado muestra recomendaciones para requisitos de CPU y memoria.
Configura las solicitudes de recursos de Pods de forma manual
Puedes configurar las solicitudes de recursos de Pods de forma manual con Google Cloud CLI o la consola de Google Cloud.
Consola
Ve a la página Cargas de trabajo en la consola de Google Cloud.
En la lista de cargas de trabajo, haz clic en el nombre de la carga de trabajo que deseas escalar.
Haz clic en list Acciones > Escalar > Editar solicitudes de recursos.
- En la sección Ajusta las solicitudes y límites de recursos, se muestran las solicitudes actuales de CPU y memoria para cada contenedor, así como las solicitudes de CPU y memoria sugeridas.
Haz clic en Aplicar las sugerencias más recientes para ver las solicitudes sugeridas de cada contenedor.
Haz clic en Save Changes.
Haz clic en Confirmar.
gcloud
Para configurar las solicitudes de recursos de un Pod, configura los valores requests.cpu y memory.cpu en tu manifiesto de Deployment. En este ejemplo, modificas de forma manual la implementación creada en Analiza las solicitudes de recursos con solicitudes de recursos sugeridos.
Guarda el siguiente manifiesto de ejemplo como
my-adjusted-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: my-rec-deployment spec: replicas: 2 selector: matchLabels: app: my-rec-deployment template: metadata: labels: app: my-rec-deployment spec: containers: - name: my-rec-container image: nginx resources: requests: cpu: 25m memory: 256Mi
Este manifiesto describe una implementación que tiene dos Pods. Cada Pod tiene un contenedor que requiere 25 millicores de CPU y 256 MiB de memoria.
Aplica el manifiesto al clúster:
kubectl apply -f my-adjusted-deployment.yaml
También puedes aplicar los cambios de forma manual si sigues estos pasos:
Ve a la página Cargas de trabajo en la consola de Google Cloud.
En la lista de cargas de trabajo, haz clic en el nombre de la carga de trabajo que deseas escalar.
Haz clic en list Acciones > Escalar > Editar solicitudes de recursos.
Configura tus solicitudes de contenedor.
Haz clic en Obtener equivalente de YAML.
Haz clic en Descargar Workload o copia y pega el manifiesto en un archivo llamado
resource-adjusted.yaml
.Aplica el manifiesto al clúster:
kubectl create -f resource-adjusted.yaml
Establece solicitudes de recursos de Pods de forma automática
El Ajuste de escala automático vertical de Pods usa el objeto VerticalPodAutoscaler
para configurar de forma automática las solicitudes de recursos en los Pods cuando updateMode
es Auto
. Puedes configurar un VerticalPodAutoscaler
con la CLI de gcloud o la consola de Google Cloud.
Consola
Para configurar las solicitudes de recursos de forma automática, debes tener habilitado un clúster con la función de ajuste de escala automático vertical de Pods. Los clústeres de Autopilot tienen la función de ajuste de escala automático vertical de Pods habilitada de forma predeterminada.
Habilita el ajuste de escala automático vertical de Pods
Ve a la página de Google Kubernetes Engine en la consola de Google Cloud:
En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.
En la sección Automatización, haz clic en editEditar en la opción Ajuste de escala automático vertical de Pods.
Selecciona la casilla de verificación Habilitar Ajuste de escala automático vertical de Pods.
Haga clic en Guardar cambios.
Configura el ajuste de escala automático vertical de Pods
Ve a la página Cargas de trabajo en la consola de Google Cloud.
En la lista de cargas de trabajo, haz clic en el nombre de la implementación para la que deseas configurar el ajuste de escala automático vertical de Pods.
Haz clic en listAcciones > Ajustar escala automáticamente > Ajuste de escala automático vertical de Pods.
Elige un modo de ajuste de escala automático:
- Modo automático: Ajuste de escala automático vertical de Pods actualiza las solicitudes de CPU y memoria durante la vida útil de un Pod.
- Modo inicial: Ajuste de escala automático vertical de Pods asigna solicitudes de recursos solo durante la creación del Pod y nunca las cambia más adelante.
Configura políticas de contenedores (opcional). Esta opción te permite asegurarte de que la recomendación nunca se configure por encima o por debajo de una solicitud de recursos especificada.
- Haz clic en expand_more Agregar política.
- Selecciona Automático para Editar modo de contenedor.
- En Recursos controlados, selecciona los recursos en los que deseas escalar de forma automática el contenedor.
- Haz clic en Agregar regla a fin de establecer uno o más rangos mínimos o máximos para las solicitudes de recursos del contenedor:
- Mín. memoria permitida: La cantidad mínima de memoria que el contenedor siempre debe tener, en MiB.
- Mínimo CPU permitida: la cantidad mínima de CPU que el contenedor siempre debe tener, en mCPU.
- Cantidad máxima de memoria permitida: la cantidad máxima de memoria que el contenedor siempre debe tener, en MiB.
- Cantidad máxima de CPU permitida: La cantidad máxima de CPU que el contenedor siempre debe tener, en mCPU.
Haga clic en Listo.
Haz clic en Guardar.
gcloud
Para configurar las solicitudes de recursos de forma automática, debes usar un clúster que tenga habilitada la función de ajuste de escala automático vertical de Pods. Los clústeres de Autopilot tienen la función habilitada de forma predeterminada.
En el caso de los clústeres estándar, habilita el ajuste de escala automático vertical de Pods en tu clúster:
gcloud container clusters update CLUSTER_NAME --enable-vertical-pod-autoscaling
Reemplaza
CLUSTER_NAME
por el nombre del clúster.Guarda el siguiente manifiesto como
my-auto-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: my-auto-deployment spec: replicas: 2 selector: matchLabels: app: my-auto-deployment template: metadata: labels: app: my-auto-deployment spec: containers: - name: my-container image: registry.k8s.io/ubuntu-slim:0.1 resources: requests: cpu: 100m memory: 50Mi command: ["/bin/sh"] args: ["-c", "while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done"]
Este manifiesto describe una implementación que tiene dos Pods. Cada pod tiene un contenedor que requiere 100 millicores de CPU y 50 MiB de memoria.
Aplica el manifiesto al clúster:
kubectl create -f my-auto-deployment.yaml
Enumera los pods en ejecución:
kubectl get pods
En el resultado se muestran los nombres de los Pods en
my-deployment
:NAME READY STATUS RESTARTS AGE my-auto-deployment-cbcdd49fb-d6bf9 1/1 Running 0 8s my-auto-deployment-cbcdd49fb-th288 1/1 Running 0 8s
Guarda el siguiente manifiesto como
my-vpa.yaml
:apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: my-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: my-auto-deployment updatePolicy: updateMode: "Auto"
En este manifiesto, se describe un
VerticalPodAutoscaler
con las siguientes propiedades:targetRef.name
: Especifica que cualquier Pod que esté controlado por una implementación llamadamy-deployment
pertenece a esteVerticalPodAutoscaler
.updateMode: Auto
: Especifica que el controlador del escalador automático vertical de Pods puede borrar un Pod, ajustar las solicitudes de CPU y memoria y, luego, iniciar un Pod nuevo.
También puedes configurar el ajuste de escala automático vertical de Pods para asignar solicitudes de recursos solo en el momento de la creación del Pod mediante
updateMode: "Initial"
.Aplica el manifiesto al clúster:
kubectl create -f my-vpa.yaml
Espera unos minutos y vuelve a visualizar los Pods en ejecución:
kubectl get pods
El resultado muestra que los nombres de los Pods cambiaron:
NAME READY STATUS RESTARTS AGE my-auto-deployment-89dc45f48-5bzqp 1/1 Running 0 8s my-auto-deployment-89dc45f48-scm66 1/1 Running 0 8s
Si los nombres de los Pods no cambiaron, espera un poco más y, luego, vuelve a ver los Pods en ejecución.
Obtén información sobre un escalador automático vertical de Pods
Para ver los detalles de un escalador automático vertical de Pods, haz lo siguiente:
Obtén información detallada sobre uno de los Pods en ejecución:
kubectl get pod POD_NAME --output yaml
Reemplaza
POD_NAME
por el nombre de uno de los Pods que recuperaste en el paso anterior.El resultado es similar a este:
apiVersion: v1 kind: Pod metadata: annotations: vpaUpdates: 'Pod resources updated by my-vpa: container 0: cpu capped to node capacity, memory capped to node capacity, cpu request, memory request' ... spec: containers: ... resources: requests: cpu: 510m memory: 262144k ...
Este resultado muestra que el controlador del escalador automático vertical de Pods tiene una solicitud de memoria de 262,144,000 y una solicitud de CPU de 510 millicores de CPU.
Obtén información detallada sobre
VerticalPodAutoscaler
:kubectl get vpa my-vpa --output yaml
El resultado es similar a este:
... recommendation: containerRecommendations: - containerName: my-container lowerBound: cpu: 536m memory: 262144k target: cpu: 587m memory: 262144k upperBound: cpu: 27854m memory: "545693548"
En esta salida, se muestran recomendaciones para las solicitudes de CPU y memoria y se incluyen las siguientes propiedades:
target
: Especifica que, para que el contenedor se ejecute de manera óptima, debe solicitar 587 millicores de CPU y 26,2144 KB de memoria.lowerBound
yupperBound
: El ajuste de escala automático vertical de Pods usa estas propiedades para decidir si debe borrar un Pod y reemplazarlo por uno nuevo. Si un Pod tiene solicitudes menores que el límite inferior (lower bound) o mayores que el límite superior (upper bound), el escalador automático vertical de Pods borra el Pod y lo reemplaza por un Pod que cumpla con el atributo de destino.
Inhabilita contenedores específicos
Puedes inhabilitar contenedores específicos del ajuste de escala automático vertical de Pods mediante la CLI de gcloud o la consola de Google Cloud.
Consola
Para inhabilitar contenedores específicos del ajuste de escala automático vertical de Pods, debes tener un clúster con la función de ajuste de escala automático vertical de Pods habilitada. Los clústeres de Autopilot tienen la función de ajuste de escala automático vertical de Pods habilitada de forma predeterminada.
Habilita el ajuste de escala automático vertical de Pods
Ve a la página de Google Kubernetes Engine en la consola de Google Cloud:
En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.
En la sección Automatización, haz clic en editEditar en la opción Ajuste de escala automático vertical de Pods.
Selecciona la casilla de verificación Habilitar Ajuste de escala automático vertical de Pods.
Haga clic en Guardar cambios.
Configura el ajuste de escala automático vertical de Pods
Ve a la página Cargas de trabajo en la consola de Google Cloud.
En la lista de cargas de trabajo, haz clic en el nombre de la implementación para la que deseas configurar el ajuste de escala automático vertical de Pods.
Haz clic en listAcciones > Ajustar escala automáticamente > Ajuste de escala automático vertical de Pods.
Elige un modo de ajuste de escala automático:
- Modo automático: Ajuste de escala automático vertical de Pods actualiza las solicitudes de CPU y memoria durante la vida útil de un Pod.
- Modo inicial: Ajuste de escala automático vertical de Pods asigna solicitudes de recursos solo durante la creación del Pod y nunca las cambia más adelante.
Haz clic en expand_more Agregar política.
Selecciona el contenedor que deseas inhabilitar.
En Editar modo de contenedor, selecciona Desactivar.
Haga clic en Listo.
Haz clic en Guardar.
gcloud
Para inhabilitar contenedores específicos del ajuste de escala automático vertical de Pods, sigue estos pasos:
Guarda el siguiente manifiesto como
my-opt-vpa.yaml
:apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: my-opt-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: my-opt-deployment updatePolicy: updateMode: "Auto" resourcePolicy: containerPolicies: - containerName: my-opt-sidecar mode: "Off"
En este manifiesto, se describe un
VerticalPodAutoscaler
. El valormode: "Off"
desactiva las recomendaciones del contenedormy-opt-sidecar
.Aplica el manifiesto al clúster:
kubectl apply -f my-opt-vpa.yaml
Guarda el siguiente manifiesto como
my-opt-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: my-opt-deployment spec: replicas: 1 selector: matchLabels: app: my-opt-deployment template: metadata: labels: app: my-opt-deployment spec: containers: - name: my-opt-container image: nginx - name: my-opt-sidecar image: busybox command: ["sh","-c","while true; do echo Doing sidecar stuff!; sleep 60; done"]
Aplica el manifiesto al clúster:
kubectl apply -f my-opt-deployment.yaml
Después de un tiempo, consulta el escalador automático vertical de Pods:
kubectl get vpa my-opt-vpa --output yaml
El resultado muestra recomendaciones para requisitos de CPU y memoria:
... recommendation: containerRecommendations: - containerName: my-opt-container ...
En este resultado, solo hay recomendaciones para un contenedor. No hay recomendaciones para
my-opt-sidecar
.El escalador automático vertical de Pods nunca actualiza los recursos en los contenedores inhabilitados. Si esperas unos minutos, el pod se vuelve a crear, pero solo un contenedor tiene solicitudes de recursos actualizadas.
¿Qué sigue?
- Más información sobre el Ajuste de escala automático vertical de Pods
- Aprende prácticas recomendadas para ejecutar aplicaciones de Kubernetes con optimización de costos en GKE.
- Obtén más información para asignar recursos de CPU a contenedores y Pods.
- Obtén más información para asignar recursos de memoria a contenedores y Pods.