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


Настройка автомасштабирования с помощью 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"* означает, что метрики выборки выполняются каждую минуту и агрегируются с помощью метода агрегирования, указанного в 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