Konfigurera autoskalning med PowerShell

Inställningar för automatisk skalning hjälper dig att se till att du har rätt mängd resurser som körs för att hantera den varierande belastningen på ditt program. Du kan konfigurera autoskalning med hjälp av mallarna Azure Portal, Azure CLI, PowerShell eller ARM eller Bicep.

Den här artikeln visar hur du konfigurerar autoskalning för en VM-skalningsuppsättning med PowerShell med hjälp av följande steg:

  • Skapa en skalningsuppsättning som du kan skala automatiskt
  • Skapa regler för att skala in och skala ut
  • Skapa en profil som använder dina regler
  • Tillämpa inställningarna för autoskalning
  • Uppdatera inställningarna för autoskalning med meddelanden

Förutsättningar

För att konfigurera autoskalning med PowerShell behöver du ett Azure-konto med en aktiv prenumeration. Du kan skapa ett konto kostnadsfritt.

Konfigurera din miljö

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

Skapa en VM-skalningsuppsättning

Skapa en skalningsuppsättning med hjälp av följande cmdletar. Ange variablerna $resourceGroupName och $vmssName så att de passar din miljö.

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

Skapa inställningar för autoskalning

Följ sekvensen nedan för att skapa autoskalningsinställning med PowerShell:

  1. Skapa regler med hjälp av New-AzAutoscaleScaleRuleObject
  2. Skapa en profil med New-AzAutoscaleProfileObject
  3. Skapa inställningarna för autoskalning med hjälp av New-AzAutoscaleSetting
  4. Uppdatera inställningarna med hjälp av Update-AzAutoscaleSetting

Skapa regler

Skapa regler för att skala in och skala ut och associera dem sedan med en profil. Regler skapas med hjälp av New-AzAutoscaleScaleRuleObject.

Följande PowerShell-skript skapar två regler.

  • Skala ut när cpu-procentandelen överskrider 70 %
  • Skala in när procentandelen CPU är mindre än 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))

I tabellen nedan beskrivs de parametrar som används i cmdleten New-AzAutoscaleScaleRuleObject .

Parameter Beskrivning
MetricTriggerMetricName Anger utlösarmåttet för autoskalning
MetricTriggerMetricResourceUri Anger den resurs som måttet MetricTriggerMetricName tillhör. MetricTriggerMetricResourceUri kan vara vilken resurs som helst och inte bara den resurs som skalas. Du kan till exempel skala Virtual Machine Scale Sets baserat på mått som skapats av en lastbalanserare, databas eller själva skalningsuppsättningen. Måste MetricTriggerMetricName finnas för den angivna MetricTriggerMetricResourceUri.
MetricTriggerTimeGrain Samplingsfrekvensen för det mått som regeln övervakar. MetricTriggerTimeGrain måste vara ett av de fördefinierade värdena för det angivna måttet och måste vara mellan 12 timmar och 1 minut. Till exempel MetricTriggerTimeGrain = innebär PT1M"* att måtten samplas var 1 minut och aggregeras med hjälp av den aggregeringsmetod som anges i MetricTriggerStatistic.
MetricTriggerTimeAggregation Sammansättningsmetoden inom timeGrain-perioden. Till exempel innebär statistik = "Average" och timeGrain = "PT1M" att måtten aggregeras var 1 minut genom att ta medelvärdet.
MetricTriggerStatistic Den aggregeringsmetod som används för att aggregera exempelmåtten. TimeAggregation = "Average" aggregerar till exempel de sampla måtten genom att ta medelvärdet.
MetricTriggerTimeWindow Hur lång tid autoskalningsmotorn ser tillbaka för att aggregera måttet. Det här värdet måste vara större än fördröjningen i måttinsamlingen, som varierar beroende på resurs. Det måste vara mellan 5 minuter och 12 timmar. Till exempel innebär 10 minuter att varje gång autoskalning körs frågar den mått för de senaste 10 minuterna. Med den här funktionen kan dina mått stabiliseras och undvika att reagera på tillfälliga toppar.
MetricTriggerThreshold Definierar värdet för måttet som utlöser en skalningshändelse.
MetricTriggerOperator Anger den logiska jämförande drift som ska användas vid utvärdering av måttvärdet.
MetricTriggerDividePerInstance När värdet är inställt på true dividerar utlösarmåttet med det totala antalet instanser. Om antalet meddelanden till exempel är 300 och det körs 5 instanser är det beräknade måttvärdet 60 meddelanden per instans. Den här egenskapen gäller inte för alla mått.
ScaleActionDirection Ange in- eller utskalning. Giltiga värden är Increase och Decrease.
ScaleActionType Skala efter ett visst antal instanser, skala till ett visst instansantal eller skala efter procentandel av det aktuella instansantalet. Giltiga värden är ChangeCount, ExactCount, och PercentChangeCount.
ScaleActionCooldown Den minsta väntetiden mellan skalningsåtgärderna. Detta gör att måtten kan stabiliseras och undvika flaxning. Om ScaleActionCooldown till exempel är 10 minuter och en skalningsåtgärd just har inträffat försöker autoskalning inte skala igen på 10 minuter.

