Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 Azure-portalen, Azure CLI, Azure 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 baseras på dina regler.
- Använd 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ö
Använd PowerShell i Azure Cloud Shell.
Note
Kör exemplen i samma PowerShell-session med din avsedda prenumeration vald.
# Set variables
$resourceGroupName = "<ResourceGroupName>"
$vmssName = "<VirtualMachineScaleSetName>"
$autoscaleName = "<AutoscaleSettingName>"
$azureRegion = "<AzureRegion>"
$virtualNetworkName = "<VirtualNetworkName>"
$subnetName = "<SubnetName>"
$publicIpAddressName = "<PublicIpAddressName>"
$loadBalancerName = "<LoadBalancerName>"
# Get the subscription ID from the current Azure PowerShell context
$subscriptionId = (Get-AzContext).Subscription.Id
# Build virtual machine scale set resource ID
$vmssPath = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName"
$vmssProvider = "Microsoft.Compute/virtualMachineScaleSets/$vmssName"
$vmssResourceId = "$vmssPath/providers/$vmssProvider"
Skapa en VM-skalningsuppsättning
I följande Azure PowerShell exempel används New-AzResourceGroup cmdletarna och New-AzVmss cmdletarna.
Note
Använd en dedikerad resursgrupp för det här exemplet så att du kan ta bort dess resurser när du är klar.
Exemplet skapar en offentlig IP-adress. För hanteringsåtkomst använder du Azure Bastion i stället för att exponera RDP- eller SSH-portar på Internet.
# Create the resource group
New-AzResourceGroup -ResourceGroupName $resourceGroupName -Location $azureRegion
# Get credentials for the virtual machine scale set
$vmCredential = Get-Credential
# Define parameters for New-AzVmss
$newAzVmssParams = @{
ResourceGroupName = $resourceGroupName
Location = $azureRegion
VMScaleSetName = $vmssName
Credential = $vmCredential
VirtualNetworkName = $virtualNetworkName
SubnetName = $subnetName
PublicIpAddressName = $publicIpAddressName
LoadBalancerName = $loadBalancerName
OrchestrationMode = "Flexible"
}
# Create the virtual machine scale set
New-AzVmss @newAzVmssParams
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 inskalning och utskalning och associera dem sedan med en profil.
Följande Azure PowerShell exempel använder cmdletenNew-AzAutoscaleScaleRuleObject.
Note
Det skapar två regler:
- Skala ut när CPU i procent överskrider 70 %.
- Skala ned när procentandelen CPU är mindre än 30 %.
# Define parameters for New-AzAutoscaleScaleRuleObject
$newAzAutoscaleScaleRuleObjectParams = @{
MetricTriggerMetricName = "Percentage CPU"
MetricTriggerMetricResourceUri = $vmssResourceId
MetricTriggerTimeGrain = New-TimeSpan -Minutes 1
MetricTriggerStatistic = "Average"
MetricTriggerTimeWindow = New-TimeSpan -Minutes 5
MetricTriggerTimeAggregation = "Average"
MetricTriggerOperator = "GreaterThan"
MetricTriggerThreshold = 70
MetricTriggerDividePerInstance = $false
ScaleActionDirection = "Increase"
ScaleActionType = "ChangeCount"
ScaleActionValue = "1"
ScaleActionCooldown = New-TimeSpan -Minutes 5
}
$scaleOutRule = New-AzAutoscaleScaleRuleObject @newAzAutoscaleScaleRuleObjectParams
# Define parameters for New-AzAutoscaleScaleRuleObject
$newAzAutoscaleScaleRuleObjectParams = @{
MetricTriggerMetricName = "Percentage CPU"
MetricTriggerMetricResourceUri = $vmssResourceId
MetricTriggerTimeGrain = New-TimeSpan -Minutes 1
MetricTriggerStatistic = "Average"
MetricTriggerTimeWindow = New-TimeSpan -Minutes 5
MetricTriggerTimeAggregation = "Average"
MetricTriggerOperator = "LessThan"
MetricTriggerThreshold = 30
MetricTriggerDividePerInstance = $false
ScaleActionDirection = "Decrease"
ScaleActionType = "ChangeCount"
ScaleActionValue = "1"
ScaleActionCooldown = New-TimeSpan -Minutes 5
}
$scaleInRule = New-AzAutoscaleScaleRuleObject @newAzAutoscaleScaleRuleObjectParams
I tabellen nedan beskrivs de parametrar som används i cmdleten New-AzAutoscaleScaleRuleObject .
| Parameter | Beskrivning |
|---|---|
MetricTriggerMetricName |
Anger utlösarmätvärdet 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 behöver 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 = |
MetricTriggerTimeAggregation |
Aggregeringsmetoden inom timeGrain-perioden. 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 på för att sammanställa mätvärdet. 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 hämtar den mätvärden 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, ExactCountoch PercentChangeCount. |
ScaleActionCooldown |
Den minsta tidsperiod efter en skalningsåtgärd som måste förflyta innan den här regeln kan utlösa en annan skalningsåtgärd. Autoskalning kontrollerar varje regels nedkylning oberoende av varandra. Med nedkylningen kan måtten stabiliseras och undvika flaxning. |
Skapa en standardprofil för autoskalning och associera reglerna
När du har definierat skalreglerna skapar du en profil. Profilen anger standardantalet samt övre och lägre gränser för instanser, och de tidpunkter då de associerade reglerna kan tillämpas.
Följande Azure PowerShell exempel använder cmdletenNew-AzAutoscaleProfileObject.
Note
Eftersom den här profilen är en standardprofil har den inga schemaparametrar. Standardprofilen är aktiv när inga andra profiler är aktiva.
# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
Name = "default"
CapacityDefault = "1"
CapacityMaximum = "10"
CapacityMinimum = "1"
Rule = @($scaleOutRule, $scaleInRule)
}
$defaultProfile = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams
I tabellen nedan beskrivs de parametrar som används i cmdleten New-AzAutoscaleProfileObject .
| Parameter | Beskrivning |
|---|---|
CapacityDefault |
Antalet instanser 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 då 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 Återkommande profiler med Hjälp av PowerShell. |
ScheduleHour |
En samling timmar som profilen tar effekt under. 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 definierat regler och profil tillämpar du inställningarna för autoskalning. Om du vill uppdatera en befintlig autoskalningsinställning använder du Update-AzAutoscaleSetting.
Följande Azure PowerShell exempel använder cmdletenNew-AzAutoscaleSetting.
# Define parameters for New-AzAutoscaleSetting
$newAzAutoscaleSettingParams = @{
Name = $autoscaleName
ResourceGroupName = $resourceGroupName
Location = $azureRegion
Profile = @($defaultProfile)
Enabled = $true
PropertiesName = $autoscaleName
TargetResourceUri = $vmssResourceId
}
# Create the autoscale setting
New-AzAutoscaleSetting @newAzAutoscaleSettingParams
Lägga till meddelanden i inställningarna för autoskalning
Lägg till meddelanden i autoskalningsinställningen för att utlösa en webhook eller skicka e-postmeddelanden när en skalningshändelse inträffar.
Följande Azure PowerShell exempel använder cmdletenNew-AzAutoscaleWebhookNotificationObject.
# Set variables
$webhookUri = "<WebhookUri>"
# Create the webhook notification
$webhook = New-AzAutoscaleWebhookNotificationObject -Property @{} -ServiceUri $webhookUri
I följande Azure PowerShell exempel används cmdleten New-AzAutoscaleNotificationObject för att konfigurera webhook- och e-postaviseringar.
Note
Använd en HTTPS-slutpunkt för webhooken.
# Set variables
$notificationEmail = "<NotificationEmail>"
# Define parameters for New-AzAutoscaleNotificationObject
$newAzAutoscaleNotificationObjectParams = @{
EmailCustomEmail = @($notificationEmail)
EmailSendToSubscriptionAdministrator = $true
EmailSendToSubscriptionCoAdministrator = $true
Webhook = @($webhook)
}
$notification = New-AzAutoscaleNotificationObject @newAzAutoscaleNotificationObjectParams
Följande Azure PowerShell exempel använder cmdleten Update-AzAutoscaleSetting för att tillämpa aviseringen.
# Define parameters for Update-AzAutoscaleSetting
$updateAzAutoscaleSettingParams = @{
Name = $autoscaleName
ResourceGroupName = $resourceGroupName
Notification = @($notification)
}
# Update the autoscale notification
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams
Granska inställningarna för autoskalning
I följande Azure PowerShell exempel används cmdleten Get-AzAutoscaleSetting för att hämta autoskalningsinställningen.
# Define parameters for Get-AzAutoscaleSetting
$getAzAutoscaleSettingParams = @{
ResourceGroupName = $resourceGroupName
Name = $autoscaleName
}
$autoscaleSetting = Get-AzAutoscaleSetting @getAzAutoscaleSettingParams
$autoscaleSetting | Select-Object -Property *
Följande Azure PowerShell exempel använder cmdletenGet-AzAutoscaleHistory.
Note
Den frågar efter autoskalningsinställningens historik, inte scale setets resurs-ID.
# Build autoscale setting resource ID
$autoscalePath = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName"
$autoscaleProvider = "Microsoft.Insights/autoscaleSettings/$autoscaleName"
$autoscaleResourceId = "$autoscalePath/providers/$autoscaleProvider"
# Retrieve the autoscale history
Get-AzAutoscaleHistory -ResourceId $autoscaleResourceId
Schemalagda och återkommande profiler
Note
När du uppdaterar Profiletar du med varje profil som du vill behålla. I följande exempel läggs profiler till i inställningen som skapades tidigare i den här artikeln. Behåll andra profiler när du anpassar dem till en annan autoskalningsinställning.
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 Azure PowerShell-exempel används cmdletarna New-AzAutoscaleProfileObject och Update-AzAutoscaleSetting.
Note
I följande exempel används samma regler som standardprofilen som definierades tidigare, men nya instansgränser anges för ett visst datum. Du kan också konfigurera olika regler som ska användas med den nya profilen. Start- och slutvärdena använder ISO 8601-tidsstämplar i UTC.
# Set variables
$startTime = "<StartTime>"
$endTime = "<EndTime>"
# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
Name = "High-demand-day"
CapacityDefault = "7"
CapacityMaximum = "30"
CapacityMinimum = "5"
FixedDateEnd = [datetime]::Parse($endTime)
FixedDateStart = [datetime]::Parse($startTime)
FixedDateTimeZone = "UTC"
Rule = @($scaleOutRule, $scaleInRule)
}
$highDemandDay = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams
# Define parameters for Update-AzAutoscaleSetting
$updateAzAutoscaleSettingParams = @{
Name = $autoscaleName
ResourceGroupName = $resourceGroupName
Profile = @($defaultProfile, $highDemandDay)
}
# Update the autoscale profiles
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams
Lägga till en återkommande schemalagd profil
Med återkommande profiler kan du schemalägga en skalningsprofil som upprepas varje vecka.
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.
I följande Azure PowerShell exempel används New-AzAutoscaleProfileObject och Update-AzAutoscaleSetting cmdletarna.
Note
Skala till exempel till en enda instans på helgen från fredag kväll till måndag morgon. Om du 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.
Den skapar en helgprofil och en återkommande standardprofil för att avsluta helgprofilen, samtidigt som standardprofilen och profiler med fasta datum bevaras från de tidigare stegen.
# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
Name = "Weekend"
CapacityDefault = "1"
CapacityMaximum = "1"
CapacityMinimum = "1"
RecurrenceFrequency = "Week"
ScheduleDay = @("Friday")
ScheduleHour = @(22)
ScheduleMinute = @(0)
ScheduleTimeZone = "Pacific Standard Time"
Rule = @($scaleOutRule, $scaleInRule)
}
$fridayProfile = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams
# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
Name = "default recurring profile"
CapacityDefault = "2"
CapacityMaximum = "10"
CapacityMinimum = "2"
RecurrenceFrequency = "Week"
ScheduleDay = @("Monday")
ScheduleHour = @(0)
ScheduleMinute = @(0)
ScheduleTimeZone = "Pacific Standard Time"
Rule = @($scaleOutRule, $scaleInRule)
}
$defaultRecurringProfile = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams
# Define parameters for Update-AzAutoscaleSetting
$updateAzAutoscaleSettingParams = @{
Name = $autoscaleName
ResourceGroupName = $resourceGroupName
Profile = @(
$defaultProfile
$highDemandDay
$defaultRecurringProfile
$fridayProfile
)
}
# Update the autoscale profiles
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams
Mer information om schemalagda profiler finns i Autoskalning med flera profiler.
Andra autoskalakommandon
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 dedikerade resursgrupp som du skapade. Följande cmdlet tar bort resursgruppen och alla dess resurser.
Följande Azure PowerShell exempel använder cmdletenRemove-AzResourceGroup.
# Delete the example resource group
Remove-AzResourceGroup -Name $resourceGroupName