Escalado de las implementaciones de pods con el escalador automático de pods horizontales - Amazon EKS

Escalado de las implementaciones de pods con el escalador automático de pods horizontales

El escalador automático de pods horizontales de Kubernetes escala automáticamente el número de Pods en una implementación, un controlador de reproducción o un conjunto de réplicas en función de la utilización de la CPU de ese recurso. Esto puede ayudar a las aplicaciones a escalar horizontalmente para satisfacer el aumento de la demanda o a reducir horizontalmente cuando no se necesitan recursos y, de esa forma, liberar los nodos para otras aplicaciones. Cuando se establece un porcentaje de utilización de CPU objetivo, el escalador automático de pods horizontales escala su aplicación de forma horizontal o la reduce horizontalmente para intentar alcanzar ese objetivo.

El Horizontal Pod Autoscaler es un recurso de la API estándar en Kubernetes que simplemente requiere que un origen de métricas (como el servidor de métricas de Kubernetes) esté instalada en el clúster de Amazon EKS para funcionar. No es necesario implementar ni instalar el Horizontal Pod Autoscaler en el clúster para comenzar a escalar las aplicaciones. Para obtener más información, consulte Horizontal Pod Autoscaler (Escalador automático de pods horizontales) en la documentación de Kubernetes.

Utilice este tema para preparar el Horizontal Pod Autoscaler para el clúster de Amazon EKS y para verificar que funciona con una aplicación de muestra.

nota

Este tema se basa en la Explicación del escalador automático de pods horizontales en la documentación de Kubernetes.

Ejecutar una aplicación de prueba del escalador automático de pods horizontales

En esta sección, implementará una aplicación de muestra para verificar que el escalador automático de pods horizontales funciona.

nota

Este ejemplo se basa en la explicación del escalador automático de pods horizontales en la documentación de Kubernetes.

  1. Implemente una aplicación de servidor web Apache sencilla con el siguiente comando.

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

    Este Pod de servidor web Apache tiene un límite de CPU 500 milicpu y sirve en el puerto 80.

  2. Cree un recurso del escalador automático de pods horizontales para la implementación de php-apache.

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

    Este comando crea un escalador automático que tiene como objetivo el 50 por ciento de utilización de la CPU para la implementación, con un mínimo de un Pod y un máximo de diez Pods. Cuando la carga media de CPU es inferior al 50 %, el escalador automático intenta reducir el número de Pods en la implementación a un mínimo de uno. Cuando la carga es superior al 50 por ciento, el escalador automático intenta aumentar el número de Pods en la implementación, hasta un máximo de diez. Para obtener más información, consulte How does the HorizontalPodAutoscaler work? (¿Cómo funciona el escalador automático de pods horizontales?) en la documentación de Kubernetes.

  3. Describa el escalador automático con el siguiente comando para ver los detalles.

    kubectl get hpa

    Un ejemplo de salida sería el siguiente.

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

    Como puede ver, la carga actual de la CPU es 0%, porque todavía no hay carga en el servidor. El recuento de Pod ya se encuentra en su límite más bajo (uno), por lo que no se puede reducir horizontalmente.

  4. Cree una carga para el servidor web mediante la ejecución de un contenedor.

    kubectl run -i \ --tty load-generator \ --rm --image=busybox \ --restart=Never \ -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
  5. Para ver que la implementación escale horizontalmente, ejecute de manera periódica el siguiente comando en un terminal independiente desde el terminal en el que ejecutó el paso anterior.

    kubectl get hpa php-apache

    Un ejemplo de salida sería el siguiente.

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

    El recuento de réplicas puede tardar más de un minuto en aumentar. Mientras el porcentaje actual de la CPU sea superior al porcentaje objetivo, el recuerdo de réplicas aumenta hasta 10. En este caso, es 250%, para que el número de REPLICAS siga en aumento.

    nota

    Pueden pasar unos minutos antes de que vea que el recuento de réplicas alcanza su máximo. Si solo se necesitan 6 réplicas, por ejemplo, para que la carga de la CPU permanezca al o por debajo del 50 %, la carga no superará las 6 réplicas.

  6. Detenga la carga. En la ventana del terminal en la que genera la carga, mantenga presionadas las teclas Ctrl+C para detener la carga. Puede ver cómo las réplicas vuelven a escalar a 1 al ejecutar de nuevo el siguiente comando en el terminal en el que ve la reducción horizontal.

    kubectl get hpa

    Un ejemplo de salida sería el siguiente.

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

    El periodo predeterminado para reducir la escala es de cinco minutos, por lo que pasará algún tiempo antes de que vea que el recuento de réplicas es de 1 de nuevo, incluso cuando el porcentaje actual de la CPU es 0 %. El periodo de tiempo es modificable. Para obtener más información, consulte Horizontal Pod Autoscaler (Escalador automático de pods horizontales) en la documentación de Kubernetes.

  7. Cuando haya terminado de experimentar con la aplicación de muestra, elimine los recursos php-apache.

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