Руководство. Автоматическое масштабирование масштабируемого набора виртуальных машин с помощью Azure CLI

Внимание

Эта статья ссылается на CentOS, дистрибутив Linux, который приближается к состоянию конца жизни (EOL). Обратите внимание на использование и план соответствующим образом. Дополнительные сведения см. в руководстве centOS End Of Life.

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

  • автомасштабирование масштабируемого набора;
  • создание и использование правил автомасштабирования;
  • нагрузочное тестирование экземпляров виртуальных машин и активация правил автомасштабирования;
  • обратное автомасштабирование при уменьшении потребности в ресурсах.

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.

Необходимые компоненты

  • Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.

  • Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.

    • Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.

    • Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.

    • Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.

  • Для работы с этим учебником требуется Azure CLI версии 2.0.32 или более поздней. Если вы используете Azure Cloud Shell, последняя версия уже установлена.

Создание масштабируемого набора

Создайте группу ресурсов с помощью команды az group create.

az group create --name myResourceGroup --location eastus

Теперь создайте масштабируемый набор виртуальных машин с помощью az vmss create. В следующем примере создается масштабируемый набор с числом экземпляров 2 и создается ключИ SSH, если они не существуют.

az vmss create \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --image <SKU image> \
  --orchestration-mode Flexible \
  --instance-count 2 \
  --admin-username azureuser \
  --generate-ssh-keys

Определение профиля автомасштабирования

Чтобы включить автомасштабирование в масштабируемом наборе, сначала необходимо определить профиль автомасштабирования. Этот профиль определяет используемую по умолчанию, минимальную и максимальную емкости масштабируемого набора. Эти ограничения позволяют контролировать затраты за счет того, что экземпляры виртуальных машин не создаются непрерывно, и сбалансировать приемлемую производительность с минимальным числом экземпляров, которые остаются в масштабируемом событии. Создайте профиль автомасштабирования с помощью команды az monitor autoscale create. В примере ниже задаются минимальная и максимальная емкости (2 и 10), а также емкость по умолчанию экземпляров виртуальной машины.

az monitor autoscale create \
  --resource-group myResourceGroup \
  --resource myScaleSet \
  --resource-type Microsoft.Compute/virtualMachineScaleSets \
  --name autoscale \
  --min-count 2 \
  --max-count 10 \
  --count 2

Создание правила для автоматического горизонтального увеличения масштаба

При увеличении потребностей приложения в масштабируемом наборе увеличивается нагрузка на экземпляры виртуальной машины. Если такая увеличенная нагрузка представляет собой не просто краткий спрос, а является согласованной, можно настроить правила автомасштабирования, чтобы увеличить число экземпляров виртуальной машины в масштабируемом наборе. После создания этих экземпляров виртуальных машин и развертывания приложений масштабируемые наборы запускают распределение трафика между ними через подсистему балансировки нагрузки. Вы управляете тем, какие метрики следует отслеживать, сколько времени нагрузка приложения должна соответствовать заданному пороговому значению и сколько экземпляров виртуальных машин необходимо добавить в масштабируемый набор.

Создайте правило с помощью правила автомасштабирования az monitor, которое увеличивает количество экземпляров виртуальных машин в масштабируемом наборе, если средняя загрузка ЦП превышает 70 % за 5 минут. При активации правила количество экземпляров виртуальных машин увеличивается до трех.

az monitor autoscale rule create \
  --resource-group myResourceGroup \
  --autoscale-name autoscale \
  --condition "Percentage CPU > 70 avg 5m" \
  --scale out 3

Создание правила для автоматического горизонтального уменьшения масштаба

В вечерние часы или выходные дни потребность в приложении может снизиться. Если такая сниженная нагрузка является согласованной в течение некоторого периода времени, можно настроить правила автомасштабирования, чтобы уменьшить число экземпляров виртуальных машин в масштабируемом наборе. Это действие снижает стоимость запуска масштабируемого набора, так как вы запускаете только то количество экземпляров, которое необходимо для удовлетворения текущего спроса.

Используя команду az monitor autoscale rule create, создайте другое правило, в соответствии с которым количество экземпляров виртуальной машины в масштабируемом наборе уменьшается, когда средняя загрузка ЦП не превышает 30 % в течение 5 минут. В следующем примере определяется правило горизонтального уменьшения масштаба для уменьшения количества экземпляров виртуальных машин на один экземпляр.

az monitor autoscale rule create \
  --resource-group myResourceGroup \
  --autoscale-name autoscale \
  --condition "Percentage CPU < 30 avg 5m" \
  --scale in 1

Создание нагрузки на ЦП в масштабируемом наборе

Чтобы проверить правила автомасштабирования, создайте нагрузку на ЦП в экземплярах виртуальных машин в масштабируемом наборе. В результате этой имитации нагрузки на ЦП происходит автоматическое горизонтальное увеличение масштаба и увеличение числа экземпляров виртуальных машин. Когда имитированная нагрузка на ЦП снижается, в соответствии с правилами автомасштабирования выполняется горизонтальное уменьшение масштаба и снижение числа экземпляров виртуальных машин.

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

