Kubernetes: ajuste de escala automático
Autoscalinges una de las características clave del clúster de Kubernetes. Es una característica en la que el clúster es capaz de aumentar la cantidad de nodos a medida que aumenta la demanda de respuesta del servicio y disminuir la cantidad de nodos a medida que disminuye el requisito. Esta función de escalado automático se admite actualmente en Google Cloud Engine (GCE) y Google Container Engine (GKE) y comenzará con AWS muy pronto.
Para configurar una infraestructura escalable en GCE, primero debemos tener un proyecto de GCE activo con funciones de monitoreo en la nube de Google, registro en la nube de Google y stackdriver habilitado.
Primero, configuraremos el clúster con pocos nodos ejecutándose en él. Una vez hecho esto, necesitamos configurar la siguiente variable de entorno.
Variable ambiental
export NUM_NODES = 2
export KUBE_AUTOSCALER_MIN_NODES = 2
export KUBE_AUTOSCALER_MAX_NODES = 5
export KUBE_ENABLE_CLUSTER_AUTOSCALER = true
Una vez hecho esto, iniciaremos el clúster ejecutando kube-up.sh. Esto creará un clúster junto con el complemento autoescalar del clúster.
./cluster/kube-up.sh
En la creación del clúster, podemos verificar nuestro clúster usando el siguiente comando kubectl.
$ kubectl get nodes
NAME STATUS AGE
kubernetes-master Ready,SchedulingDisabled 10m
kubernetes-minion-group-de5q Ready 10m
kubernetes-minion-group-yhdx Ready 8m
Ahora, podemos implementar una aplicación en el clúster y luego habilitar el escalador automático de pod horizontal. Esto se puede hacer usando el siguiente comando.
$ kubectl autoscale deployment <Application Name> --cpu-percent = 50 --min = 1 --
max = 10
El comando anterior muestra que mantendremos al menos una y un máximo de 10 réplicas del POD a medida que aumenta la carga de la aplicación.
Podemos comprobar el estado del escalador automático ejecutando el $kubclt get hpamando. Aumentaremos la carga en los pods usando el siguiente comando.
$ kubectl run -i --tty load-generator --image = busybox /bin/sh
$ while true; do wget -q -O- http://php-apache.default.svc.cluster.local; done
Podemos comprobar el hpa mediante la ejecución $ kubectl get hpa mando.
$ kubectl get hpa
NAME REFERENCE TARGET CURRENT
php-apache Deployment/php-apache/scale 50% 310%
MINPODS MAXPODS AGE
1 20 2m
$ kubectl get deployment php-apache
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
php-apache 7 7 7 3 4m
Podemos verificar la cantidad de pods que se están ejecutando usando el siguiente comando.
[email protected]:~/k8s-src$ kubectl get pods
php-apache-2046965998-3ewo6 0/1 Pending 0 1m
php-apache-2046965998-8m03k 1/1 Running 0 1m
php-apache-2046965998-ddpgp 1/1 Running 0 5m
php-apache-2046965998-lrik6 1/1 Running 0 1m
php-apache-2046965998-nj465 0/1 Pending 0 1m
php-apache-2046965998-tmwg1 1/1 Running 0 1m
php-apache-2046965998-xkbw1 0/1 Pending 0 1m
Y finalmente, podemos obtener el estado del nodo.
$ kubectl get nodes
NAME STATUS AGE
kubernetes-master Ready,SchedulingDisabled 9m
kubernetes-minion-group-6z5i Ready 43s
kubernetes-minion-group-de5q Ready 9m
kubernetes-minion-group-yhdx Ready 9m