Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Автомасштабирование гарантирует, что у вас имеется достаточное количество ресурсов для обработки изменяющейся нагрузки вашего приложения. Вы можете настроить автомасштабирование с помощью портала Azure, Azure CLI, Azure PowerShell или шаблонов ARM или Bicep.
В этой статье показано, как настроить автомасштабирование для масштабируемого набора виртуальных машин с помощью PowerShell. Конфигурации выполняются в следующих шагах.
- Создайте группу масштабирования, которую можно автомасштабировать.
- Создайте правила для уменьшения масштаба и увеличения масштаба.
- Создайте профиль, использующий ваши правила.
- Примените параметры автомасштабирования.
- Обновите параметры автомасштабирования и уведомления.
Требования
Чтобы настроить автомасштабирование с помощью PowerShell, требуется учетная запись Azure с активной подпиской. Вы можете создать учетную запись бесплатно.
Настройка среды
Используйте PowerShell в Azure Cloud Shell.
Note
Запустите примеры в одном сеансе PowerShell с выбранной подпиской.
# Set variables
$resourceGroupName = "<ResourceGroupName>"
$vmssName = "<VirtualMachineScaleSetName>"
$autoscaleName = "<AutoscaleSettingName>"
$azureRegion = "<AzureRegion>"
$virtualNetworkName = "<VirtualNetworkName>"
$subnetName = "<SubnetName>"
$publicIpAddressName = "<PublicIpAddressName>"
$loadBalancerName = "<LoadBalancerName>"
# Get the subscription ID from the current Azure PowerShell context
$subscriptionId = (Get-AzContext).Subscription.Id
# Build virtual machine scale set resource ID
$vmssPath = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName"
$vmssProvider = "Microsoft.Compute/virtualMachineScaleSets/$vmssName"
$vmssResourceId = "$vmssPath/providers/$vmssProvider"
Создайте масштабируемый набор виртуальных машин
В следующем Azure PowerShell примере используются New-AzResourceGroup командлеты и New-AzVmss командлеты.
Note
Используйте выделенную группу ресурсов для этого примера, чтобы удалить ее ресурсы после завершения.
В примере создается общедоступный IP-адрес. Для доступа к управлению используйте Бастион Azure вместо открытия портов RDP или SSH для доступа из Интернета.
# Create the resource group
New-AzResourceGroup -ResourceGroupName $resourceGroupName -Location $azureRegion
# Get credentials for the virtual machine scale set
$vmCredential = Get-Credential
# Define parameters for New-AzVmss
$newAzVmssParams = @{
ResourceGroupName = $resourceGroupName
Location = $azureRegion
VMScaleSetName = $vmssName
Credential = $vmCredential
VirtualNetworkName = $virtualNetworkName
SubnetName = $subnetName
PublicIpAddressName = $publicIpAddressName
LoadBalancerName = $loadBalancerName
OrchestrationMode = "Flexible"
}
# Create the virtual machine scale set
New-AzVmss @newAzVmssParams
Создание параметров автомасштабирования
Чтобы создать параметр автомасштабирования с помощью PowerShell, выполните следующую последовательность:
- Создавайте правила с помощью
New-AzAutoscaleScaleRuleObject. - Создайте профиль с помощью
New-AzAutoscaleProfileObject. - Создайте параметры автомасштабирования с помощью
New-AzAutoscaleSetting. - Обновите параметры с помощью
Update-AzAutoscaleSetting.
Создание правил
Создайте правила уменьшения масштаба и горизонтального масштабирования, а затем свяжите их с профилем.
В следующем примере Azure PowerShell используется командлет New-AzAutoscaleScaleRuleObject.
Note
Создаются два правила:
- Выполнить горизонтальное масштабирование, если процент ЦП превышает 70 %.
- Уменьшение масштаба в случае, если процент ЦП меньше 30%.
# Define parameters for New-AzAutoscaleScaleRuleObject
$newAzAutoscaleScaleRuleObjectParams = @{
MetricTriggerMetricName = "Percentage CPU"
MetricTriggerMetricResourceUri = $vmssResourceId
MetricTriggerTimeGrain = New-TimeSpan -Minutes 1
MetricTriggerStatistic = "Average"
MetricTriggerTimeWindow = New-TimeSpan -Minutes 5
MetricTriggerTimeAggregation = "Average"
MetricTriggerOperator = "GreaterThan"
MetricTriggerThreshold = 70
MetricTriggerDividePerInstance = $false
ScaleActionDirection = "Increase"
ScaleActionType = "ChangeCount"
ScaleActionValue = "1"
ScaleActionCooldown = New-TimeSpan -Minutes 5
}
$scaleOutRule = New-AzAutoscaleScaleRuleObject @newAzAutoscaleScaleRuleObjectParams
# Define parameters for New-AzAutoscaleScaleRuleObject
$newAzAutoscaleScaleRuleObjectParams = @{
MetricTriggerMetricName = "Percentage CPU"
MetricTriggerMetricResourceUri = $vmssResourceId
MetricTriggerTimeGrain = New-TimeSpan -Minutes 1
MetricTriggerStatistic = "Average"
MetricTriggerTimeWindow = New-TimeSpan -Minutes 5
MetricTriggerTimeAggregation = "Average"
MetricTriggerOperator = "LessThan"
MetricTriggerThreshold = 30
MetricTriggerDividePerInstance = $false
ScaleActionDirection = "Decrease"
ScaleActionType = "ChangeCount"
ScaleActionValue = "1"
ScaleActionCooldown = New-TimeSpan -Minutes 5
}
$scaleInRule = New-AzAutoscaleScaleRuleObject @newAzAutoscaleScaleRuleObjectParams
В таблице ниже описаны параметры, используемые в командлете 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 |
Минимальный промежуток времени, который должен пройти после операции масштабирования, прежде чем это правило сможет инициировать следующее действие масштабирования. Автомасштабирование проверяет период восстановления для каждого правила независимо. Период ожидания позволяет метрикам стабилизироваться и предотвращает колебания. |
Создание профиля автомасштабирования по умолчанию и связывание правил
После определения правил масштабирования создайте профиль. Профиль задает ограничения по умолчанию, верхнему и нижнему числу экземпляров и времени применения связанных правил.
В следующем примере Azure PowerShell используется командлет New-AzAutoscaleProfileObject.
Note
Так как этот профиль является профилем по умолчанию, он не имеет параметров расписания. Профиль по умолчанию активен в то время, когда другие профили не являются активными.
# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
Name = "default"
CapacityDefault = "1"
CapacityMaximum = "10"
CapacityMinimum = "1"
Rule = @($scaleOutRule, $scaleInRule)
}
$defaultProfile = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams
В таблице ниже описаны параметры, используемые в командлете New-AzAutoscaleProfileObject .
| Параметр | Описание |
|---|---|
CapacityDefault |
Количество экземпляров в случаях, когда метрики недоступны для оценки. Значение по умолчанию используется только в том случае, если текущее число экземпляров меньше, чем значение по умолчанию. |
CapacityMaximum |
Максимальное количество экземпляров ресурса. Максимальное количество экземпляров ограничивается числом ядер, доступных в подписке. |
CapacityMinimum |
Минимальное количество экземпляров ресурса. |
FixedDateEnd |
Время окончания профиля в формате ISO 8601 для. |
FixedDateStart |
Время начала профиля в формате ISO 8601. |
Rule |
Коллекция правил, которые предоставляют триггеры и параметры для действия масштабирования, когда этот профиль активен. Можно указать не более 10 разделяемых запятыми правил. |
RecurrenceFrequency |
Как часто запланированный профиль вступает в силу. Это значение должно быть week. |
ScheduleDay |
Коллекция дней, на которые действует профиль при указании повторяющегося расписания. Возможные значения: от воскресенья до субботы. Дополнительные сведения о повторяющихся расписаниях см. в разделе Повторяющиеся профили с помощью PowerShell. |
ScheduleHour |
Набор часов, на которые распространяется действие профиля. Поддерживаемые значения — от 0 до 23. |
ScheduleMinute |
Коллекция минут, в течение которых профиль вступает в силу. |
ScheduleTimeZone |
Часовой пояс профиля. |
Применение параметров автомасштабирования
После определения правил и профиля примените параметры автомасштабирования. Чтобы обновить существующий параметр автомасштабирования, используйте Update-AzAutoscaleSetting.
В следующем примере Azure PowerShell используется командлет New-AzAutoscaleSetting.
# Define parameters for New-AzAutoscaleSetting
$newAzAutoscaleSettingParams = @{
Name = $autoscaleName
ResourceGroupName = $resourceGroupName
Location = $azureRegion
Profile = @($defaultProfile)
Enabled = $true
PropertiesName = $autoscaleName
TargetResourceUri = $vmssResourceId
}
# Create the autoscale setting
New-AzAutoscaleSetting @newAzAutoscaleSettingParams
Добавление уведомлений в параметры автомасштабирования
Добавьте уведомления в параметр автомасштабирования для активации вебхука или отправки уведомлений по электронной почте при возникновении события масштабирования.
В следующем примере Azure PowerShell используется командлет New-AzAutoscaleWebhookNotificationObject.
# Set variables
$webhookUri = "<WebhookUri>"
# Create the webhook notification
$webhook = New-AzAutoscaleWebhookNotificationObject -Property @{} -ServiceUri $webhookUri
В следующем примере Azure PowerShell используется командлет New-AzAutoscaleNotificationObject для настройки уведомлений веб-перехватчика и электронной почты.
Note
Используйте HTTPS-эндпоинт для вебхука.
# Set variables
$notificationEmail = "<NotificationEmail>"
# Define parameters for New-AzAutoscaleNotificationObject
$newAzAutoscaleNotificationObjectParams = @{
EmailCustomEmail = @($notificationEmail)
EmailSendToSubscriptionAdministrator = $true
EmailSendToSubscriptionCoAdministrator = $true
Webhook = @($webhook)
}
$notification = New-AzAutoscaleNotificationObject @newAzAutoscaleNotificationObjectParams
В следующем примере Azure PowerShell используется командлет Update-AzAutoscaleSetting для применения уведомления.
# Define parameters for Update-AzAutoscaleSetting
$updateAzAutoscaleSettingParams = @{
Name = $autoscaleName
ResourceGroupName = $resourceGroupName
Notification = @($notification)
}
# Update the autoscale notification
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams
Просмотр параметров автомасштабирования
В следующем примере Azure PowerShell используется командлет Get-AzAutoscaleSetting для получения параметра автомасштабирования.
# Define parameters for Get-AzAutoscaleSetting
$getAzAutoscaleSettingParams = @{
ResourceGroupName = $resourceGroupName
Name = $autoscaleName
}
$autoscaleSetting = Get-AzAutoscaleSetting @getAzAutoscaleSettingParams
$autoscaleSetting | Select-Object -Property *
В следующем примере Azure PowerShell используется командлет Get-AzAutoscaleHistory.
Note
Он запрашивает историю параметра автомасштабирования, а не идентификатор ресурса масштабируемого набора.
# Build autoscale setting resource ID
$autoscalePath = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName"
$autoscaleProvider = "Microsoft.Insights/autoscaleSettings/$autoscaleName"
$autoscaleResourceId = "$autoscalePath/providers/$autoscaleProvider"
# Retrieve the autoscale history
Get-AzAutoscaleHistory -ResourceId $autoscaleResourceId
Запланированные и повторяющиеся задачи
Note
При обновлении Profileвключите каждый профиль, который вы хотите сохранить. В следующих примерах профили добавляются в настройку, созданную ранее в этой статье. Оставляйте без изменений любые другие профили при адаптации их к другому параметру автоматического масштабирования.
Добавить запланированный профиль для специального события
Настройте профили автомасштабирования для масштабирования по-разному для определенных событий. Например, в течение дня, когда спрос будет выше обычного, создайте профиль с повышенными максимальными и минимальными ограничениями экземпляров.
В следующем примере Azure PowerShell используются командлеты New-AzAutoscaleProfileObject и Update-AzAutoscaleSetting.
Note
В следующем примере используются те же правила, что и в профиле по умолчанию, определенном ранее, но задаются новые ограничения для экземпляров на определенную дату. Вы также можете настроить различные правила для использования с новым профилем. Начальные и конечные значения используют метки времени ISO 8601 в формате UTC.
# Set variables
$startTime = "<StartTime>"
$endTime = "<EndTime>"
# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
Name = "High-demand-day"
CapacityDefault = "7"
CapacityMaximum = "30"
CapacityMinimum = "5"
FixedDateEnd = [datetime]::Parse($endTime)
FixedDateStart = [datetime]::Parse($startTime)
FixedDateTimeZone = "UTC"
Rule = @($scaleOutRule, $scaleInRule)
}
$highDemandDay = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams
# Define parameters for Update-AzAutoscaleSetting
$updateAzAutoscaleSettingParams = @{
Name = $autoscaleName
ResourceGroupName = $resourceGroupName
Profile = @($defaultProfile, $highDemandDay)
}
# Update the autoscale profiles
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams
Добавление повторяющегося запланированного профиля
Повторяющиеся профили позволяют запланировать профиль масштабирования, повторяющийся каждую неделю.
Хотя запланированные профили имеют дату начала и окончания, повторяющиеся профили не имеют времени окончания. Профиль остается активным до момента начала следующего профиля. Поэтому при создании повторяющегося профиля необходимо создать повторяющийся профиль по умолчанию, который начинается при завершении предыдущего повторяющегося профиля.
В следующем Azure PowerShell примере используются New-AzAutoscaleProfileObject командлеты и Update-AzAutoscaleSetting командлеты.
Note
Например, масштабирование до одного экземпляра в выходные с пятницы вечером до понедельника утром. Чтобы настроить профиль выходных, который начинается в пятницу вечером и заканчивается в понедельник утром, создайте профиль, который начинается в пятницу вечером, а затем создайте повторяющийся профиль с параметрами по умолчанию, который начинается в понедельник утром.
Он создает профиль выходных и повторяющийся профиль по умолчанию для завершения профиля выходных, сохраняя профили по умолчанию и с фиксированной датой из предыдущих шагов.
# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
Name = "Weekend"
CapacityDefault = "1"
CapacityMaximum = "1"
CapacityMinimum = "1"
RecurrenceFrequency = "Week"
ScheduleDay = @("Friday")
ScheduleHour = @(22)
ScheduleMinute = @(0)
ScheduleTimeZone = "Pacific Standard Time"
Rule = @($scaleOutRule, $scaleInRule)
}
$fridayProfile = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams
# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
Name = "default recurring profile"
CapacityDefault = "2"
CapacityMaximum = "10"
CapacityMinimum = "2"
RecurrenceFrequency = "Week"
ScheduleDay = @("Monday")
ScheduleHour = @(0)
ScheduleMinute = @(0)
ScheduleTimeZone = "Pacific Standard Time"
Rule = @($scaleOutRule, $scaleInRule)
}
$defaultRecurringProfile = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams
# Define parameters for Update-AzAutoscaleSetting
$updateAzAutoscaleSettingParams = @{
Name = $autoscaleName
ResourceGroupName = $resourceGroupName
Profile = @(
$defaultProfile
$highDemandDay
$defaultRecurringProfile
$fridayProfile
)
}
# Update the autoscale profiles
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams
Дополнительные сведения о запланированных профилях см. в разделе "Автомасштабирование" с несколькими профилями.
Другие команды автомасштабирования
Полный список командлетов PowerShell для автомасштабирования см. в браузере модуля PowerShell.
Очистка ресурсов
Чтобы очистить ресурсы, созданные в этом руководстве, удалите созданную выделенную группу ресурсов. Следующий командлет удаляет группу ресурсов и все ее ресурсы.
В следующем примере Azure PowerShell используется командлет Remove-AzResourceGroup.
# Delete the example resource group
Remove-AzResourceGroup -Name $resourceGroupName