Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Automatische schaalaanpassing zorgt ervoor dat u de juiste hoeveelheid middelen hebt die draaien om de fluctuerende belasting van uw toepassing af te handelen. U kunt automatische schaalaanpassing configureren met behulp van Azure Portal, Azure CLI, Azure 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:
- Maak een schaalset die u automatisch kunt laten schalen.
- Regels maken om in te schalen en uit te schalen.
- Maak een profiel dat gebruikmaakt van uw regels.
- Pas de instellingen voor automatische schaalaanpassing toe.
- Werk de instellingen voor automatische schaalaanpassing bij om meldingen in te stellen.
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
Gebruik PowerShell in Azure Cloud Shell.
Note
Voer de voorbeelden uit in dezelfde PowerShell-sessie met uw beoogde abonnement geselecteerd.
# 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"
Een virtuele-machineschaalset maken
In het volgende Azure PowerShell voorbeeld worden de New-AzResourceGroup en New-AzVmss cmdlets gebruikt.
Note
Gebruik een toegewezen resourcegroep voor dit voorbeeld, zodat u de bijbehorende resources kunt verwijderen wanneer u klaar bent.
In het voorbeeld wordt een openbaar IP-adres gemaakt. Gebruik voor beheertoegang Azure Bastion in plaats van RDP- of SSH-poorten open te stellen voor het 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
Instellingen voor automatisch schalen maken
Volg de onderstaande volgorde om de instelling voor automatisch schalen te maken met Behulp van PowerShell:
- Regels maken met behulp van
New-AzAutoscaleScaleRuleObject. - Maak een profiel met behulp van
New-AzAutoscaleProfileObject. - Maak de instellingen voor automatisch schalen met behulp van
New-AzAutoscaleSetting. - Werk de instellingen bij met behulp van
Update-AzAutoscaleSetting.
Regels maken
Maak in- en uitschaalregels en koppel deze vervolgens aan een profiel.
In het volgende Azure PowerShell voorbeeld wordt de New-AzAutoscaleScaleRuleObject cmdlet gebruikt.
Note
Er worden twee regels gemaakt:
- Uitschalen wanneer het cpu-percentage hoger is dan 70%.
- Verkleinen wanneer het CPU-percentage kleiner is dan 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
In de onderstaande tabel worden de parameters beschreven die in de New-AzAutoscaleScaleRuleObject cmdlet worden gebruikt.
| Kenmerk | Beschrijving |
|---|---|
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 = |
MetricTriggerTimeAggregation |
De aggregatiemethode binnen de timeGrain-periode. 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 tijdsperiode waarop de autoscale-engine terugkijkt om de metriek te aggregeren. 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, wordt de triggermetriek gedeeld 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 tijd na een schaalbewerking die moet worden doorgegeven voordat deze regel in aanmerking komt voor het initiëren van een andere schaalactie. Autoscale controleert de afkoelperiode van elke regel afzonderlijk. De cooldown zorgt ervoor dat de metingen stabiliseren en voorkomt flapping. |
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 standaard-, boven- en onderaantalslimieten opgegeven, evenals de tijden waarop de bijbehorende regels kunnen worden toegepast.
In het volgende Azure PowerShell voorbeeld wordt de New-AzAutoscaleProfileObject cmdlet gebruikt.
Note
Omdat dit profiel een standaardprofiel is, heeft het geen planningsparameters. Het standaardprofiel is actief op momenten dat er geen andere profielen actief zijn.
# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
Name = "default"
CapacityDefault = "1"
CapacityMaximum = "10"
CapacityMinimum = "1"
Rule = @($scaleOutRule, $scaleInRule)
}
$defaultProfile = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams
In de onderstaande tabel worden de parameters beschreven die in de New-AzAutoscaleProfileObject cmdlet worden gebruikt.
| Kenmerk | Beschrijving |
|---|---|
CapacityDefault |
Het aantal exemplaren dat beschikbaar is als er geen metrieke 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 Terugkerende profielen met Behulp van PowerShell 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
Nadat u de regels en het profiel hebt gedefinieerd, past u de instellingen voor automatisch schalen toe. Als u een bestaande instelling voor automatische schaalaanpassing wilt bijwerken, gebruikt u Update-AzAutoscaleSetting.
In het volgende Azure PowerShell voorbeeld wordt de New-AzAutoscaleSetting cmdlet gebruikt.
# 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
Meldingen toevoegen aan uw instellingen voor automatisch schalen
Voeg meldingen toe aan uw instelling voor automatisch schalen om een webhook te activeren of e-mailmeldingen te verzenden wanneer er een schaalgebeurtenis plaatsvindt.
In het volgende Azure PowerShell voorbeeld wordt de New-AzAutoscaleWebhookNotificationObject cmdlet gebruikt.
# Set variables
$webhookUri = "<WebhookUri>"
# Create the webhook notification
$webhook = New-AzAutoscaleWebhookNotificationObject -Property @{} -ServiceUri $webhookUri
In het volgende Azure PowerShell voorbeeld wordt de New-AzAutoscaleNotificationObject cmdlet gebruikt om webhook- en e-mailmeldingen te configureren.
Note
Gebruik een HTTPS-eindpunt voor de webhook.
# Set variables
$notificationEmail = "<NotificationEmail>"
# Define parameters for New-AzAutoscaleNotificationObject
$newAzAutoscaleNotificationObjectParams = @{
EmailCustomEmail = @($notificationEmail)
EmailSendToSubscriptionAdministrator = $true
EmailSendToSubscriptionCoAdministrator = $true
Webhook = @($webhook)
}
$notification = New-AzAutoscaleNotificationObject @newAzAutoscaleNotificationObjectParams
In het volgende Azure PowerShell voorbeeld wordt de Update-AzAutoscaleSetting cmdlet gebruikt om de kennisgeving toe te passen.
# Define parameters for Update-AzAutoscaleSetting
$updateAzAutoscaleSettingParams = @{
Name = $autoscaleName
ResourceGroupName = $resourceGroupName
Notification = @($notification)
}
# Update the autoscale notification
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams
Uw instellingen voor automatische schaalaanpassing controleren
In het volgende Azure PowerShell voorbeeld wordt de Get-AzAutoscaleSetting cmdlet gebruikt om de instelling voor automatische schaalaanpassing op te halen.
# Define parameters for Get-AzAutoscaleSetting
$getAzAutoscaleSettingParams = @{
ResourceGroupName = $resourceGroupName
Name = $autoscaleName
}
$autoscaleSetting = Get-AzAutoscaleSetting @getAzAutoscaleSettingParams
$autoscaleSetting | Select-Object -Property *
In het volgende Azure PowerShell voorbeeld wordt de Get-AzAutoscaleHistory cmdlet gebruikt.
Note
Er wordt een query uitgevoerd op de geschiedenis van de instelling voor automatische schaalaanpassing, niet op de resource-id van de schaalset.
# 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
Geplande en terugkerende profielen
Note
Wanneer u Profile bijwerkt, neemt u elk profiel op dat u wilt behouden. In de volgende voorbeelden worden profielen toegevoegd aan de instelling die eerder in dit artikel is gemaakt. Houd eventuele andere profielen bij het aanpassen aan een andere instelling voor automatisch schalen.
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 Azure PowerShell voorbeeld worden de New-AzAutoscaleProfileObject en Update-AzAutoscaleSetting cmdlets gebruikt.
Note
In het volgende voorbeeld worden dezelfde regels gebruikt als het standaardprofiel dat eerder is gedefinieerd, maar worden nieuwe instantielimieten ingesteld voor een specifieke datum. U kunt ook verschillende regels configureren voor gebruik met het nieuwe profiel. De begin- en eindwaarden gebruiken ISO 8601-tijdstempels in 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
Een terugkerend gepland profiel toevoegen
Met terugkerende profielen kunt u een schaalprofiel plannen dat elke week wordt herhaald.
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.
In het volgende Azure PowerShell voorbeeld worden de New-AzAutoscaleProfileObject en Update-AzAutoscaleSetting cmdlets gebruikt.
Note
Bijvoorbeeld, schakel over naar een enkele instance in het weekend van vrijdagavond tot maandagochtend. Als u 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 dat op maandagochtend begint.
Er wordt een weekendprofiel en een terugkerend standaardprofiel gemaakt om het weekendprofiel te beëindigen, terwijl de standaard- en vaste-datumprofielen uit de eerdere stappen behouden blijven.
# 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
Zie Automatisch schalen met meerdere profielen voor meer informatie over geplande profielen.
Andere opdrachten voor automatisch schalen
Zie de PowerShell-modulebrowser 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 toegewezen resourcegroep die u hebt gemaakt. Met de volgende cmdlet worden de resourcegroep en alle bijbehorende resources verwijderd.
In het volgende Azure PowerShell voorbeeld wordt de Remove-AzResourceGroup cmdlet gebruikt.
# Delete the example resource group
Remove-AzResourceGroup -Name $resourceGroupName