具有多个配置文件的自动缩放

缩放一周中特定某天或特定日期和时间的资源,可以降低成本,同时仍在需要时提供所需的容量。

可以在自动缩放中使用多个配置文件在不同时间以不同的方式进行缩放。 例如,如果企业在周末未处于活动状态,请创建定期配置文件以在星期六和星期日缩减资源。 如果黑色星期五是忙碌的一天,请创建一个配置文件以在黑色星期五自动横向扩展资源。

本文介绍自动缩放中不同的配置文件及其使用方法。

可以在自动缩放设置中创建一个或多个配置文件。

有三种类型的配置文件:

  • 默认配置文件。 默认配置文件是自动创建的,不依赖于计划。 默认配置文件是不能删除的。 没有与当前日期和时间匹配的其他配置文件时,系统将使用默认配置文件。
  • 定期配置文件。 定期配置文件在特定时间范围内有效,并针对一周中选定的某一天或几天重复执行。
  • 固定日期和时间的配置文件。 对特定日期的某个时间范围有效的配置文件。

每次运行自动缩放服务时,都会按以下顺序评估配置文件:

  1. 固定日期配置文件
  2. 定期配置文件
  3. 默认配置文件

如果配置文件的日期和时间设置与当前时间匹配,自动缩放将应用该配置文件的规则和容量限制。 仅使用第一个适用的配置文件。

以下示例显示了具有默认配置文件和定期配置文件的自动缩放设置。

屏幕截图,显示具有默认和定期配置文件或缩放条件的自动缩放设置。

在上面的示例中,将在星期一凌晨 3 点停止使用定期配置文件。 如果实例计数小于 3,则自动缩放会缩放到新的最小值 3。 自动缩放将继续使用此配置文件,并在星期一晚上 8 点之前根据 CPU 使用百分比进行缩放。 在所有其他情况下,系统将根据默认配置文件(根据请求数)进行缩放。 星期一晚上 8 点后,自动缩放将切换到默认配置文件。 假设当时的实例数是 12,自动缩放会横向缩减为 10(默认配置文件允许的最大值)。

多个连续配置文件

根据配置文件的开始时间自动缩放配置文件之间的转换。 给定配置文件的结束时间决定于下一个配置文件的开始时间。

在门户中,结束时间字段将成为默认配置文件的下一个开始时间。 你不能为一个配置文件的结束和下一个配置文件的开始指定相同的时间。 门户将结束时间强制设置为比下一个配置文件的开始时间早一分钟。 在这一分钟内,默认配置文件将变为活动状态。 如果不希望默认配置文件在定期配置文件之间变为活动状态,请将结束时间字段留空。

提示

若要使用门户设置多个连续配置文件,请将结束时间留空。 当下一个配置文件变为活动状态时,当前配置文件将被停止使用。 仅当要还原为默认配置文件时,才应指定结束时间。 仅支持通过门户和 ARM 模板创建无结束时间的定期配置文件。

使用模板、CLI 和 PowerShell 的多个配置文件

使用模板、CLI 和 PowerShell 创建多个配置文件时,请遵循以下准则。

PowerShell 可用于在自动缩放设置中创建多个配置文件。

有关完整的自动缩放 PowerShell 命令集,请参阅 PowerShell Az PowerShell module.Monitor 参考

以下步骤演示如何使用 PowerShell 创建自动缩放配置文件。

  1. 使用 New-AzAutoscaleRule 创建规则。
  2. 使用上一步中的规则,通过 New-AzAutoscaleProfile 创建配置文件。
  3. 使用 Add-AzAutoscaleSetting 将配置文件应用于自动缩放设置。

使用 PowerShell 添加定期配置文件

以下示例演示如何创建默认配置文件,以及在星期三和星期五的 09:00 和 23:00 之间重复执行的定期自动缩放配置文件。 默认配置文件使用 CpuInCpuOut 规则。 定期配置文件使用 BandwidthInBandwidthOut 规则。


Set-AzureSubscription -SubscriptionId "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
$ResourceGroupName="rg-vmss-001"
$TargetResourceId="/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rg-vmss-001/providers/Microsoft.Compute/virtualMachineScaleSets/vmss-001"
$ScaleSettingName="vmss-autoscalesetting=001"

