Konfigurace automatického škálování pomocí PowerShellu

Nastavení automatického škálování pomáhá zajistit, že máte spuštěné správné množství prostředků pro zvládnutí kolísajícího zatížení vaší aplikace. Automatické škálování můžete nakonfigurovat pomocí Azure Portal, Azure CLI, PowerShellu nebo šablon ARM nebo Bicep.

V tomto článku se dozvíte, jak nakonfigurovat automatické škálování pro škálovací sadu virtuálních počítačů pomocí PowerShellu pomocí následujících kroků:

  • Vytvoření škálovací sady, kterou můžete automaticky škálovat
  • Vytvoření pravidel pro horizontální snížení a horizontální navýšení kapacity
  • Vytvoření profilu, který používá vaše pravidla
  • Použití nastavení automatického škálování
  • Aktualizace nastavení automatického škálování pomocí oznámení

Požadavky

Pokud chcete nakonfigurovat automatické škálování pomocí PowerShellu, potřebujete účet Azure s aktivním předplatným. Účet si můžete vytvořit zdarma.

Nastavení prostředí

#Set the subscription Id, VMSS name, and resource group name
$subscriptionId = (Get-AzContext).Subscription.Id
$resourceGroupName="rg-powershell-autoscale"
$vmssName="vmss-001"

Vytvoření škálovací sady virtuálních počítačů

Vytvořte škálovací sadu pomocí následujících rutin. $resourceGroupName Nastavte proměnné a $vmssName tak, aby nastavily vaše prostředí.

# 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"

Vytvoření nastavení automatického škálování

Pokud chcete vytvořit nastavení automatického škálování pomocí PowerShellu, postupujte následovně:

  1. Vytváření pravidel pomocí New-AzAutoscaleScaleRuleObject
  2. Vytvoření profilu pomocí New-AzAutoscaleProfileObject
  3. Vytvoření nastavení automatického škálování pomocí New-AzAutoscaleSetting
  4. Aktualizujte nastavení pomocí Update-AzAutoscaleSetting

Vytvoření pravidel

Vytvořte pravidla horizontálního snížení a snížení kapacity a pak je přidružte k profilu. Pravidla se vytvářejí pomocí .New-AzAutoscaleScaleRuleObject

Následující skript PowerShellu vytvoří dvě pravidla.

  • Horizontální navýšení kapacity, když procento procesoru překročí 70 %
  • Horizontální snížení kapacity při procentuálním využití procesoru nižší než 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))

Následující tabulka popisuje parametry použité v rutině New-AzAutoscaleScaleRuleObject .

