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