После входа установите служебнуюпрограмму stress или stress-ng. Запустите 10нагрузочных рабочих процессов, которые создают нагрузку на ЦП. Эти рабочие процессы выполняются на протяжении 420 секунд. Этого достаточно, чтобы активировать правила автомасштабирования для реализации нужного действия.

sudo apt-get update
sudo apt-get -y install stress
sudo stress --cpu 10 --timeout 420 &

Когда в служебной программе stress отобразятся выходные данные, аналогичные stress: info: [2688] dispatching hogs: 10 cpu, 0 io, 0 vm, 0 hdd, нажмите клавишу ВВОД, чтобы вернуться к командной строке.

Чтобы убедиться, что программа stress создает нагрузку на ЦП, проверьте активную нагрузку на систему с помощью служебной программы top.

top

Выйдите из программы top и разорвите подключение к экземпляру виртуальной машины. Служебная программа stress продолжает работать на экземпляре виртуальной машины.

Ctrl-c
exit

Подключитесь ко второму экземпляру виртуальной машины, используя номер порта, указанный в предыдущей команде az vmss list-instance-connection-info.

ssh azureuser@13.92.224.66 -p 50003

Установите и запустите стресс или стресс-ng, а затем запустите десять рабочих ролей на этом втором экземпляре виртуальной машины.

sudo apt-get -y install stress
sudo stress --cpu 10 --timeout 420 &

Опять-таки, когда в служебной программе stress отобразятся выходные данные, аналогичные stress: info: [2713] dispatching hogs: 10 cpu, 0 io, 0 vm, 0 hdd, нажмите клавишу ВВОД, чтобы вернуться к командной строке.

Разорвите подключение ко второму экземпляру виртуальной машины. Служебная программа stress продолжает работать на экземпляре виртуальной машины.

exit

Мониторинг активных правил автомасштабирования

Чтобы отслеживать количество экземпляров виртуальных машин в масштабируемом наборе, используйте watch. Потребуется 5 минут, чтобы в соответствии с правилами автомасштабирования началось увеличение масштаба с учетом нагрузки на ЦП, созданной служебной программой stress на каждом экземпляре виртуальной машины.

watch az vmss list-instances \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --output table

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

Every 2.0s: az vmss list-instances --resource-group myResourceGroup --name myScaleSet --output table

  InstanceId  LatestModelApplied    Location    Name          ProvisioningState    ResourceGroup    VmId
------------  --------------------  ----------  ------------  -------------------  ---------------  ------------------------------------
           1  True                  eastus      myScaleSet_1  Succeeded            myResourceGroup  4f92f350-2b68-464f-8a01-e5e590557955
           2  True                  eastus      myScaleSet_2  Succeeded            myResourceGroup  d734cd3d-fb38-4302-817c-cfe35655d48e
           4  True                  eastus      myScaleSet_4  Creating             myResourceGroup  061b4c90-0d73-49fc-a066-19eab0b3d95c
           5  True                  eastus      myScaleSet_5  Creating             myResourceGroup  4beff8b9-4e65-40cb-9652-43899309da27
           6  True                  eastus      myScaleSet_6  Creating             myResourceGroup  9e4133dd-2c57-490e-ae45-90513ce3b336

После остановки служебной программы stress на начальных экземплярах виртуальной машины восстанавливается нормальная нагрузка на ЦП. На протяжении следующих 5 минут в соответствии с правилами автомасштабирования осуществляется горизонтальное уменьшение масштаба для числа виртуальных машин. При горизонтальном уменьшении масштаба сначала удаляются экземпляры виртуальных машин с более высокими значениями идентификатора. Если в масштабируемом наборе используются группы доступности или зоны доступности, действия горизонтального уменьшения масштаба равномерно распределяются между экземплярами виртуальных машин. В следующем примере выходных данных показано удаление одного экземпляра виртуальной машины при автоматическом уменьшении масштаба масштабируемого набора:

6  True                  eastus      myScaleSet_6  Deleting             myResourceGroup  9e4133dd-2c57-490e-ae45-90513ce3b336

Выйдите из программы watch с помощью команды Ctrl-c. Каждые 5 минут будет происходить горизонтальное уменьшение масштаба масштабируемого набора с удалением одного экземпляра виртуальной машины, пока не будет достигнуто минимальное число экземпляров (2 экземпляра).

Очистка ресурсов

Чтобы удалить масштабируемый набор и дополнительные ресурсы, удалите группу ресурсов и все входящие в нее ресурсы с помощью команды az group delete. При использовании параметра --no-wait управление возвращается в командную строку без ожидания завершения операции. Параметр --yes подтверждает, что вы хотите удалить ресурсы без дополнительного запроса.

az group delete --name myResourceGroup --yes --no-wait

Следующие шаги

Из этого руководства вы узнали, как выполнять горизонтальное увеличение или уменьшение масштаба для масштабируемого набора с помощью Azure CLI:

  • автомасштабирование масштабируемого набора;
  • создание и использование правил автомасштабирования;
  • нагрузочное тестирование экземпляров виртуальных машин и активация правил автомасштабирования;
  • обратное автомасштабирование при уменьшении потребности в ресурсах.