Delen via


Automatische schaalaanpassing configureren met PowerShell

Automatische schaalaanpassing zorgt ervoor dat u de juiste hoeveelheid resources hebt die worden uitgevoerd om de fluctuerende belasting van uw toepassing af te handelen. U kunt automatische schaalaanpassing configureren met behulp van Azure Portal, Azure CLI, PowerShell of ARM- of Bicep-sjablonen.

In dit artikel leest u hoe u automatische schaalaanpassing configureert voor een virtuele-machineschaalset met PowerShell. De configuraties gebruiken de volgende stappen:

  • Een schaalset maken die u automatisch kunt schalen
  • Regels maken om in te schalen en uit te schalen
  • Een profiel maken dat gebruikmaakt van uw regels
  • De instellingen voor automatisch schalen toepassen
  • Uw instellingen voor automatisch schalen bijwerken met meldingen

Vereisten

Als u automatische schaalaanpassing wilt configureren met behulp van PowerShell, hebt u een Azure-account met een actief abonnement nodig. U kunt gratis een account maken.

Uw omgeving instellen

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

Een virtuele-machineschaalset maken

Maak een schaalset met behulp van de volgende cmdlets. Stel de $resourceGroupName en $vmssName variabelen in op uw omgeving.

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

Instellingen voor automatisch schalen maken

Volg de onderstaande volgorde om de instelling voor automatisch schalen te maken met Behulp van PowerShell:

  1. Regels maken met New-AzAutoscaleScaleRuleObject
  2. Een profiel maken met New-AzAutoscaleProfileObject
  3. De instellingen voor automatisch schalen maken met New-AzAutoscaleSetting
  4. De instellingen bijwerken met Update-AzAutoscaleSetting

Regels maken

Maak regels voor in- en uitschalen en vervolgens gekoppeld aan een profiel. Regels worden gemaakt met behulp van de New-AzAutoscaleScaleRuleObject.

Met het volgende PowerShell-script worden twee regels gemaakt.

  • Uitschalen wanneer het cpu-percentage hoger is dan 70%
  • Inschalen wanneer percentage CPU kleiner is dan 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))

In de onderstaande tabel worden de parameters beschreven die in de New-AzAutoscaleScaleRuleObject cmdlet worden gebruikt.

