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 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. 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:
- Skapa regler med hjälp av
New-AzAutoscaleScaleRuleObject
- Skapa en profil med hjälp av
New-AzAutoscaleProfileObject
- Skapa inställningarna för autoskalning med hjälp av
New-AzAutoscaleSetting
- 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 , 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 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