Настройка автомасштабирования с помощью 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 минуты. Например, 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