Настройка автомасштабирования с помощью PowerShell

С помощью параметров автомасштабирования можно настроить объем ресурсов, необходимый для управления колеблющейся нагрузкой приложения. Автомасштабирование можно настроить с помощью шаблонов портал Azure, Azure CLI, PowerShell или ARM или Bicep.

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

  • Создание масштабируемого набора, который можно автомасштабировать
  • Создание правил для увеличения и увеличения масштаба
  • Создание профиля, использующего правила
  • Применение параметров автомасштабирования
  • Обновление параметров автомасштабирования с помощью уведомлений

Предварительные требования

Чтобы настроить автомасштабирование с помощью PowerShell, вам потребуется учетная запись Azure с активной подпиской. Вы можете создать учетную запись бесплатно.

Настройка среды

#Set the subscription Id, VMSS name, and resource group name
$subscriptionId = (Get-AzContext).Subscription.Id
$resourceGroupName="rg-powershell-autoscale"
$vmssName="vmss-001"

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

Создайте масштабируемый набор с помощью следующих командлетов. $resourceGroupName Задайте переменные и $vmssName для набора среды.

# create a new resource group
New-AzResourceGroup -ResourceGroupName $resourceGroupName -Location "EastUS"

# Create login credentials for the VMSS
$Cred = Get-Credential
$vmCred = New-Object System.Management.Automation.PSCredential($Cred.UserName, $Cred.Password)


New-AzVmss `
 -ResourceGroupName $resourceGroupName `
 -Location "EastUS" `
 -VMScaleSetName $vmssName `
 -Credential $vmCred `
 -VirtualNetworkName "myVnet" `
 -SubnetName "mySubnet" `
 -PublicIpAddressName "myPublicIPAddress" `
 -LoadBalancerName "myLoadBalancer" `
 -OrchestrationMode "Flexible"

Создание параметров автомасштабирования

Чтобы создать параметр автомасштабирования с помощью PowerShell, выполните следующую последовательность:

  1. Создание правил с помощью New-AzAutoscaleScaleRuleObject
  2. Создание профиля с помощью New-AzAutoscaleProfileObject
  3. Создание параметров автомасштабирования с помощью New-AzAutoscaleSetting
  4. Обновление параметров с помощью Update-AzAutoscaleSetting

Создание правил

Создайте правила масштабирования и горизонтального увеличения масштаба, а затем связали их с профилем. Правила создаются с помощью New-AzAutoscaleScaleRuleObject.

Следующий скрипт PowerShell создает два правила.

  • Горизонтальное масштабирование, если процент загрузки ЦП превышает 70 %
  • Масштабирование, если процент ЦП меньше 30 %

$rule1=New-AzAutoscaleScaleRuleObject `
    -MetricTriggerMetricName "Percentage CPU" `
    -MetricTriggerMetricResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"  `
    -MetricTriggerTimeGrain ([System.TimeSpan]::New(0,1,0)) `
    -MetricTriggerStatistic "Average" `
    -MetricTriggerTimeWindow ([System.TimeSpan]::New(0,5,0)) `
    -MetricTriggerTimeAggregation "Average" `
    -MetricTriggerOperator "GreaterThan" `
    -MetricTriggerThreshold 70 `
    -MetricTriggerDividePerInstance $false `
    -ScaleActionDirection "Increase" `
    -ScaleActionType "ChangeCount" `
    -ScaleActionValue 1 `
    -ScaleActionCooldown ([System.TimeSpan]::New(0,5,0))


$rule2=New-AzAutoscaleScaleRuleObject `
    -MetricTriggerMetricName "Percentage CPU" `
    -MetricTriggerMetricResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"  `
    -MetricTriggerTimeGrain ([System.TimeSpan]::New(0,1,0)) `
    -MetricTriggerStatistic "Average" `
    -MetricTriggerTimeWindow ([System.TimeSpan]::New(0,5,0)) `
    -MetricTriggerTimeAggregation "Average" `
    -MetricTriggerOperator "LessThan" `
    -MetricTriggerThreshold 30 `
    -MetricTriggerDividePerInstance $false `
    -ScaleActionDirection "Decrease" `
    -ScaleActionType "ChangeCount" `
    -ScaleActionValue 1 `
    -ScaleActionCooldown ([System.TimeSpan]::New(0,5,0))

В таблице ниже описаны параметры, используемые в командлете New-AzAutoscaleScaleRuleObject .

