Dela via


Konfigurera autoskalning med PowerShell

Autoskalning säkerställer att du har rätt mängd resurser som körs för att hantera den fluktuerande belastningen i ditt program. Du kan konfigurera autoskalning med hjälp av Azure-portalen, Azure CLI, PowerShell eller ARM eller Bicep-mallar.

Den här artikeln visar hur du konfigurerar autoskalning för en VM-skalningsuppsättning med PowerShell. Konfigurationerna använder 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 autoskalningsinställningar

Om du vill skapa autoskalningsinställning med PowerShell följer du sekvensen nedan:

  1. Skapa regler med hjälp av New-AzAutoscaleScaleRuleObject
  2. Skapa en profil med hjälp av 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 cpu i procent ä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 Description
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 resursen som skalas. Du kan till exempel skala dina VM-skalningsuppsättningar baserat på mått som skapats av en lastbalanserare, databas eller själva skalningsuppsättningen. MetricTriggerMetricName Måste 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. PT1M"* innebär till exempel MetricTriggerTimeGrain = att måtten samplas var 1 minut och aggregeras med hjälp av aggregeringsmetoden som anges i MetricTriggerStatistic.
MetricTriggerTimeAggregation Aggregeringsmetoden inom tidsperiodenGrain. Till exempel innebär statistik = "Genomsnitt" och timeGrain = "PT1M" att måtten aggregeras var 1 minut genom att ta medelvärdet.
MetricTriggerStatistic Aggregeringsmetoden som används för att aggregera de samplade måtten. Till exempel aggregerar TimeAggregation = "Average" de samplade 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åttsamlingen, 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 under 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, ExactCountoch PercentChangeCount.
ScaleActionCooldown Den minsta väntetiden mellan skalningsåtgärderna. Detta gör att måtten kan stabiliseras och undvika flaxning. Om ScaleActionCooldown det till exempel är 10 minuter och en skalningsåtgärd just har inträffat försöker autoskalning inte skalas 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 autoskalningsprofil. 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 Description
CapacityDefault Antalet instanser som är om mått inte är tillgängliga för utvärdering. Standardvärdet används bara om det aktuella instansantalet ä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. Maximalt 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. 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 finnat reglerna och profilen tillämpar du inställningarna för autoskalning med hjälp av New-AzAutoscaleSetting. Så här uppdaterar du befintlig autoskalningsinställning 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 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 på olika sätt 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 på helgen från fredag kväll till måndag morgon.

Schemalagda profiler har ett start- och slutdatum, men återkommande profiler har 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 startar på fredagskvällar och slutar på måndagsmorgnar skapar du en profil som startar på fredag kväll och skapar sedan en återkommande profil med standardinställningarna 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 autoskalning 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