Поделиться через


Настройка автомасштабирования с помощью 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 минуты. Например, PT1M"* означает, MetricTriggerTimeGrain = что метрики выборки выполняются каждые 1 минуты и агрегируются с помощью метода агрегирования, указанного в MetricTriggerStatistic.
MetricTriggerTimeAggregation Метод агрегирования, используемый в течение периода timeGrain. Например, статистика = "Среднее" и timeGrain = "PT1M" означает, что метрики агрегируются каждые 1 минуты, принимая среднее значение.
MetricTriggerStatistic Метод агрегирования метрик выборки. Например, TimeAggregation = "Среднее" агрегирует образцы метрик, принимая среднее значение.
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 Коллекция дней, на которые действует профиль при указании повторяющегося расписания. Возможные значения в воскресенье до субботы. Дополнительные сведения о повторяющихся расписаниях см. в разделе "Добавление повторяющегося профиля с помощью ИНТЕРФЕЙСА командной строки"
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 "[email protected]" `
    -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