Parameter Description
MetricTriggerMetricName Hiermee stelt u de metrische waarde voor de trigger voor automatische schaalaanpassing in
MetricTriggerMetricResourceUri Hiermee geeft u de resource waartoe de MetricTriggerMetricName metrische waarde behoort. MetricTriggerMetricResourceUri kan elke resource zijn en niet alleen de resource die wordt geschaald. U kunt bijvoorbeeld uw virtuele-machineschaalsets schalen op basis van metrische gegevens die zijn gemaakt door een load balancer, database of de schaalset zelf. De MetricTriggerMetricName moet bestaan voor de opgegeven MetricTriggerMetricResourceUri.
MetricTriggerTimeGrain De steekproeffrequentie van de metrische gegevens die door de regel worden bewaakt. MetricTriggerTimeGrain moet een van de vooraf gedefinieerde waarden voor de opgegeven metrische waarde zijn en moet tussen 12 uur en 1 minuut zijn. PT1M betekent bijvoorbeeld MetricTriggerTimeGrain = dat de metrische gegevens elke 1 minuut worden gesampleed en samengevoegd met behulp van de aggregatiemethode die is opgegeven in MetricTriggerStatistic.
MetricTriggerTimeAggregation De aggregatiemethode binnen de periode timeGrain. Statistiek = "Average" en timeGrain = "PT1M" betekent bijvoorbeeld dat de metrische gegevens om de 1 minuut worden geaggregeerd door het gemiddelde te nemen.
MetricTriggerStatistic De aggregatiemethode die wordt gebruikt voor het aggregeren van de metrische steekproefgegevens. TimeAggregation = 'Average' aggregert bijvoorbeeld de metrische steekproefgegevens door het gemiddelde te nemen.
MetricTriggerTimeWindow De hoeveelheid tijd die de engine voor automatisch schalen terugkijkt om de metrische waarde samen te voegen. Deze waarde moet groter zijn dan de vertraging in het verzamelen van metrische gegevens, die per resource varieert. Het moet tussen 5 minuten en 12 uur zijn. 10 minuten betekent bijvoorbeeld dat elke keer dat automatische schaalaanpassing wordt uitgevoerd, metrische gegevens worden opgevraagd voor de afgelopen 10 minuten. Met deze functie kunnen uw metrische gegevens stabiliseren en voorkomen dat er op tijdelijke pieken wordt gereageerd.
MetricTriggerThreshold Definieert de waarde van de metrische waarde die een schaal gebeurtenis activeert.
MetricTriggerOperator Hiermee geeft u de logische vergelijkende werking die moet worden gebruikt bij het evalueren van de metrische waarde.
MetricTriggerDividePerInstance Wanneer deze optie is ingesteld om de metrische trigger te true delen door het totale aantal exemplaren. Als het aantal berichten bijvoorbeeld 300 is en er vijf exemplaren worden uitgevoerd, is de berekende metrische waarde 60 berichten per exemplaar. Deze eigenschap is niet van toepassing op alle metrische gegevens.
ScaleActionDirection Geef in- of uitschalen op. Geldige waarden zijn Increase en Decrease.
ScaleActionType Schaal op een bepaald aantal exemplaren, schaal naar een specifiek aantal exemplaren of schaal op percentage van het huidige aantal exemplaren. Geldige waarden zijn onder andere ChangeCount, ExactCounten PercentChangeCount.
ScaleActionCooldown De minimale hoeveelheid tijd die moet worden gewacht tussen schaalbewerkingen. Dit is om de metrische gegevens te laten stabiliseren en te voorkomen dat er flappingen worden opgeslagen. Als dit bijvoorbeeld ScaleActionCooldown 10 minuten is en er zojuist een schaalbewerking is opgetreden, probeert automatisch schalen niet opnieuw te schalen gedurende 10 minuten.

Een standaardprofiel voor automatisch schalen maken en de regels koppelen

Nadat u de schaalregels hebt gedefinieerd, maakt u een profiel. In het profiel worden de standaardlimieten, boven- en lagere exemplaren opgegeven en de tijden waarop de bijbehorende regels kunnen worden toegepast. Gebruik de New-AzAutoscaleProfileObject cmdlet om een nieuw profiel voor automatisch schalen te maken. Omdat dit een standaardprofiel is, heeft het geen planningsparameters. Het standaardprofiel is actief op momenten dat er geen andere profielen actief zijn

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

In de onderstaande tabel worden de parameters beschreven die in de New-AzAutoscaleProfileObject cmdlet worden gebruikt.

Parameter Description
CapacityDefault Het aantal exemplaren dat is als er geen metrische gegevens beschikbaar zijn voor evaluatie. De standaardwaarde wordt alleen gebruikt als het huidige aantal exemplaren lager is dan de standaardwaarde.
CapacityMaximum Het maximum aantal exemplaren voor de resource. Het maximum aantal exemplaren wordt verder beperkt door het aantal kernen dat beschikbaar is in het abonnement.
CapacityMinimum Het minimale aantal exemplaren voor de resource.
FixedDateEnd De eindtijd voor het profiel in ISO 8601-indeling.
FixedDateStart De begintijd voor het profiel in ISO 8601-indeling.
Rule Een verzameling regels die de triggers en parameters voor de schaalactie bieden wanneer dit profiel actief is. Er kunnen maximaal 10 door komma's gescheiden regels worden opgegeven.
RecurrenceFrequency Hoe vaak het geplande profiel van kracht wordt. Deze waarde moet zijn week.
ScheduleDay Een verzameling dagen waarop het profiel van kracht wordt bij het opgeven van een terugkerend schema. Mogelijke waarden zijn zondag tot en met zaterdag. Zie Een terugkerend profiel toevoegen met behulp van CLI voor meer informatie over terugkerende planningen
ScheduleHour Een verzameling uren waarop het profiel van kracht wordt. Ondersteunde waarden zijn 0 tot 23.
ScheduleMinute Een verzameling minuten waarop het profiel van kracht wordt.
ScheduleTimeZone De tijdzone voor de uren van het profiel.

