Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

Группа виртуальных машин с автоматическим масштабированием

Подготовка окружения

Создайте для себя новый каталог, сеть, сабнеты в каждой зоне доступности и сервисный аккаунт. Для этого запустите скрипт init_common.sh и следуйте инструкциям.

Создание группы виртуальных машин

Создайте группу инстансов c автоматическим масштабированием, которая интегрируется с балансировщиком сетевой нагрузки из спецификации

cat 03/specification.yaml
yc compute instance-group create --file=03/specification.yaml

Дождитесь выполнения команды.

Вы можете наблюдать за процессом создания через веб-консоль облака. Для этого зайдите в ваш фолдер, далее выберите Сompute и перейдите в раздел "Группы виртуальных машин" и посмотрите на созданную вами группу.

Также можно наблюдать за процессом через командную строку watch yc compute instance-group list-instances load-generator

По окончанию развертывания будет создана группа однотипных виртуальных машин, каждая из которых будет создана из container optimized образа. При старте инстанса будет скачиваться докер контейнер из yandex cloud репозитория. Данный докер-образ содержит web-server, благодаря которому мы сможем эмулировать нагрузку пользователей. Eсли к вебсерверу сделать запрос /burn-cpu?time=10000&load=5, то web-server будет в течение 10 секунд сжигать 5% CPU процессора.

Подключим балансировщик к созданной группе виртуальных машин

Создадим балансировщик, к которому подключена таргет группа

TG_ID=$(yc compute instance-group get load-generator --format json | jq -r .load_balancer_state.target_group_id)

yc load-balancer network-load-balancer create --name load-generator --region-id ru-central1 --type external \
--target-group target-group-id=$TG_ID,healthcheck-name=tcp,healthcheck-tcp-port=80 \
--listener name=http,port=80,target-port=80,protocol=tcp,external-ip-version=ipv4

Дождитесь выполнения команды. Наблюдать за ним можно через веб консоль или через командную строку: watch yc load-balancer network-load-balancer list

Проверьте, что балансировщик проверил доступность инстансов: yc load-balancer network-load-balancer target-states load-generator --target-group-id=${TG_ID} В выводе должно значится, что все инстансы в статусе HEALTHY. Если это не так - дождитесь когда все инстансы станус доступны. За процессом можно наблюдать запустив команду watch -n 1 yc load-balancer network-load-balancer target-states load-generator --target-group-id=${TG_ID}

Проверим запущенный веб-сервис

Сделаем запрос в веб-сервис, через балансер, который в течение 30 секунд будет жечь 50% CPU.

EXTERNAL_IP=$(yc load-balancer network-load-balancer get load-generator --format=json | jq -r .listeners[0].address)

curl "http://$EXTERNAL_IP/burn-cpu?time=30000&load=50"

Вы можете наблюдать за нагрузкой через веб-консоль облака. Для этого зайдите в ваш фолдер, далее выберите Сompute и перейдите в раздел "Группы виртуальных машин", выберите вашу группу и откройте вкладку "Мониторинг". Предыдущий запрос попал на 1 виртутальную машину в кластере, поэтому вы должны увидеть повышенное среднее потребление CPU в одной зоне.

Подадим повышенную нагрузку на кластер, чтобы посмотреть на работу автоскейлинга

Запустим скрипт, который будет создавать повышенную нагрузку на группу инстансов. В спецификации группы инстансов был указан порог 40% CPU. Это означает, что если средняя нагрузка на 1 ядро процессора в зоне будет выше 40%, то в этой зоне будут добавлены новые инстансы. Скрипт в течение 10 минут в 12 потоков будет делать запросы, которые будут жечь 10% CPU. Таким образом суммарно в каждый момент времени кластер будет загружен на 120% CPU.

Скрипт специально делает несколько параллельных запросов по 10% CPU, а не один запрос в 120% CPU, чтобы они равномерно распределялись в кластере и попадали на разные инстансы.

EXTERNAL_IP=$(yc load-balancer network-load-balancer get load-generator --format=json | jq -r .listeners[0].address)

wrk -H "Connection: close" -t12 -c12 -d10m "http://$EXTERNAL_IP/burn-cpu?time=5000&load=10"

Пока скрипт работает, откройте вкладку "Мониторинг" для соответствующей группы инстансов. Вы должны увидеть, как меняется средняя нагрузка в каждой зоне, решения автоскейлинга об увелечении числа машин в зоне и текущее количество машин в каждой зоне. Кроме того, на вкладке "Логи" можно увидеть сообщения о принятых автоскейлингом решениях.

Суммарная нагрузка в 120% равномерно распределится на 2 инстанса в двух зонах и превысит пороговые 40%, что приведет к созданию дополнительного инстанса в каждой зоне.

Когда, скрипт перестанет выполняться, нагрузка спадет и группа автоматически уменьшится до 2 инстансов.

Удалим инфраструктуру

Удалим балансировщик и группу виртуальных машин

yc load-balancer network-load-balancer delete load-generator
yc compute instance-group delete load-generator