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