Параметр Описание
MetricTriggerMetricName Задает метрику триггера автомасштабирования
MetricTriggerMetricResourceUri Указывает ресурс, к которому MetricTriggerMetricName принадлежит метрика. MetricTriggerMetricResourceUri может быть любым ресурсом, а не только ресурсом, который масштабируется. Например, вы можете масштабировать Масштабируемые наборы виртуальных машин на основе метрик, созданных подсистемой балансировки нагрузки, базой данных или самим масштабируемым набором. Должен MetricTriggerMetricName существовать для указанного MetricTriggerMetricResourceUriобъекта .
MetricTriggerTimeGrain Частота выборки метрики, отслеживаемой правилом. MetricTriggerTimeGrain должно быть одним из предопределенных значений для указанной метрики и должно находиться в диапазоне от 12 часов до 1 минуты. Например, MetricTriggerTimeGrain = PT1M"* означает, что метрики собираются каждые 1 минуту и агрегируются с помощью метода агрегирования, указанного в MetricTriggerStatistic.
MetricTriggerTimeAggregation Метод агрегирования, используемый в течение периода timeGrain. Например, statistic = "Average" и timeGrain = "PT1M" означает, что метрики агрегируются каждые 1 минуту, принимая среднее значение.
MetricTriggerStatistic Метод агрегирования метрик выборки. Например, TimeAggregation = "Average" агрегирует выборку метрик, принимая среднее значение.
MetricTriggerTimeWindow Время, в течение времени, когда модуль автомасштабирования выполняет агрегирование метр Это значение должно быть больше задержки в коллекции метрик, которая зависит от ресурса. Значение должно составлять от 5 минут до 12 часов. Например, 10 минут означает, что при каждом запуске автомасштабирования запрашивается метрики за последние 10 минут. Эта функция позволяет стабилизировать метрики и не реагировать на временные пики.
MetricTriggerThreshold Определяет значение метрики, которая активирует событие масштабирования.
MetricTriggerOperator Указывает логическую сравнительную операцию, используемую при оценке значения метрики.
MetricTriggerDividePerInstance Если задано значение , true метрика триггера делится на общее количество экземпляров. Например, если число сообщений равно 300 и выполняется 5 экземпляров, вычисляемое значение метрики равно 60 сообщений на экземпляр. Это свойство применимо не ко всем метрикам.
ScaleActionDirection Укажите горизонтальное или горизонтальное масштабирование. Допустимые значения: Increase и Decrease.
ScaleActionType Масштабирование по определенному количеству экземпляров, масштабирование до определенного числа экземпляров или масштабирование в процентах от текущего числа экземпляров. Допустимыми значениями являются ChangeCount, ExactCount и PercentChangeCount.
ScaleActionCooldown Минимальное время ожидания между операциями масштабирования. Это позволяет стабилизировать метрики и избежать колебания. Например, если ScaleActionCooldown значение равно 10 минутам и операция масштабирования только что произошла, автомасштабирование не будет пытаться снова масштабироваться в течение 10 минут.

Создание профиля автомасштабирования по умолчанию и связывание правил

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

$defaultProfile=New-AzAutoscaleProfileObject `
    -Name "default" `
    -CapacityDefault 1 `
    -CapacityMaximum 10 `
    -CapacityMinimum 1 `
    -Rule $rule1, $rule2

В таблице ниже описаны параметры, используемые в командлете New-AzAutoscaleProfileObject .

Параметр Описание
CapacityDefault Количество экземпляров , если метрики недоступны для оценки. Значение по умолчанию используется, только если текущее количество экземпляров меньше, чем заданное по умолчанию.
CapacityMaximum Максимальное число экземпляров ресурса. Максимальное количество экземпляров дополнительно ограничивается количеством ядер, доступных в подписке.
CapacityMinimum Минимальное количество экземпляров ресурса.
FixedDateEnd Время окончания для профиля в формате ISO 8601 для .
FixedDateStart Время начала для профиля в формате ISO 8601.
Rule Коллекция правил, предоставляющих триггеры и параметры для действия масштабирования, когда этот профиль активен. Можно указать не более 10 правил, разделенных запятыми.
RecurrenceFrequency Как часто вступает в силу запланированный профиль. Это значение должно быть равно week.
ScheduleDay Коллекция дней, на которые профиль вступает в силу при указании повторяющегося расписания. Возможные значения — с воскресенья по субботу. Дополнительные сведения о повторяющихся расписаниях см. в статье Добавление повторяющегося профиля с помощью CLI.
ScheduleHour Коллекция часов, на которые вступает в силу профиль. Поддерживаются значения от 0 до 23.
ScheduleMinute Коллекция минут, в течение которых профиль вступает в силу.
ScheduleTimeZone Часовой пояс для часов профиля.

Применение параметров автомасштабирования

После применения правил и профиля примените параметры автомасштабирования с помощью New-AzAutoscaleSetting. Чтобы обновить существующий параметр автомасштабирования, используйте Update-AzAutoscaleSetting

New-AzAutoscaleSetting `
    -Name vmss-autoscalesetting1 `
    -ResourceGroupName $resourceGroupName `
    -Location eastus `
    -Profile $defaultProfile `
    -Enabled `
    -PropertiesName "vmss-autoscalesetting1" `
    -TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"

