Kubernetes - Autoscaling

Autoscalingest l'une des fonctionnalités clés du cluster Kubernetes. C'est une fonctionnalité dans laquelle le cluster est capable d'augmenter le nombre de nœuds à mesure que la demande de réponse de service augmente et de réduire le nombre de nœuds à mesure que les besoins diminuent. Cette fonctionnalité de mise à l'échelle automatique est actuellement prise en charge dans Google Cloud Engine (GCE) et Google Container Engine (GKE) et démarrera bientôt avec AWS.

Afin de mettre en place une infrastructure évolutive dans GCE, nous devons d'abord avoir un projet GCE actif avec des fonctionnalités de surveillance du cloud Google, de journalisation Google Cloud et de stackdriver activées.

Tout d'abord, nous allons configurer le cluster avec quelques nœuds en cours d'exécution. Une fois cela fait, nous devons configurer la variable d'environnement suivante.

Variable d'environnement

export NUM_NODES = 2
export KUBE_AUTOSCALER_MIN_NODES = 2
export KUBE_AUTOSCALER_MAX_NODES = 5
export KUBE_ENABLE_CLUSTER_AUTOSCALER = true

Une fois cela fait, nous allons démarrer le cluster en exécutant kube-up.sh. Cela créera un cluster avec un module complémentaire auto-scalaire de cluster.

./cluster/kube-up.sh

Lors de la création du cluster, nous pouvons vérifier notre cluster à l'aide de la commande kubectl suivante.

$ kubectl get nodes
NAME                             STATUS                       AGE
kubernetes-master                Ready,SchedulingDisabled     10m
kubernetes-minion-group-de5q     Ready                        10m
kubernetes-minion-group-yhdx     Ready                        8m

À présent, nous pouvons déployer une application sur le cluster, puis activer l'autoscaler de pod horizontal. Cela peut être fait en utilisant la commande suivante.

$ kubectl autoscale deployment <Application Name> --cpu-percent = 50 --min = 1 --
max = 10

La commande ci-dessus montre que nous conserverons au moins une et au maximum 10 répliques du POD à mesure que la charge sur l'application augmente.

Nous pouvons vérifier l'état de l'autoscaler en exécutant le $kubclt get hpacommander. Nous augmenterons la charge sur les pods en utilisant la commande suivante.

$ kubectl run -i --tty load-generator --image = busybox /bin/sh
$ while true; do wget -q -O- http://php-apache.default.svc.cluster.local; done

Nous pouvons vérifier le hpa en exécutant $ kubectl get hpa commander.

$ 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

Nous pouvons vérifier le nombre de pods en cours d'exécution à l'aide de la commande suivante.

[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

Et enfin, nous pouvons obtenir le statut du nœud.

$ 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