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).

Nota

No puede utilizar la escala automática de pod vertical de Kubernetes con pools de nodos virtuales.
Puede 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 los pods de un despliegue. La escala automática de pod vertical puede mejorar la utilización de recursos de cluster de la siguiente al:
  • 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

  1. 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.
  2. 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

  1. 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
  2. Cambie al directorio vertical-pod-autoscaler:

    cd autoscaler/vertical-pod-autoscaler
  3. Si ya ha desplegado la escala automática de pod vertical, suprímala introduciendo:
    ./hack/vpa-down.sh
  4. Despliegue la escala automática de pod vertical introduciendo:

    ./hack/vpa-up.sh
  5. 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

  1. 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.

  2. 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.

  3. 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.

  1. 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
  2. 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

  1. Elimine la aplicación de ejemplo introduciendo:
    kubectl delete -f examples/hamster.yaml
  2. En el directorio vertical-pod-autoscaler, suprima el despliegue de la escala automática de pod vertical introduciendo:

    ./hack/vpa-down.sh