Добавление уведомлений в параметры автомасштабирования

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

Задайте веб-перехватчик с помощью следующего командлета:


  $webhook1=New-AzAutoscaleWebhookNotificationObject -Property @{} -ServiceUri "http://contoso.com/webhook1"

Настройте уведомление с помощью веб-перехватчика и настройте уведомление по электронной почте с помощью командлета New-AzAutoscaleNotificationObject :


    $notification1=New-AzAutoscaleNotificationObject `
    -EmailCustomEmail "jason@contoso.com" `
    -EmailSendToSubscriptionAdministrator $true `
    -EmailSendToSubscriptionCoAdministrator $true `
    -Webhook $webhook1

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


Update-AzAutoscaleSetting  `
    -Name vmss-autoscalesetting1 `
    -ResourceGroupName $resourceGroupName `
    -Profile $defaultProfile `
    -Notification $notification1 `
    -TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"  

Проверка параметров автомасштабирования

Чтобы просмотреть параметры автомасштабирования, загрузите параметры в переменную, а Get-AzAutoscaleSetting затем выведите переменную следующим образом:

    $autoscaleSetting=Get-AzAutoscaleSetting  -ResourceGroupName $resourceGroupName -Name vmss-autoscalesetting1 
    $autoscaleSetting | Select-Object -Property *

Получение журнала автомасштабирования с помощью AzAutoscaleHistory

Get-AzAutoscaleHistory -ResourceId  /subscriptions/<subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName

Запланированные и повторяющиеся профили

Добавление запланированного профиля для специального события

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

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

$highDemandDay=New-AzAutoscaleProfileObject `
    -Name "High-demand-day" `
    -CapacityDefault 7 `
    -CapacityMaximum 30 `
    -CapacityMinimum 5 `
    -FixedDateEnd ([System.DateTime]::Parse("2023-12-31T14:00:00Z")) `
    -FixedDateStart ([System.DateTime]::Parse("2023-12-31T13:00:00Z")) `
    -FixedDateTimeZone "UTC" `
    -Rule $rule1, $rule2

Update-AzAutoscaleSetting  `
    -Name vmss-autoscalesetting1 `
    -ResourceGroupName $resourceGroupName `
    -Profile $defaultProfile, $highDemandDay `
    -Notification $notification1 `
    -TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"  

Добавление повторяющегося запланированного профиля

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

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

Например, чтобы настроить профиль выходных, который начинается в пятницу вечером и заканчивается утром в понедельник, создайте профиль, который начинается в пятницу вечером, а затем создайте повторяющийся профиль с параметрами по умолчанию, которые начинаются в понедельник утром.

Следующий скрипт создает профиль выходных и дополнительный профиль по умолчанию для завершения профиля выходных.

$fridayProfile=New-AzAutoscaleProfileObject `
    -Name "Weekend" `
    -CapacityDefault 1 `
    -CapacityMaximum 1 `
    -CapacityMinimum 1 `
    -RecurrenceFrequency week  `
    -ScheduleDay "Friday" `
    -ScheduleHour 22  `
    -ScheduleMinute 00  `
    -ScheduleTimeZone  "Pacific Standard Time" `
    -Rule $rule1, $rule2


$defaultRecurringProfile=New-AzAutoscaleProfileObject `
    -Name "default recurring profile" `
    -CapacityDefault 2 `
    -CapacityMaximum 10 `
    -CapacityMinimum 2 `
    -RecurrenceFrequency week  `
    -ScheduleDay "Monday" `
    -ScheduleHour 00  `
    -ScheduleMinute 00  `
    -ScheduleTimeZone  "Pacific Standard Time" `
    -Rule $rule1, $rule2

New-AzAutoscaleSetting  `
    -Location eastus `
    -Name vmss-autoscalesetting1 `
    -ResourceGroupName $resourceGroupName `
    -Profile $defaultRecurringProfile, $fridayProfile `
    -Notification $notification1 `
    -TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"  

Дополнительные сведения о запланированных профилях см. в статье Автомасштабирование с помощью нескольких профилей.

Другие команды автомасштабирования

Полный список командлетов PowerShell для автомасштабирования см. в статье Обозреватель модулей PowerShell.

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

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


Remove-AzResourceGroup -Name $resourceGroupName