Kubernetes - Автомасштабирование
Autoscaling- одна из ключевых особенностей кластера Kubernetes. Это функция, в которой кластер может увеличивать количество узлов по мере увеличения потребности в ответе на услуги и уменьшать количество узлов по мере уменьшения потребности. Эта функция автоматического масштабирования в настоящее время поддерживается в Google Cloud Engine (GCE) и Google Container Engine (GKE) и скоро будет запущена в AWS.
Чтобы настроить масштабируемую инфраструктуру в GCE, нам сначала нужно иметь активный проект GCE с функциями облачного мониторинга Google, ведения журнала в облаке Google и включенного stackdriver.
Сначала мы настроим кластер с несколькими запущенными в нем узлами. После этого нам нужно настроить следующую переменную среды.
Переменная среды
export NUM_NODES = 2
export KUBE_AUTOSCALER_MIN_NODES = 2
export KUBE_AUTOSCALER_MAX_NODES = 5
export KUBE_ENABLE_CLUSTER_AUTOSCALER = true
После этого мы запустим кластер, запустив kube-up.sh. Это создаст кластер вместе с автоматическим скалярным добавлением кластера.
./cluster/kube-up.sh
После создания кластера мы можем проверить наш кластер с помощью следующей команды kubectl.
$ kubectl get nodes
NAME STATUS AGE
kubernetes-master Ready,SchedulingDisabled 10m
kubernetes-minion-group-de5q Ready 10m
kubernetes-minion-group-yhdx Ready 8m
Теперь мы можем развернуть приложение в кластере, а затем включить горизонтальный автомасштабирование модулей. Это можно сделать с помощью следующей команды.
$ kubectl autoscale deployment <Application Name> --cpu-percent = 50 --min = 1 --
max = 10
Приведенная выше команда показывает, что мы будем поддерживать как минимум одну и максимум 10 реплик POD по мере увеличения нагрузки на приложение.
Мы можем проверить состояние автомасштабирования, запустив $kubclt get hpaкоманда. Мы увеличим нагрузку на модули с помощью следующей команды.
$ kubectl run -i --tty load-generator --image = busybox /bin/sh
$ while true; do wget -q -O- http://php-apache.default.svc.cluster.local; done
Мы можем проверить hpa бегом $ kubectl get hpa команда.
$ 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
Мы можем проверить количество запущенных модулей, используя следующую команду.
jsz@jsz-desk2:~/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
И наконец, мы можем получить статус узла.
$ 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