Konfigurace automatického škálování pomocí Azure PowerShell

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í

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:

  1. Vytvořit pravidla pomocí New-AzAutoscaleScaleRuleObject.
  2. Vytvořit profil pomocí New-AzAutoscaleProfileObject.
  3. Vytvořte nastavení automatického škálování pomocí příkazu New-AzAutoscaleSetting.
  4. 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