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