$CpuOut=New-AzAutoscaleScaleRuleObject `
    -MetricTriggerMetricName "Percentage CPU" `
    -MetricTriggerMetricResourceUri "$TargetResourceId"  `
    -MetricTriggerTimeGrain ([System.TimeSpan]::New(0,1,0)) `
    -MetricTriggerStatistic "Average" `
    -MetricTriggerTimeWindow ([System.TimeSpan]::New(0,5,0)) `
    -MetricTriggerTimeAggregation "Average" `
    -MetricTriggerOperator "GreaterThan" `
    -MetricTriggerThreshold 50 `
    -MetricTriggerDividePerInstance $false `
    -ScaleActionDirection "Increase" `
    -ScaleActionType "ChangeCount" `
    -ScaleActionValue 1 `
    -ScaleActionCooldown ([System.TimeSpan]::New(0,5,0))


$CpuIn=New-AzAutoscaleScaleRuleObject `
    -MetricTriggerMetricName "Percentage CPU" `
    -MetricTriggerMetricResourceUri "$TargetResourceId"  `
    -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))


$defaultProfile=New-AzAutoscaleProfileObject `
    -Name "Default" `
    -CapacityDefault 1 `
    -CapacityMaximum 5 `
    -CapacityMinimum 1 `
    -Rule $CpuOut, $CpuIn


$BandwidthIn=New-AzAutoscaleScaleRuleObject `
    -MetricTriggerMetricName "VM Cached Bandwidth Consumed Percentage" `
    -MetricTriggerMetricResourceUri "$TargetResourceId"  `
    -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))


$BandwidthOut=New-AzAutoscaleScaleRuleObject `
    -MetricTriggerMetricName "VM Cached Bandwidth Consumed Percentage" `
    -MetricTriggerMetricResourceUri "$TargetResourceId"  `
    -MetricTriggerTimeGrain ([System.TimeSpan]::New(0,1,0)) `
    -MetricTriggerStatistic "Average" `
    -MetricTriggerTimeWindow ([System.TimeSpan]::New(0,5,0)) `
    -MetricTriggerTimeAggregation "Average" `
    -MetricTriggerOperator "GreaterThan" `
    -MetricTriggerThreshold 60 `
    -MetricTriggerDividePerInstance $false `
    -ScaleActionDirection "Increase" `
    -ScaleActionType "ChangeCount" `
    -ScaleActionValue 1 `
    -ScaleActionCooldown ([System.TimeSpan]::New(0,5,0))

$RecurringProfile=New-AzAutoscaleProfileObject `
    -Name "Wednesdays and Fridays" `
    -CapacityDefault 1 `
    -CapacityMaximum 10 `
    -CapacityMinimum 1 `
    -RecurrenceFrequency week `
    -ScheduleDay "Wednesday","Friday" `
    -ScheduleHour 09 `
    -ScheduleMinute 00  `
    -ScheduleTimeZone "Pacific Standard Time" `
    -Rule $BandwidthIn, $BandwidthOut



$DefaultProfile2=New-AzAutoscaleProfileObject `
    -Name "Back to default after Wednesday and Friday" `
    -CapacityDefault 1 `
    -CapacityMaximum 5 `
    -CapacityMinimum 1 `
    -RecurrenceFrequency week `
    -ScheduleDay "Wednesday","Friday" `
    -ScheduleHour 23 `
    -ScheduleMinute 00 `
    -ScheduleTimeZone "Pacific Standard Time" `
    -Rule $CpuOut, $CpuIn


Update-AzAutoscaleSetting  `
-name $ScaleSettingName `
-ResourceGroup $ResourceGroupName `
-Enabled $true `
-TargetResourceUri $TargetResourceId `
-Profile $DefaultProfile, $RecurringProfile, $DefaultProfile2

备注

不能在 PowerShell 中为定期配置文件指定结束日期。 若要结束定期配置文件,请使用与定期配置文件相同的定期参数创建默认配置文件的副本。 将开始时间设置为希望定期配置文件结束的时间。 每个定期配置文件都需要其自己的默认配置文件副本来指定结束时间。

在具有定期配置文件的情况下更新默认配置文件

如果有多个定期配置文件并且想要更改默认配置文件,则必须对与定期配置文件相对应的每个默认配置文件进行更改。

例如,如果有两个名为 SundayProfileThursdayProfilee 的定期配置文件,则需要使用两个 New-AzAutoscaleProfile 命令才能更改为默认配置文件。



$DefaultProfileSundayProfile = New-AzAutoscaleProfile -DefaultCapacity "1" -MaximumCapacity "10" -MinimumCapacity "1" -Rule $CpuOut,$CpuIn -Name "Defalut for Sunday" -RecurrenceFrequency week  -ScheduleDay "Sunday" -ScheduleHour 19 -ScheduleMinute 00   -ScheduleTimeZone "Pacific Standard Time"`


$DefaultProfileThursdayProfile = New-AzAutoscaleProfile -DefaultCapacity "1" -MaximumCapacity "10" -MinimumCapacity "1" -Rule $CpuOut,$CpuIn -Name "Default for Thursday" -RecurrenceFrequency week  -ScheduleDay "Thursday" -ScheduleHour 19 -ScheduleMinute 00   -ScheduleTimeZone "Pacific Standard Time"`

后续步骤