Parametr Popis
MetricTriggerMetricName Nastaví metriku triggeru automatického škálování.
MetricTriggerMetricResourceUri Určuje prostředek, ke kterému metrika MetricTriggerMetricName patří. MetricTriggerMetricResourceUri může být libovolný prostředek, a ne jen prostředek, který se škáluje. Můžete například škálovat Virtual Machine Scale Sets na základě metrik vytvořených nástrojem pro vyrovnávání zatížení, databází nebo samotnou škálovací sadou. Musí MetricTriggerMetricName existovat pro zadaný MetricTriggerMetricResourceUri.
MetricTriggerTimeGrain Frekvence vzorkování metriky, kterou pravidlo monitoruje. MetricTriggerTimeGrain musí být jednou z předdefinovaných hodnot pro zadanou metriku a musí to být 12 hodin až 1 minuta. Například MetricTriggerTimeGrain = PT1M* znamená, že metriky se vzorkují každou minutu a agregují se pomocí metody agregace zadané v MetricTriggerStatistic.
MetricTriggerTimeAggregation Metoda agregace v rámci časového období. Například statistika = "Průměr" a timeGrain = "PT1M" znamenají, že metriky se agregují každou minutu na základě průměru.
MetricTriggerStatistic Metoda agregace použitá k agregaci vzorkovaných metrik. Například TimeAggregation = "Average" agreguje vzorkované metriky podle průměru.
MetricTriggerTimeWindow Doba, po kterou modul automatického škálování agreguje metriku. Tato hodnota musí být větší než zpoždění v kolekci metrik, které se liší podle prostředku. Musí to být 5 minut až 12 hodin. Například 10 minut znamená, že při každém spuštění automatického škálování se dotazuje na metriky za posledních 10 minut. Tato funkce umožňuje, aby se metriky stabilizovaly a aby nedocházelo k přechodným špičkám.
MetricTriggerThreshold Definuje hodnotu metriky, která aktivuje událost škálování.
MetricTriggerOperator Určuje logický srovnávací provoz, který se má použít při vyhodnocování hodnoty metriky.
MetricTriggerDividePerInstance Při nastavení se true metrika triggeru vydělí celkovým počtem instancí. Pokud je například počet zpráv 300 a je spuštěno 5 instancí, počítaná hodnota metriky je 60 zpráv na instanci. Tato vlastnost se nedá použít pro všechny metriky.
ScaleActionDirection Určete horizontální snížení nebo snížení kapacity. Platné hodnoty jsou Increase a Decrease.
ScaleActionType Škálování podle určitého počtu instancí, škálování na konkrétní počet instancí nebo procento aktuálního počtu instancí. Mezi platné hodnoty patří ChangeCount, ExactCounta PercentChangeCount.
ScaleActionCooldown Minimální doba čekání mezi operacemi škálování. To umožňuje, aby se metriky stabilizují a zabránilo se flappingu. Pokud ScaleActionCooldown je například 10 minut a právě došlo k operaci škálování, automatické škálování se nepokusí škálovat znovu po dobu 10 minut.

Vytvoření výchozího profilu automatického škálování a přidružení pravidel

Po definování pravidel škálování vytvořte profil. Profil určuje výchozí, horní a dolní omezení počtu instancí a časy, kdy je možné použít přidružená pravidla. Pomocí rutiny New-AzAutoscaleProfileObject vytvořte nový profil automatického škálování. Vzhledem k tomu, že se jedná o výchozí profil, nemá žádné parametry plánu. Výchozí profil je aktivní v době, kdy nejsou aktivní žádné jiné profily.

$defaultProfile=New-AzAutoscaleProfileObject `
    -Name "default" `
    -CapacityDefault 1 `
    -CapacityMaximum 10 `
    -CapacityMinimum 1 `
    -Rule $rule1, $rule2

Následující tabulka popisuje parametry použité v rutině New-AzAutoscaleProfileObject .

Parametr Popis
CapacityDefault Počet instancí, které jsou, pokud metriky nejsou k dispozici pro vyhodnocení. Výchozí hodnota se použije pouze v případě, že je aktuální počet instancí nižší než výchozí hodnota.
CapacityMaximum Maximální počet instancí pro prostředek. Maximální počet instancí je dále omezený počtem jader, která jsou k dispozici v předplatném.
CapacityMinimum Minimální počet instancí pro prostředek.
FixedDateEnd Koncový čas profilu ve formátu ISO 8601 pro.
FixedDateStart Počáteční čas profilu ve formátu ISO 8601.
Rule Kolekce pravidel, která poskytují triggery a parametry akce škálování, když je tento profil aktivní. Je možné zadat maximálně 10 pravidel oddělených čárkami.
RecurrenceFrequency Jak často se naplánovaný profil projeví. Tato hodnota musí být week.
ScheduleDay Kolekce dnů, na které se profil projeví při zadání plánu opakování. Možné hodnoty jsou od neděle do soboty. Další informace o plánech opakování najdete v tématu Přidání opakovaného profilu pomocí rozhraní příkazového řádku.
ScheduleHour Kolekce hodin, na které se profil projeví. Podporované hodnoty jsou 0 až 23.
ScheduleMinute Kolekce minut, ve kterých se profil projeví.
ScheduleTimeZone Časové pásmo pro hodiny profilu.

Použití nastavení automatického škálování

Po dokončení pravidel a profilu použijte nastavení automatického škálování pomocí New-AzAutoscaleSetting. Pokud chcete aktualizovat stávající nastavení automatického škálování, použijte 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"

Přidání oznámení do nastavení automatického škálování

Přidáním oznámení do nastavení prodeje aktivujte webhook nebo odešlete e-mailová oznámení, když dojde k události škálování. Další informace o oznámeních webhooků najdete v tématu New-AzAutoscaleWebhookNotificationObject

Nastavení webhooku pomocí následující rutiny:


  $webhook1=New-AzAutoscaleWebhookNotificationObject -Property @{} -ServiceUri "http://contoso.com/webhook1"

Nakonfigurujte oznámení pomocí webhooku a nastavte e-mailové oznámení pomocí rutiny New-AzAutoscaleNotificationObject :


    $notification1=New-AzAutoscaleNotificationObject `
    -EmailCustomEmail "jason@contoso.com" `
    -EmailSendToSubscriptionAdministrator $true `
    -EmailSendToSubscriptionCoAdministrator $true `
    -Webhook $webhook1

Aktualizace nastavení automatického škálování pro použití oznámení


Update-AzAutoscaleSetting  `
    -Name vmss-autoscalesetting1 `
    -ResourceGroupName $resourceGroupName `
    -Profile $defaultProfile `
    -Notification $notification1 `
    -TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"  

