Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Automatyczne skalowanie gwarantuje, że masz uruchomioną odpowiednią ilość zasobów do obsługi zmieniającego się obciążenia aplikacji. Skalowanie automatyczne można skonfigurować przy użyciu portalu Azure, Azure CLI, Azure PowerShell lub ARM lub szablonów Bicep.
W tym artykule pokazano, jak skonfigurować skalowanie automatyczne dla zestawu skalowania maszyn wirtualnych przy użyciu programu PowerShell. Konfiguracje umożliwiają wykonanie następujących kroków:
- Utwórz zestaw skalowania, który można skalować automatycznie.
- Tworzenie reguł skalowania w górę i skalowania w dół.
- Utwórz profil, który używa Twoich reguł.
- Zastosuj ustawienia skalowania automatycznego.
- Zaktualizuj ustawienia automatycznego skalowania z powiadomieniami.
Wymagania wstępne
Aby skonfigurować skalowanie automatyczne przy użyciu programu PowerShell, potrzebujesz konta platformy Azure z aktywną subskrypcją. Możesz bezpłatnie utworzyć konto.
Konfigurowanie środowiska
Użyj programu PowerShell w Azure Cloud Shell.
Note
Uruchom przykłady w tej samej sesji programu PowerShell z wybraną docelową subskrypcją.
# 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"
Tworzenie zestawu skalowania maszyn wirtualnych
W poniższym przykładzie Azure PowerShell użyto poleceń cmdlet New-AzResourceGroup i New-AzVmss.
Note
W tym przykładzie użyj dedykowanej grupy zasobów, aby można było usunąć jej zasoby po zakończeniu pracy.
W przykładzie zostanie utworzony publiczny adres IP. W przypadku dostępu do zarządzania użyj Azure Bastion zamiast wystawiać porty RDP lub SSH do Internetu.
# 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
Tworzenie ustawień autoskalowania
Aby utworzyć ustawienie autoskalowania przy użyciu programu PowerShell, wykonaj poniższą sekwencję:
- Utwórz reguły przy użyciu polecenia
New-AzAutoscaleScaleRuleObject. - Utwórz profil przy użyciu polecenia
New-AzAutoscaleProfileObject. - Utwórz ustawienia autoskalowania przy użyciu polecenia
New-AzAutoscaleSetting. - Zaktualizuj ustawienia przy użyciu polecenia
Update-AzAutoscaleSetting.
Tworzenie reguł
Utwórz reguły skalowania w głąb i skalowania wszerz, a następnie skojarz je z profilem.
Poniższy przykład Azure PowerShell używa polecenia cmdlet New-AzAutoscaleScaleRuleObject.
Note
Tworzy dwie reguły:
- Skaluj w poziomie, gdy procentowe użycie procesora CPU przekracza 70%.
- Skaluj w głąb, gdy wartość procentowa procesora CPU jest mniejsza niż 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
W poniższej tabeli opisano parametry używane w cmdlecie New-AzAutoscaleScaleRuleObject.
| Parametr | Opis |
|---|---|
MetricTriggerMetricName |
Ustawia wyzwalającą metrykę automatycznego skalowania |
MetricTriggerMetricResourceUri |
Określa zasób, do którego należy metryka MetricTriggerMetricName.
MetricTriggerMetricResourceUri może być dowolnym zasobem, a nie tylko zasobem, który jest skalowany. Można na przykład skalować zestawy skalowania maszyn wirtualnych na podstawie metryk utworzonych przez moduł równoważenia obciążenia, bazę danych lub sam zestaw skalowania. Element MetricTriggerMetricName musi istnieć dla określonego MetricTriggerMetricResourceUrielementu . |
MetricTriggerTimeGrain |
Częstotliwość próbkowania metryki monitorowanej przez regułę.
MetricTriggerTimeGrain musi być jedną ze wstępnie zdefiniowanych wartości dla określonej metryki i musi należeć do przedziału od 12 godzin do 1 minuty. Na przykład MetricTriggerTimeGrain = PT1M"* oznacza, że metryki są próbkowane co 1 minutę i agregowane przy użyciu metody agregacji określonej w MetricTriggerStatistic. |
MetricTriggerTimeAggregation |
Metoda agregacji w okresie timeGrain. Na przykład statystyka = "Średnia" i timeGrain = "PT1M" oznacza, że metryki są agregowane co 1 minutę, biorąc średnią. |
MetricTriggerStatistic |
Metoda agregacji używana do agregowania przykładowych metryk. Na przykład timeAggregation = "Average" agreguje próbkowane metryki, przyjmując średnią. |
MetricTriggerTimeWindow |
Czas, przez jaki mechanizm autoskalowania analizuje dane metryczne wstecz, aby je zagregować. Ta wartość musi być większa niż opóźnienie w kolekcji metryk, które różni się w zależności od zasobu. Musi to być od 5 minut do 12 godzin. Na przykład 10 minut oznacza, że za każdym razem, gdy jest uruchamiane automatyczne skalowanie, wysyła zapytania do metryk w ciągu ostatnich 10 minut. Ta funkcja umożliwia stabilizację metryk i unikanie reagowania na przejściowe skoki. |
MetricTriggerThreshold |
Określa wartość metryki wyzwalającą zdarzenie skalowania. |
MetricTriggerOperator |
Określa logiczne działanie porównawcze do użycia podczas oceniania wartości metryki. |
MetricTriggerDividePerInstance |
Po ustawieniu, true dzieli metrykę wyzwalacza przez łączną liczbę wystąpień. Jeśli na przykład liczba komunikatów wynosi 300 i jest uruchomionych 5 wystąpień, obliczona wartość metryki to 60 komunikatów na wystąpienie. Ta właściwość nie ma zastosowania do wszystkich metryk. |
ScaleActionDirection |
Określ skalowanie w górę lub w dół. Prawidłowe wartości to Increase i Decrease. |
ScaleActionType |
Skalowanie według określonej liczby wystąpień, skalowanie do określonej liczby wystąpień lub skalowanie według wartości procentowej liczby bieżących wystąpień. Prawidłowe wartości to ChangeCount, ExactCounti PercentChangeCount. |
ScaleActionCooldown |
Minimalny czas, jaki musi upłynąć po operacji skalowania, zanim ta reguła będzie mogła zainicjować kolejną akcję skalowania. Autoskalowanie sprawdza okres karencji każdej reguły niezależnie. Okres wyciszenia pozwala metrykom się ustabilizować i zapobiega zjawisku flappingu. |
Tworzenie domyślnego profilu autoskalowania i kojarzenie reguł
Po zdefiniowaniu reguł skalowania utwórz profil. Profil określa domyślne, górne i niższe limity liczby wystąpień oraz czasy zastosowania skojarzonych reguł.
Poniższy przykład Azure PowerShell używa polecenia cmdlet New-AzAutoscaleProfileObject.
Note
Ponieważ ten profil jest profilem domyślnym, nie ma żadnych parametrów harmonogramu. Profil domyślny jest aktywny w czasie, gdy nie są aktywne żadne inne profile.
# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
Name = "default"
CapacityDefault = "1"
CapacityMaximum = "10"
CapacityMinimum = "1"
Rule = @($scaleOutRule, $scaleInRule)
}
$defaultProfile = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams
W poniższej tabeli opisano parametry używane w cmdlecie New-AzAutoscaleProfileObject.
| Parametr | Opis |
|---|---|
CapacityDefault |
Liczba wystąpień, które są, jeśli metryki nie są dostępne do oceny. Wartość domyślna jest używana tylko wtedy, gdy bieżąca liczba wystąpień jest niższa niż domyślna. |
CapacityMaximum |
Maksymalna liczba wystąpień dla zasobu. Maksymalna liczba wystąpień jest dodatkowo ograniczona przez liczbę rdzeni dostępnych w subskrypcji. |
CapacityMinimum |
Minimalna liczba wystąpień zasobu. |
FixedDateEnd |
Godzina zakończenia profilu w formacie ISO 8601. |
FixedDateStart |
Godzina rozpoczęcia profilu w formacie ISO 8601. |
Rule |
Kolekcja reguł, które udostępniają wyzwalacze i parametry akcji skalowania, gdy ten profil jest aktywny. Można określić maksymalnie 10 rozdzielonych przecinkami reguł. |
RecurrenceFrequency |
Częstotliwość efektu zaplanowanego profilu. Ta wartość musi mieć wartość week. |
ScheduleDay |
Kolekcja dni, na które profil ma wpływ podczas określania harmonogramu cyklicznego. Możliwe wartości to od niedzieli do soboty. Aby uzyskać więcej informacji na temat harmonogramów cyklicznych, zobacz Cykliczne profile przy użyciu programu PowerShell. |
ScheduleHour |
Kolekcja godzin, na które ma wpływ profil. Obsługiwane wartości to od 0 do 23. |
ScheduleMinute |
Kolekcja minut, w których profil ma obowiązywać. |
ScheduleTimeZone |
Strefa czasowa godzin profilu. |
Stosowanie ustawień skalowania automatycznego
Po zdefiniowaniu reguł i profilu zastosuj ustawienia skalowania automatycznego. Aby zaktualizować istniejące ustawienie autoskalowania, użyj polecenia Update-AzAutoscaleSetting.
Poniższy przykład Azure PowerShell używa polecenia cmdlet New-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
Dodawanie powiadomień do ustawień autoskalowania
Dodaj powiadomienia do ustawienia autoskalowania, aby wywołać webhook lub wysłać powiadomienia e-mail po wystąpieniu zdarzenia skalowania.
Poniższy przykład Azure PowerShell używa polecenia cmdlet New-AzAutoscaleWebhookNotificationObject.
# Set variables
$webhookUri = "<WebhookUri>"
# Create the webhook notification
$webhook = New-AzAutoscaleWebhookNotificationObject -Property @{} -ServiceUri $webhookUri
Poniższy przykład Azure PowerShell używa polecenia cmdlet New-AzAutoscaleNotificationObject do konfigurowania powiadomień webhook i e-mail.
Note
Użyj endpointu HTTPS dla webhooka.
# Set variables
$notificationEmail = "<NotificationEmail>"
# Define parameters for New-AzAutoscaleNotificationObject
$newAzAutoscaleNotificationObjectParams = @{
EmailCustomEmail = @($notificationEmail)
EmailSendToSubscriptionAdministrator = $true
EmailSendToSubscriptionCoAdministrator = $true
Webhook = @($webhook)
}
$notification = New-AzAutoscaleNotificationObject @newAzAutoscaleNotificationObjectParams
Poniższy przykład Azure PowerShell używa polecenia cmdlet Update-AzAutoscaleSetting w celu zastosowania powiadomienia.
# Define parameters for Update-AzAutoscaleSetting
$updateAzAutoscaleSettingParams = @{
Name = $autoscaleName
ResourceGroupName = $resourceGroupName
Notification = @($notification)
}
# Update the autoscale notification
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams
Przeglądanie ustawień automatycznego skalowania
W poniższym przykładzie Azure PowerShell użyto Get-AzAutoscaleSetting polecenia cmdlet do pobrania ustawienia autoskalowania.
# Define parameters for Get-AzAutoscaleSetting
$getAzAutoscaleSettingParams = @{
ResourceGroupName = $resourceGroupName
Name = $autoscaleName
}
$autoscaleSetting = Get-AzAutoscaleSetting @getAzAutoscaleSettingParams
$autoscaleSetting | Select-Object -Property *
Poniższy przykład Azure PowerShell używa polecenia cmdlet Get-AzAutoscaleHistory.
Note
Wykonuje zapytanie dotyczące historii ustawienia autoskalowania, a nie identyfikatora zasobu zestawu skalowania.
# 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
Profile planowane i cykliczne
Note
Podczas aktualizacji Profiledołącz każdy profil, który chcesz zachować. Poniższe przykłady dodają profile do konfiguracji utworzonej wcześniej w tym artykule. Zachowaj inne profile podczas dostosowywania ich do innego ustawienia autoskalowania.
Dodaj zaplanowany profil dla wydarzenia specjalnego
Skonfiguruj profile skalowania automatycznego w celu skalowania w inny sposób pod kątem określonych zdarzeń. Na przykład w przypadku dnia, w których zapotrzebowanie będzie wyższe niż zwykle, utwórz profil ze zwiększonymi limitami maksymalnego i minimalnego wystąpienia.
W poniższym przykładzie Azure PowerShell użyto poleceń cmdlet New-AzAutoscaleProfileObject i Update-AzAutoscaleSetting.
Note
W poniższym przykładzie użyto tych samych reguł co zdefiniowany wcześniej profil domyślny, ale ustawia nowe limity wystąpień dla określonej daty. Można również skonfigurować różne reguły do użycia z nowym profilem. Wartości początkowe i końcowe używają znaczników czasu ISO 8601 w formacie 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
Dodaj zaplanowany profil cykliczny
Profile cykliczne umożliwiają zaplanowanie profilu skalowania powtarzanego co tydzień.
Chociaż zaplanowane profile mają datę początkową i końcową, profile cykliczne nie mają czasu zakończenia. Profil pozostaje aktywny do czasu rozpoczęcia następnego profilu. W związku z tym podczas tworzenia profilu cyklicznego należy utworzyć cykliczny profil domyślny uruchamiany po zakończeniu poprzedniego profilu cyklicznego.
W poniższym przykładzie Azure PowerShell używa poleceń cmdlet New-AzAutoscaleProfileObject i Update-AzAutoscaleSetting.
Note
Na przykład skaluj do pojedynczego wystąpienia w weekend, od piątkowego wieczoru do poniedziałkowego ranka. Aby skonfigurować profil weekendowy rozpoczynający się w piątkowe wieczory i kończący się w poniedziałek rano, utwórz profil rozpoczynający się w piątek wieczorem, a następnie utwórz profil cykliczny z ustawieniami domyślnymi rozpoczynającymi się w poniedziałek rano.
Tworzy profil weekendowy i cykliczny profil domyślny, aby zakończyć profil weekendowy, zachowując profile domyślne i profile o stałych datach z wcześniejszych kroków.
# 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
Aby uzyskać więcej informacji na temat zaplanowanych profili, zobacz Automatyczne skalowanie z wieloma profilami.
Inne komendy autoskalowania
Pełną listę poleceń cmdlet programu PowerShell dotyczących automatycznego skalowania można znaleźć w przeglądarce modułów programu PowerShell.
Czyszczenie zasobów
Aby wyczyścić zasoby utworzone w tym samouczku, usuń utworzoną dedykowaną grupę zasobów. Następujące polecenie cmdlet usuwa grupę zasobów i wszystkie jej zasoby.
Poniższy przykład Azure PowerShell używa polecenia cmdlet Remove-AzResourceGroup.
# Delete the example resource group
Remove-AzResourceGroup -Name $resourceGroupName