Uso de la escala automática de pod horizontal de Kubernetes

Descubra cómo utilizar la escala automática de pod horizontal de Kubernetes para escalar automáticamente el número de pods en un cluster que ha creado mediante Container Engine for Kubernetes (OKE).

Puede utilizar la escala automática de pod horizontal de Kubernetes para escalar automáticamente el número de pods en un despliegue, el controlador de replicación, el juego de réplicas o el juego con estado, en función de la utilización de la CPU o la memoria de ese recurso, o en función de otras métricas. La escala automática de pod horizontal puede ayudar a las aplicaciones a escalar horizontalmente para satisfacer un aumento de la demanda o a reducir horizontalmente cuando ya no se necesitan recursos. Puede definir un porcentaje de métrica de destino que la escala automática de pod horizontal debe cumplir al escalar aplicaciones. Para obtener más información, consulte la sección sobre la escala automática de pod horizontal en la documentación de Kubernetes.

La escala automática de pod horizontal es un recurso de API estándar en Kubernetes que 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.

Notas sobre la escala automática de pod horizontal

Tenga en cuenta lo siguiente:

  • El servidor de métricas de Kubernetes solo soporta la escala basada en la utilización de memoria y CPU. Otras implementaciones de la API de métricas de Kubernetes soportan la escala basada en métricas personalizadas. Consulte la documentación de Kubernetes para obtener una lista de implementaciones alternativas (consulte la sección sobre implementaciones) y para obtener más información sobre la escala basada en métricas personalizadas (consulte la sección sobre la escala automática basada en varias métricas y métricas personalizadas).
  • Puede escalar aplicaciones manualmente actualizando archivos de manifiesto sin utilizar la escala automática de pod horizontal.
  • Puede utilizar la escala automática de pod horizontal de Kubernetes con pools de nodos gestionados y pools de nodos virtuales.

Trabajo con la escala automática de pod horizontal

Las siguientes instrucciones se basan en el tema de repaso de la escala automática de pod horizontal de la documentación de Kubernetes. Describen cómo:

  • Verificar que el servidor de métricas de Kubernetes se ha instalado en un cluster.
  • Desplegar un servidor web php-apache de ejemplo.
  • Crear un recurso de escala automática de pod horizontal que se escala en función del uso de CPU.
  • Iniciar la generación de una carga de ejemplo.
  • Ver la operación de escala en acción.
  • Parar la generación de la carga de ejemplo.
  • Limpiar eliminando el servidor web php-apache y la escala automática de pod horizontal.

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: Desplegar una aplicación de ejemplo

Despliegue una aplicación sencilla del servidor web Apache introduciendo:

kubectl apply -f https://k8s.io/examples/application/php-apache.yaml

La salida del comando anterior confirma el despliegue:

deployment.apps/php-apache created
service/php-apache created

El pod del servidor web Apache creado a partir del archivo de manifiesto:

  • Tiene un límite de CPU de 500 mil, lo que garantiza que el contenedor nunca utilizará más de 500 milinúcleos o 1/2 de un núcleo.
  • Tiene una asignación de solicitud de CPU de 200 mil, lo que permite al contenedor utilizar 200 milinúcleos de recursos de CPU o 1/5 de un núcleo.

Paso 3: Crear un recurso de escala automática de pod horizontal

  1. Cree un recurso de escala automática de pod horizontal para mantener un mínimo de 1 y un máximo de 10 réplicas, y una utilización media de la CPU del 50%, introduciendo:

    kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

    La salida del comando anterior confirma que la escala automática de pod horizontal se ha creado.

    horizontalpodautoscaler.autoscaling/php-apache autoscaled

    El comando crea una escala automática de pod horizontal para el despliegue del servidor web Apache que:

    • Mantiene un mínimo de 1 y un máximo de 10 réplicas de los pods creados anteriormente controlados por el despliegue del servidor web Apache.
    • Aumenta y disminuye el número de réplicas del despliegue para mantener una utilización media de CPU del 50% en todos los pods.

    Si la utilización media de la CPU es inferior al 50%, la escala automática de pod horizontal intenta reducir el número de pods en el despliegue hasta el mínimo (en este caso, 1). Si la utilización media de la CPU supera el 50%, la escala automática de pod horizontal intenta aumentar el número de pods en el despliegue hasta el máximo (en este caso, 10). Para obtener más información, consulte la sección sobre el funcionamiento de la escala automática de pod horizontal en la documentación de Kubernetes.

    Para obtener más información sobre el comando kubectl autoscale, consulte la sección sobre la escala automática en la documentación de Kubernetes.

  2. Después de un minuto, confirme el estado actual de la escala automática de pod horizontal introduciendo:

    kubectl get hpa

    La salida del comando anterior muestra el estado actual:

    NAME       REFERENCE             TARGETS MINPODS MAXPODS REPLICAS AGE
    php-apache Deployment/php-apache 0%/50%  1       10      1        10s

    La columna TARGETS muestra la utilización media de CPU en todos los pods controlados por el despliegue del servidor web Apache. Dado que no se están enviando solicitudes al servidor, en el ejemplo anterior se muestra que la utilización de CPU actual es del 0%, en comparación con el objetivo de utilización del 50%. Tenga en cuenta que puede ver diferentes números, dependiendo del tiempo que espere antes de ejecutar el comando.