De instellingen voor automatisch schalen toepassen

Pas na het voltooien van de regels en het profiel de instellingen voor automatische schaalaanpassing toe met behulp van New-AzAutoscaleSetting. Als u de bestaande instelling voor automatische schaalaanpassing wilt bijwerken, gebruikt u 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"

Meldingen toevoegen aan uw instellingen voor automatisch schalen

Voeg meldingen toe aan uw verkoopinstelling om een webhook te activeren of e-mailmeldingen te verzenden wanneer er een schaalevenement plaatsvindt. Zie voor meer informatie over webhookmeldingen New-AzAutoscaleWebhookNotificationObject

Stel een webhook in met behulp van de volgende cmdlet;


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

Configureer de melding met behulp van de webhook en stel e-mailmeldingen in met behulp van de New-AzAutoscaleNotificationObject cmdlet:


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

Uw instellingen voor automatisch schalen bijwerken om de melding toe te passen


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

Uw instellingen voor automatische schaalaanpassing controleren

Als u de instellingen voor automatische schaalaanpassing wilt controleren, laadt u de instellingen in een variabele met behulp van Get-AzAutoscaleSetting de volgende uitvoer van de variabele:

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

Uw geschiedenis van automatische schaalaanpassing ophalen met AzAutoscaleHistory

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

Geplande en terugkerende profielen

Een gepland profiel voor een speciale gebeurtenis toevoegen

Stel profielen voor automatische schaalaanpassing in om anders te schalen voor specifieke gebeurtenissen. Maak bijvoorbeeld voor een dag waarop de vraag hoger is dan normaal, een profiel met verhoogde maximum- en minimale exemplaarlimieten.

In het volgende voorbeeld worden dezelfde regels gebruikt als het hierboven gedefinieerde standaardprofiel, maar worden nieuwe exemplaarlimieten ingesteld voor een specifieke datum. U kunt ook verschillende regels configureren voor gebruik met het nieuwe profiel.

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

Een terugkerend gepland profiel toevoegen

Met terugkerende profielen kunt u een schaalprofiel plannen dat elke week wordt herhaald. Schaal bijvoorbeeld naar één exemplaar in het weekend van vrijdagavond tot maandagochtend.

Hoewel geplande profielen een begin- en einddatum hebben, hebben terugkerende profielen geen eindtijd. Een profiel blijft actief tot de begintijd van het volgende profiel. Wanneer u een terugkerend profiel maakt, moet u daarom een terugkerend standaardprofiel maken dat begint wanneer u wilt dat het vorige terugkerende profiel wordt voltooid.

Als u bijvoorbeeld een weekendprofiel wilt configureren dat begint op vrijdagavond en eindigt op maandagochtend, maakt u een profiel dat op vrijdagavond begint en maakt u vervolgens een terugkerend profiel met uw standaardinstellingen die op maandagochtend beginnen.

Met het volgende script maakt u een weekendprofiel en een standaardprofiel voor het toevoegen van een standaardprofiel om het weekendprofiel te beëindigen.

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

Zie Automatisch schalen met meerdere profielen voor meer informatie over geplande profielen

Andere opdrachten voor automatisch schalen

Zie de Browser van de PowerShell-module voor een volledige lijst met PowerShell-cmdlets voor automatisch schalen

Resources opschonen

Als u de resources die u in deze zelfstudie hebt gemaakt, wilt opschonen, verwijdert u de resourcegroep die u hebt gemaakt. Met de volgende cmdlet worden de resourcegroep en alle bijbehorende resources verwijderd.


Remove-AzResourceGroup -Name $resourceGroupName