Skip to content

Kubernetes Horizontal Pod Autoscaling

Un HorizontalPodAutoscaler (HPA) actualiza automáticamente un recurso de carga de trabajo (como un Deployment o StatefulSet), con el objetivo de escalar automáticamente la carga de trabajo para que coincida con la demanda.

El escalado horizontal significa que la respuesta al aumento de la carga es implementar más pods. Esto es diferente al escalado vertical , que para Kubernetes significaría asignar más recursos (por ejemplo: memoria o CPU) a los pods que ya se están ejecutando para la carga de trabajo.

Si la carga disminuye y la cantidad de pods está por encima del mínimo configurado, HorizontalPodAutoscaler le indica al recurso de carga de trabajo (Deployment, StatefulSet u otro recurso similar) que reduzca la escala.

Laboratorio: Kubernetes Horizontal Pod Autoscaling

Descripción

Este documento lo guía a través de un ejemplo de cómo habilitar HorizontalPodAutoscaler para administrar automáticamente la escala para una aplicación web de ejemplo. Esta carga de trabajo de ejemplo es Apache httpd ejecutando código PHP.

Objetivos

  • Crear un hpa para un deployment
  • Crear una carga de trabajo para probar el HPA

Antes de comenzar

  • Contar con el acceso al ambiente del laboratorio
  • Haber realizado la guía de Instalación Rancher Kubernetes Engine (RKE)
  • Haber realizado la guía de Acceso a rancher y kubernetes cluster

Inicio de laboratorio

  1. Ingrese al CLI del sistema operativo del servidor usado como Bastion con el usuario y la contraseña proporcionados.

Ingresar al cluster de Kubernetes cluster-users con sus respectivas credenciales

Crear un nuevo namespace llamado example-hpa

kubectl create ns example-hpa

Establcer el nuevo namespace por defecto en el contexto actual:

kubectl config set-context --current --namespace=example-hpa
2. Descargar y verificar el siguiente manifiesto:
wget https://k8s.io/examples/application/php-apache.yaml
3. Después de examinar el archivo puedesejecutar el Deployment con el siguiente comando:
kubectl apply -f https://k8s.io/examples/application/php-apache.yaml
4. Verificar el estado del Deployment con el siguiente comando:
kubectl get deployments
La salida debe ser parecida a la siguiente:
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
php-apache   1/1     1            1           12m
5. Cree el HorizontalPodAutoscaler:
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
6. Puede verificar el estado actual del HorizontalPodAutoscaler recién creado, ejecutando:
kubectl get hpa
La salida es similar a: NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache/scale 0% / 50% 1 10 1 18s 7. A continuación, vea cómo reacciona el escalador automático al aumento de la carga. Para hacer esto, iniciará un Pod diferente para que actúe como cliente. El contenedor dentro del Pod del cliente se ejecuta en un bucle infinito y envía consultas al servicio php-apache. Ejecute el siguiente comando en una nueva terminal:
kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
8. En la terminal original, ejecute el siguiente comando para verificar el comportamiento:
kubectl get hpa php-apache --watch
En aproximadamente un minuto, debería ver una mayor carga de CPU; por ejemplo:
NAME         REFERENCE                     TARGET      MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache/scale   305% / 50%  1         10        1          3m
y luego, más réplicas. Por ejemplo:
NAME         REFERENCE                     TARGET      MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache/scale   305% / 50%  1         10        7          3m
9. Aquí, el consumo de CPU ha aumentado al 305% de la solicitud. Como resultado, la implementación se redimensionó a 7 réplicas:
kubectl get deployment php-apache
10. Para finalizar el ejemplo, deja de enviar la carga. En la terminal donde creó el Pod que ejecuta una imagen busybox, finalice la generación de carga escribiendo + C. Luego verifique el estado del resultado (después de un minuto más o menos):
kubectl get hpa php-apache --watch
La salida es similar a:
NAME         REFERENCE                     TARGET       MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache/scale   0% / 50%     1         10        1          11m