Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Automatické škálování zajišťuje, že máte spuštěno správné množství prostředků pro zpracování proměnlivého zatížení vaší aplikace. Automatické škálování můžete nakonfigurovat pomocí Azure portálu, Azure CLI, Azure PowerShell nebo šablon ARM nebo Bicep.
V tomto článku se dozvíte, jak nakonfigurovat automatické škálování pro škálovací sadu virtuálních počítačů pomocí PowerShellu. Konfigurace používají následující kroky:
- Vytvořte sadu škálování, kterou můžete automaticky škálovat.
- Vytvořte pravidla pro horizontální snížení kapacity a horizontální navýšení kapacity.
- Vytvořte profil podle vašich pravidel.
- Použijte nastavení automatického škálování.
- Aktualizujte nastavení automatického škálování včetně oznámení.
Požadavky
Pokud chcete nakonfigurovat automatické škálování pomocí PowerShellu, potřebujete účet Azure s aktivním předplatným. Účet si můžete vytvořit zdarma.
Nastavení prostředí
V Azure Cloud Shell použijte PowerShell.
Note
Spusťte příklady ve stejné relaci PowerShellu s vybraným cílovým předplatným.
# 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"
Vytvoření škálovací sady virtuálních počítačů
Následující příklad Azure PowerShellu používá rutiny příkazů New-AzResourceGroup a New-AzVmss.
Note
V tomto příkladu použijte vyhrazenou skupinu prostředků, abyste mohli po dokončení odstranit její prostředky.
Příklad vytvoří veřejnou IP adresu. Pro přístup ke správě použijte Azure Bastion místo vystavení portů RDP nebo SSH na 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
Vytvoření nastavení automatického škálování
Pokud chcete vytvořit nastavení automatického škálování pomocí PowerShellu, postupujte podle následujícího postupu:
- Vytvořit pravidla pomocí
New-AzAutoscaleScaleRuleObject. - Vytvořit profil pomocí
New-AzAutoscaleProfileObject. - Vytvořte nastavení automatického škálování pomocí příkazu
New-AzAutoscaleSetting. - Aktualizujte nastavení pomocí
Update-AzAutoscaleSetting.
Vytvoření pravidel
Vytvořte pravidla horizontálního snížení kapacity a horizontálního navýšení kapacity a pak je přidružte k profilu.
Následující Azure PowerShell příklad používá rutinuNew-AzAutoscaleScaleRuleObject.
Note
Vytvoří dvě pravidla:
- Horizontálně navýšit kapacitu, pokud procento procesoru překračuje 70 %.
- Škálujte dolů, když je využití CPU menší než 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
Následující tabulka popisuje parametry použité v rutině New-AzAutoscaleScaleRuleObject .
| Parametr | Popis |
|---|---|
MetricTriggerMetricName |
Nastaví metriku spuštění automatického škálování. |
MetricTriggerMetricResourceUri |
Určuje prostředek, ke kterému MetricTriggerMetricName metrika patří.
MetricTriggerMetricResourceUri může být jakýkoli prostředek, a ne jenom prostředek, který se škáluje. Škálovací sady virtuálních počítačů můžete například škálovat na základě metrik vytvořených nástrojem pro vyrovnávání zatížení, databází nebo samotnou škálovací sadou. Musí MetricTriggerMetricName existovat pro zadané MetricTriggerMetricResourceUri. |
MetricTriggerTimeGrain |
Frekvence vzorkování metriky, kterou pravidlo monitoruje.
MetricTriggerTimeGrain musí být jednou z předdefinovaných hodnot pro zadanou metriku a musí být mezi 12 hodinami a 1 minutou. Například PT1M"* znamená, MetricTriggerTimeGrain = |
MetricTriggerTimeAggregation |
Metoda agregace v období timeGrain. Například statistika = "Průměr" a timeGrain = "PT1M" znamená, že metriky se agregují každých 1 minutu, a to tak, že vezme průměr. |
MetricTriggerStatistic |
Metoda agregace použitá k agregaci ukázkových metrik. Například TimeAggregation = "Průměr" agreguje vzorkované metriky tak, že vezme průměr. |
MetricTriggerTimeWindow |
Doba, po kterou modul automatického škálování hledá agregaci metriky. Tato hodnota musí být větší než zpoždění ve sběru metrik, které se liší podle zdroje. Musí to být 5 minut až 12 hodin. Například 10 minut znamená, že při každém spuštění automatického škálování se dotazuje na metriky za posledních 10 minut. Tato funkce umožňuje metrikám stabilizovat a vyhnout se reakcím na přechodné špičky. |
MetricTriggerThreshold |
Definuje hodnotu metriky, která aktivuje událost škálování. |
MetricTriggerOperator |
Určuje logickou srovnávací operaci, kterou se má použít při vyhodnocování hodnoty metriky. |
MetricTriggerDividePerInstance |
Když je nastaveno na true, metriku triggeru vydělí celkovým počtem instancí. Pokud je například počet zpráv 300 a je spuštěno 5 instancí, počítaná hodnota metriky je 60 zpráv na instanci. Tato vlastnost se nevztahuje na všechny metriky. |
ScaleActionDirection |
Zadejte škálování nahoru nebo dolů. Platné hodnoty jsou Increase a Decrease. |
ScaleActionType |
Škálování podle konkrétního počtu instancí, škálování na určitý počet instancí nebo škálování podle procenta aktuálního počtu instancí. Platné hodnoty zahrnují ChangeCount, ExactCounta PercentChangeCount. |
ScaleActionCooldown |
Minimální doba po operaci škálování, která musí proběhnout před tím, než má toto pravidlo nárok na zahájení další akce škálování. Automatické škálování kontroluje dobu prodlevy každého pravidla nezávisle. Doba ochlazení umožňuje stabilizaci metrik a zabraňuje kolísání. |
Vytvoření výchozího profilu automatického škálování a přidružení pravidel
Po definování pravidel stupnice vytvořte profil. Profil určuje výchozí, horní a nižší limity počtu instancí a časy, kdy je možné použít přidružená pravidla.
Následující Azure PowerShell příklad používá rutinuNew-AzAutoscaleProfileObject.
Note
Vzhledem k tomu, že tento profil je výchozím profilem, nemá žádné parametry harmonogramu. Výchozí profil je aktivní v době, kdy nejsou aktivní žádné jiné profily.
# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
Name = "default"
CapacityDefault = "1"
CapacityMaximum = "10"
CapacityMinimum = "1"
Rule = @($scaleOutRule, $scaleInRule)
}
$defaultProfile = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams
Následující tabulka popisuje parametry použité v rutině New-AzAutoscaleProfileObject .
| Parametr | Popis |
|---|---|
CapacityDefault |
Početinstancích Výchozí hodnota se používá pouze v případě, že je aktuální počet instancí nižší než výchozí. |
CapacityMaximum |
Maximální počet instancí prostředku. Maximální počet instancí je dále omezen počtem jader dostupných v předplatném. |
CapacityMinimum |
Minimální počet instancí prostředku. |
FixedDateEnd |
Koncový čas profilu ve formátu ISO 8601. |
FixedDateStart |
Počáteční čas profilu ve formátu ISO 8601. |
Rule |
Kolekce pravidel, která poskytují triggery a parametry akce škálování, když je tento profil aktivní. Je možné zadat maximálně 10 pravidel oddělených čárkami. |
RecurrenceFrequency |
Jak často plánovaný profil nabude účinku. Tato hodnota musí být week. |
ScheduleDay |
Kolekce dnů, kdy je profil aktivní při specifikaci opakujícího se plánu. Možné hodnoty jsou od neděle do soboty. Další informace o opakovaných plánech najdete v tématu Opakované profily pomocí prostředí PowerShell. |
ScheduleHour |
Kolekce hodin, během kterých je profil aktivní. Podporované hodnoty jsou 0 až 23. |
ScheduleMinute |
Soubor časových okamžiků, kdy profil začne platit. |
ScheduleTimeZone |
Časové pásmo pro hodiny profilu. |
Použití nastavení automatického škálování
Po definování pravidel a profilu použijte nastavení automatického škálování. Chcete-li aktualizovat existující nastavení automatického škálování, použijte Update-AzAutoscaleSetting.
Následující Azure PowerShell příklad používá rutinuNew-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
Přidání oznámení do nastavení automatického škálování
Přidejte do nastavení automatického škálování oznámení, která aktivují webhook nebo odesílají e-mailová oznámení, když dojde k události škálování.
Následující Azure PowerShell příklad používá rutinuNew-AzAutoscaleWebhookNotificationObject.
# Set variables
$webhookUri = "<WebhookUri>"
# Create the webhook notification
$webhook = New-AzAutoscaleWebhookNotificationObject -Property @{} -ServiceUri $webhookUri
Následující Azure PowerShell příklad používá rutinu New-AzAutoscaleNotificationObject ke konfiguraci webhooku a e-mailových oznámení.
Note
Použijte endpoint webhooku používající HTTPS.
# Set variables
$notificationEmail = "<NotificationEmail>"
# Define parameters for New-AzAutoscaleNotificationObject
$newAzAutoscaleNotificationObjectParams = @{
EmailCustomEmail = @($notificationEmail)
EmailSendToSubscriptionAdministrator = $true
EmailSendToSubscriptionCoAdministrator = $true
Webhook = @($webhook)
}
$notification = New-AzAutoscaleNotificationObject @newAzAutoscaleNotificationObjectParams
Následující příklad Azure PowerShell používá cmdlet Update-AzAutoscaleSetting k použití nastavení oznámení.
# Define parameters for Update-AzAutoscaleSetting
$updateAzAutoscaleSettingParams = @{
Name = $autoscaleName
ResourceGroupName = $resourceGroupName
Notification = @($notification)
}
# Update the autoscale notification
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams
Kontrola nastavení automatického škálování
Následující Azure PowerShell příklad používá rutinu Get-AzAutoscaleSetting k načtení nastavení automatického škálování.
# Define parameters for Get-AzAutoscaleSetting
$getAzAutoscaleSettingParams = @{
ResourceGroupName = $resourceGroupName
Name = $autoscaleName
}
$autoscaleSetting = Get-AzAutoscaleSetting @getAzAutoscaleSettingParams
$autoscaleSetting | Select-Object -Property *
Následující Azure PowerShell příklad používá rutinuGet-AzAutoscaleHistory.
Note
Dotazuje se na historii nastavení automatického škálování, nikoli ID prostředku škálovací sady.
# 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
Naplánované a opakované profily
Note
Při aktualizaci Profileuveďte každý profil, který chcete zachovat. Následující příklady přidávají profily k nastavení vytvořenému dříve v tomto článku. Když je přizpůsobíte jinému nastavení automatického škálování, zachovejte všechny ostatní profily.
Přidejte naplánovaný profil pro zvláštní událost
Nastavte profily automatického škálování tak, aby se konkrétní události škálovaly jinak. Například pro den, kdy bude poptávka vyšší než obvykle, vytvořte profil se zvýšenými maximálními a minimálními limity instancí.
Následující příklad Azure PowerShell používá rutiny New-AzAutoscaleProfileObject a Update-AzAutoscaleSetting.
Note
Následující příklad používá stejná pravidla jako výchozí profil definovaný dříve, ale nastaví limity nových instancí pro konkrétní datum. Můžete také nakonfigurovat různá pravidla pro použití s novým profilem. Počáteční a koncové hodnoty používají časové razítka ISO 8601 v 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
Přidání opakovaného naplánovaného profilu
Opakované profily umožňují naplánovat profil škálování, který se opakuje každý týden.
I když mají naplánované profily počáteční a koncové datum, opakované profily nemají koncový čas. Profil zůstane aktivní až do času spuštění dalšího profilu. Proto při vytváření opakovaného profilu musíte vytvořit opakovaný výchozí profil, který začíná, když chcete dokončit předchozí opakovaný profil.
Následující příklad Azure PowerShell používá rutiny New-AzAutoscaleProfileObject a Update-AzAutoscaleSetting.
Note
Například škálujte na jednu instanci o víkendu, od páteční noci do pondělního rána. Pokud chcete nakonfigurovat víkendový profil, který začíná v pátek a končí v pondělí ráno, vytvořte profil, který začíná v pátek v noci, a pak vytvořte opakovaný profil s výchozím nastavením, které začíná pondělí ráno.
Vytvoří víkendový profil a opakovaný výchozí profil pro ukončení víkendového profilu a zachová výchozí profil a profil s pevným datem z předchozích kroků.
# 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
Další informace o naplánovaných profilech najdete v tématu Automatické škálování s více profily.
Další příkazy automatického škálování
Úplný seznam cmdletů PowerShellu pro automatické škálování najdete v prohlížeči modulů PowerShellu.
Vyčištění prostředků
Pokud chcete vyčistit prostředky, které jste vytvořili v tomto kurzu, odstraňte vyhrazenou skupinu prostředků, kterou jste vytvořili. Následující cmdlet odstraní skupinu prostředků a všechny její prostředky.
Následující Azure PowerShell příklad používá rutinuRemove-AzResourceGroup.
# Delete the example resource group
Remove-AzResourceGroup -Name $resourceGroupName