Skapa en standardprofil för autoskalning och associera reglerna

När du har definierat skalningsreglerna skapar du en profil. Profilen anger standardgränserna för antal instanser, övre och lägre instanser och de tider då de associerade reglerna kan tillämpas. Använd cmdleten New-AzAutoscaleProfileObject för att skapa en ny profil för autoskalning. Eftersom det här är en standardprofil har den inga schemaparametrar. Standardprofilen är aktiv när inga andra profiler är aktiva

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

I tabellen nedan beskrivs de parametrar som används i cmdleten New-AzAutoscaleProfileObject .

Parameter Beskrivning
CapacityDefault Antalet instanser som är om mått inte är tillgängliga för utvärdering. Standardvärdet används bara om det aktuella antalet instanser är lägre än standardvärdet.
CapacityMaximum Det maximala antalet instanser för resursen. Det maximala antalet instanser begränsas ytterligare av antalet kärnor som är tillgängliga i prenumerationen.
CapacityMinimum Det minsta antalet instanser för resursen.
FixedDateEnd Sluttiden för profilen i ISO 8601-format för.
FixedDateStart Starttiden för profilen i ISO 8601-format.
Rule En samling regler som tillhandahåller utlösare och parametrar för skalningsåtgärden när profilen är aktiv. Högst 10 kommaavgränsade regler kan anges.
RecurrenceFrequency Hur ofta den schemalagda profilen börjar gälla. Det här värdet måste vara week.
ScheduleDay En samling dagar som profilen börjar gälla när du anger ett återkommande schema. Möjliga värden är söndag till lördag. Mer information om återkommande scheman finns i Lägga till en återkommande profil med CLI
ScheduleHour En samling timmar som profilen börjar gälla på. Värden som stöds är 0 till 23.
ScheduleMinute En samling minuter då profilen börjar gälla.
ScheduleTimeZone Tidszonen för profilens timmar.

Tillämpa inställningarna för autoskalning

När du har begränsat reglerna och profilen tillämpar du inställningarna för autoskalning med hjälp av New-AzAutoscaleSetting. Om du vill uppdatera befintlig autoskalningsinställning använder du 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"

Lägga till meddelanden i inställningarna för autoskalning

Lägg till meddelanden i försäljningsinställningen för att utlösa en webhook eller skicka e-postmeddelanden när en skalningshändelse inträffar. Mer information om webhook-meddelanden finns i New-AzAutoscaleWebhookNotificationObject

Ange en webhook med hjälp av följande cmdlet;


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

Konfigurera meddelandet med hjälp av webhooken och konfigurera e-postavisering med hjälp av cmdleten New-AzAutoscaleNotificationObject :


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

Uppdatera inställningarna för autoskalning för att tillämpa meddelandet


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

Granska inställningarna för autoskalning

Om du vill granska inställningarna för autoskalning läser du in inställningarna i en variabel med och Get-AzAutoscaleSetting matar sedan ut variabeln enligt följande:

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

Hämta din autoskalningshistorik med hjälp av AzAutoscaleHistory

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

Schemalagda och återkommande profiler

Lägga till en schemalagd profil för en särskild händelse

Konfigurera autoskalningsprofiler för att skala olika för specifika händelser. För en dag då efterfrågan till exempel är högre än vanligt skapar du en profil med ökade gränser för maximal och minsta instans.

I följande exempel används samma regler som standardprofilen som definierats ovan, men nya instansgränser anges för ett visst datum. Du kan också konfigurera olika regler som ska användas med den nya profilen.

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

Lägga till en återkommande schemalagd profil

Med återkommande profiler kan du schemalägga en skalningsprofil som upprepas varje vecka. Skala till exempel till en enda instans under helgen från fredag kväll till måndag morgon.

Även om schemalagda profiler har ett start- och slutdatum har återkommande profiler ingen sluttid. En profil förblir aktiv fram till nästa profils starttid. När du skapar en återkommande profil måste du därför skapa en återkommande standardprofil som startar när du vill att den tidigare återkommande profilen ska slutföras.

Om du till exempel vill konfigurera en helgprofil som börjar på fredagskvällar och slutar på måndag morgon skapar du en profil som startar på fredag kväll och skapar sedan en återkommande profil med dina standardinställningar som börjar på måndag morgon.

Följande skript skapar en helgprofil och en tilläggsstandardprofil för att avsluta helgprofilen.

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

Mer information om schemalagda profiler finns i Autoskalning med flera profiler

Andra autoskalningskommandon

En fullständig lista över PowerShell-cmdletar för automatisk skalning finns i PowerShell Module Browser

Rensa resurser

Om du vill rensa de resurser som du skapade i den här självstudien tar du bort den resursgrupp som du skapade. Följande cmdlet tar bort resursgruppen och alla dess resurser.


Remove-AzResourceGroup -Name $resourceGroupName