Automatische schaalaanpassing configureren met PowerShell

Instellingen voor automatische schaalaanpassing zorgen ervoor dat de juiste hoeveelheid resources wordt uitgevoerd om de fluctuerende belasting van uw toepassing te verwerken. U kunt automatische schaalaanpassing configureren met behulp van de Azure Portal-, Azure CLI-, PowerShell- of ARM- of Bicep-sjablonen.

In dit artikel wordt beschreven hoe u automatische schaalaanpassing configureert voor een virtuele-machineschaalset met PowerShell, met behulp van de volgende stappen:

  • Een schaalset maken die u automatisch kunt schalen
  • Regels maken om in- en uit te schalen
  • Een profiel maken dat gebruikmaakt van uw regels
  • De instellingen voor automatische schaalaanpassing toepassen
  • Uw instellingen voor automatische schaalaanpassing 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 variabelen en $vmssName 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 automatische schaalaanpassing maken

Als u een instelling voor automatische schaalaanpassing wilt maken met behulp van PowerShell, volgt u de onderstaande volgorde:

  1. Regels maken met behulp van New-AzAutoscaleScaleRuleObject
  2. Een profiel maken met behulp van New-AzAutoscaleProfileObject
  3. De instellingen voor automatische schaalaanpassing maken met behulp van New-AzAutoscaleSetting
  4. De instellingen bijwerken met behulp van Update-AzAutoscaleSetting

Regels maken

Regels voor inschalen en uitschalen maken en deze vervolgens koppelen 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 het CPU-percentage lager 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 Beschrijving
MetricTriggerMetricName Hiermee stelt u de metrische waarde voor de trigger voor automatisch schalen in
MetricTriggerMetricResourceUri Hiermee geeft u de resource waartoe het MetricTriggerMetricName metrische gegeven behoort. MetricTriggerMetricResourceUri kan elke resource zijn en niet alleen de resource die wordt geschaald. U kunt bijvoorbeeld uw Virtual Machine Scale Sets 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 bemonsterd en worden geaggregeerd met behulp van de aggregatiemethode die is opgegeven in MetricTriggerStatistic.
MetricTriggerTimeAggregation De aggregatiemethode binnen de timeGrain-periode. Statistiek = 'Average' en timeGrain = 'PT1M' betekent bijvoorbeeld dat de metrische gegevens elke 1 minuut worden geaggregeerd door het gemiddelde te nemen.
MetricTriggerStatistic De aggregatiemethode die wordt gebruikt voor het aggregeren van de metrische steekproefgegevens. TimeAggregation = 'Gemiddelde' voegt bijvoorbeeld de metrische steekproefgegevens samen door het gemiddelde te nemen.
MetricTriggerTimeWindow De hoeveelheid tijd die de engine voor automatisch schalen terugklikken om de metrische gegevens te aggregeren. Deze waarde moet groter zijn dan de vertraging in het verzamelen van metrische gegevens, die per resource verschilt. Dit moet tussen 5 minuten en 12 uur zijn. 10 minuten betekent bijvoorbeeld dat telkens wanneer automatische schaalaanpassing wordt uitgevoerd, er een query wordt uitgevoerd op metrische gegevens voor de afgelopen 10 minuten. Met deze functie kunnen uw metrische gegevens worden gestabiliseerd en wordt voorkomen dat u reageert op tijdelijke pieken.
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 op true , wordt de metrische trigger gedeeld door het totale aantal exemplaren. Als het aantal berichten bijvoorbeeld 300 is en er 5 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 met een specifiek aantal exemplaren, schaal naar een specifiek aantal exemplaren of schaal op percentage van het huidige aantal exemplaren. Geldige waarden zijn , ChangeCountExactCounten PercentChangeCount.
ScaleActionCooldown De minimale tijd die moet worden gewacht tussen schaalbewerkingen. Dit is om de metrische gegevens te stabiliseren en fladderen te voorkomen. Als ScaleActionCooldown bijvoorbeeld 10 minuten is en er zojuist een schaalbewerking is opgetreden, probeert Automatisch schalen gedurende tien minuten niet opnieuw te schalen.

Een standaardprofiel voor automatisch schalen maken en de regels koppelen

Nadat u de schaalregels hebt gedefinieerd, maakt u een profiel. Het profiel geeft de standaard-, bovenste en lagere limieten voor het aantal exemplaren op 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 Beschrijving
CapacityDefault Het aantal exemplaren dat wel het geval is als metrische gegevens niet beschikbaar zijn voor evaluatie. De standaardwaarde wordt alleen gebruikt als het huidige aantal exemplaren lager is dan het standaardaantal.
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 voor.
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 en met 23.
ScheduleMinute Een verzameling minuten waarop het profiel van kracht wordt.
ScheduleTimeZone De tijdzone voor de uren van het profiel.

De instellingen voor automatische schaalaanpassing toepassen

Nadat u de regels en het profiel hebt bijgewerkt, past u 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 automatische schaalaanpassing

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

De instellingen voor automatische schaalaanpassing 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"  

De instellingen voor automatisch schalen controleren

Als u de instellingen voor automatische schaalaanpassing wilt controleren, laadt u de instellingen in een variabele met behulp van Get-AzAutoscaleSetting en voert u de variabele als volgt uit:

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

Uw geschiedenis voor automatisch schalen ophalen met behulp van AzAutoscaleHistory

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

Geplande en terugkerende profielen

Een gepland profiel toevoegen voor een speciale gebeurtenis

Stel profielen voor automatisch schalen in om anders te schalen voor specifieke gebeurtenissen. Voor een dag waarop de vraag hoger is dan normaal, maakt u bijvoorbeeld een profiel met verhoogde maximale en minimale exemplaarlimieten.

In het volgende voorbeeld worden dezelfde regels gebruikt als het standaardprofiel dat hierboven is gedefinieerd, maar worden nieuwe exemplaarlimieten voor een specifieke datum ingesteld. 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.

Geplande profielen hebben een begin- en einddatum, maar terugkerende profielen hebben 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 wordt gestart wanneer u het vorige terugkerende profiel wilt voltooien.

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 wordt een weekendprofiel en een standaardprofiel toegevoegd 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 PowerShell Module Browser voor een volledige lijst met PowerShell-cmdlets voor automatische schaalaanpassing

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 verwijdert u de resourcegroep en alle bijbehorende resources.


Remove-AzResourceGroup -Name $resourceGroupName