Kontrola nastavení automatického škálování

Pokud chcete zkontrolovat nastavení automatického škálování, načtěte nastavení do proměnné pomocí příkazu Get-AzAutoscaleSetting a pak vygenerujte proměnnou následujícím způsobem:

    $autoscaleSetting=Get-AzAutoscaleSetting  -ResourceGroupName $resourceGroupName -Name vmss-autoscalesetting1 
    $autoscaleSetting | Select-Object -Property *

Získání historie automatického škálování pomocí AzAutoscaleHistory

Get-AzAutoscaleHistory -ResourceId  /subscriptions/<subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName

Naplánované a opakované profily

Přidání naplánovaného profilu pro zvláštní událost

Nastavte profily automatického škálování tak, aby se pro konkrétní události škálovat jinak. Například pro den, kdy bude poptávka vyšší než obvykle, vytvořte profil se zvýšenými maximálními a minimálními limity instancí.

Následující příklad používá stejná pravidla jako výchozí profil definovaný výše, ale nastavuje limity nových instancí pro konkrétní datum. Můžete také nakonfigurovat různá pravidla pro použití s novým profilem.

$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"  

Přidání opakovaného naplánovaného profilu

Opakované profily umožňují naplánovat profil škálování, který se bude opakovat každý týden. Můžete například škálovat na jednu instanci o víkendu od páteční noci do pondělního rána.

I když naplánované profily mají počáteční a koncové datum, opakované profily nemají koncový čas. Profil zůstane aktivní až do času zahájení dalšího profilu. Proto při vytváření opakovaného profilu musíte vytvořit opakující se výchozí profil, který začíná, když chcete dokončit předchozí opakovaný profil.

Pokud například chcete nakonfigurovat víkendový profil, který začíná v pátek v noci a končí v pondělí ráno, vytvořte profil, který začíná v pátek večer, a pak vytvořte opakovaný profil s výchozím nastavením, které začíná v pondělí ráno.

Následující skript vytvoří víkendový profil a další výchozí profil pro ukončení víkendového profilu.

$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"  

Další informace o naplánovaných profilech najdete v tématu Automatické škálování s více profily.

Další příkazy automatického škálování

Úplný seznam rutin PowerShellu pro automatické škálování najdete v prohlížeči modulů PowerShellu.

Vyčištění prostředků

Pokud chcete vyčistit prostředky, které jste vytvořili v tomto kurzu, odstraňte skupinu prostředků, kterou jste vytvořili. Následující rutina odstraní skupinu prostředků a všechny její prostředky.


Remove-AzResourceGroup -Name $resourceGroupName