Paso 4: Iniciar la generación de la carga de ejemplo

  1. Ejecute un contenedor con una imagen busybox a fin de crear una carga para el servidor web Apache introduciendo:

    kubectl run -it --rm load-generator --image=busybox /bin/sh
  2. Genere una carga para el servidor web Apache que hará que la escala automática de pod horizontal escale horizontalmente el despliegue introduciendo:

    while true; do wget -q -O- http://php-apache; done

Paso 5: Ver la operación de escala

  1. Después de un minuto, abra una nueva ventana de terminal y confirme el estado actual de la escala automática de pod horizontal introduciendo:

    kubectl get hpa

    La salida del comando anterior muestra el estado actual:

    NAME       REFERENCE             TARGETS  MINPODS MAXPODS REPLICAS AGE
    php-apache Deployment/php-apache 250%/50% 1       10      1        1m

    En el ejemplo anterior, puede ver que la utilización de CPU actual ha aumentado al 250%, en comparación con el objetivo de utilización del 50%. Tenga en cuenta que puede ver diferentes números, dependiendo del tiempo que espere antes de ejecutar el comando.

    Para alcanzar el objetivo de utilización del 50%, la escala automática de pod horizontal tendrá que aumentar el número de réplicas para escalar horizontalmente el despliegue.

  2. Después de otros pocos minutos, vea el número de réplicas aumentado introduciendo de nuevo:

    kubectl get hpa

    La salida del comando anterior muestra el estado actual:

    NAME       REFERENCE             TARGETS  MINPODS MAXPODS REPLICAS AGE
    php-apache Deployment/php-apache 50%/50%  1       10      5        5m

    En el ejemplo anterior, puede ver que la escala automática de pod horizontal ha cambiado el tamaño del despliegue a 5 réplicas y se ha alcanzado el objetivo de utilización del 50%. Tenga en cuenta que puede ver diferentes números, dependiendo del tiempo que espere antes de ejecutar el comando.

  3. Verifique que el despliegue se ha ampliado introduciendo:

    kubectl get deployment php-apache

    La salida del comando anterior muestra el estado actual:

    NAME       READY UP-TO-DATE AVAILABLE AGE
    php-apache 5/5   5          5         5m

    Tenga en cuenta que puede ver diferentes números, dependiendo del tiempo que espere antes de ejecutar el comando.

Paso 6: Parar la generación de la carga de ejemplo

  1. En la ventana de terminal donde creó el contenedor con la imagen busybox y generó la carga para el servidor web Apache:
    1. Termine la generación de carga pulsando Ctrl+C
    2. Cierre el símbolo del sistema introduciendo:
      exit

      La salida del comando anterior confirma que la sesión ha terminado:

      Session ended, resume using 'kubectl attach load-generator -c load-generator -i -t' command when the pod is running
      pod "load-generator" deleted
  2. Después de un minuto, confirme el estado actual de la escala automática de pod horizontal introduciendo:
    kubectl get hpa

    La salida del comando anterior muestra el estado actual:

    NAME       REFERENCE             TARGETS MINPODS MAXPODS REPLICAS AGE
    php-apache Deployment/php-apache 0%/50%  1       10      5        10m

    En el ejemplo anterior, puede ver que la utilización de CPU actual se ha reducido al 0%, en comparación con el objetivo de utilización del 50%. Sin embargo, todavía hay 5 réplicas en el despliegue. Tenga en cuenta que puede ver diferentes números, dependiendo del tiempo que espere antes de ejecutar el comando.

  3. Después de otros pocos minutos, vea el número de réplicas reducido introduciendo de nuevo:

    kubectl get hpa

    La salida del comando anterior muestra el estado actual:

    NAME       REFERENCE             TARGETS  MINPODS MAXPODS REPLICAS AGE
    php-apache Deployment/php-apache 0%/50%   1       10      1        15m

    En el ejemplo anterior, puede ver que la escala automática de pod horizontal ha cambiado el tamaño del despliegue a 1 réplica.

    Tenga en cuenta que el recuento de réplicas tardará en reducirse a 1. Cinco minutos es el marco temporal por defecto para reducir horizontalmente. Tenga en cuenta que puede ver diferentes números, dependiendo del tiempo que espere antes de ejecutar el comando.

  4. Verifique que el despliegue se ha reducido horizontalmente introduciendo:

    kubectl get deployment php-apache

    La salida del comando anterior muestra el estado actual:

    NAME       READY UP-TO-DATE AVAILABLE AGE
    php-apache 1/1   1          1         15m

    Tenga en cuenta que puede ver diferentes números, dependiendo del tiempo que espere antes de ejecutar el comando.

Paso 7: Limpiar

  1. Suprima la escala automática de pod horizontal introduciendo:

    kubectl delete horizontalpodautoscaler.autoscaling/php-apache

    Tenga en cuenta que al suprimir una escala automática de pod horizontal, el número de réplicas permanece el mismo. Un despliegue no vuelve automáticamente al estado que tenía antes de la creación de la escala automática de pod horizontal.

  2. Suprima el despliegue del servidor web Apache introduciendo:

    kubectl delete deployment.apps/php-apache service/php-apache