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
- 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
wget https://k8s.io/examples/application/php-apache.yaml
kubectl apply -f https://k8s.io/examples/application/php-apache.yaml
kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
php-apache 1/1 1 1 12m
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
kubectl get hpa
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"
kubectl get hpa php-apache --watch
NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache/scale 305% / 50% 1 10 1 3m
NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache/scale 305% / 50% 1 10 7 3m
kubectl get deployment php-apache
kubectl get hpa php-apache --watch
NAME REFERENCE TARGET MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache/scale 0% / 50% 1 10 1 11m