Настройка автомасштабирования с помощью 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, выполните следующую последовательность:
- Создание правил с помощью
New-AzAutoscaleScaleRuleObject
- Создание профиля с помощью
New-AzAutoscaleProfileObject
- Создание параметров автомасштабирования с помощью
New-AzAutoscaleSetting
- Обновление параметров с помощью
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 "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