Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz 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 witryny Azure Portal, interfejsu wiersza polecenia platformy Azure, programu PowerShell lub szablonów usługi ARM lub 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:
- Tworzenie zestawu skalowania, który można skalować automatycznie
- Tworzenie reguł skalowania w dół i skalowania w górę
- Tworzenie profilu korzystającego z reguł
- Stosowanie ustawień skalowania automatycznego
- Aktualizowanie ustawień automatycznego skalowania przy użyciu powiadomień
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
#Set the subscription Id, VMSS name, and resource group name
$subscriptionId = (Get-AzContext).Subscription.Id
$resourceGroupName="rg-powershell-autoscale"
$vmssName="vmss-001"
Tworzenie zestawu skalowania maszyn wirtualnych
Utwórz zestaw skalowania przy użyciu następujących poleceń cmdlet. Ustaw zmienne $resourceGroupName i $vmssName odpowiednio do swojego środowiska.
# 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"
Tworzenie ustawień autoskalowania
Aby utworzyć ustawienie autoskalowania przy użyciu programu PowerShell, wykonaj poniższą sekwencję:
- Tworzenie reguł przy użyciu polecenia
New-AzAutoscaleScaleRuleObject - Tworzenie profilu przy użyciu polecenia
New-AzAutoscaleProfileObject - Tworzenie ustawień autoskalowania przy użyciu polecenia
New-AzAutoscaleSetting - Aktualizowanie ustawień przy użyciu polecenia
Update-AzAutoscaleSetting
Tworzenie reguł
Utwórz reguły skalowania w górę i w dół, a następnie skojarz je z profilem.
Reguły są tworzone przy użyciu elementu New-AzAutoscaleScaleRuleObject.
Poniższy skrypt programu PowerShell tworzy dwie reguły.
- Skaluj w poziomie, gdy użycie CPU przekracza 70%
- Skaluj w dół, gdy użycie procesora jest poniżej 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))
W poniższej tabeli opisano parametry używane w cmdlecie New-AzAutoscaleScaleRuleObject.
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ł. Użyj polecenia New-AzAutoscaleProfileObject cmdlet, aby utworzyć nowy profil autoskalowania. Ponieważ jest to profil domyślny, nie ma żadnych parametrów harmonogramu. Profil domyślny jest aktywny w czasie, gdy nie są aktywne żadne inne profile
$defaultProfile=New-AzAutoscaleProfileObject `
-Name "default" `
-CapacityDefault 1 `
-CapacityMaximum 10 `
-CapacityMinimum 1 `
-Rule $rule1, $rule2
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 Dodawanie profilu cyklicznego przy użyciu interfejsu wiersza polecenia |
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 ustaleniu reguł i profilu zastosuj ustawienia autoskalowania przy użyciu New-AzAutoscaleSetting. Aby zaktualizować istniejące ustawienie autoskalowania, użyj polecenia 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"
Dodawanie powiadomień do ustawień autoskalowania
Dodaj powiadomienia do ustawień sprzedaży, aby uruchomić webhook lub wysłać powiadomienia e-mail po wystąpieniu zdarzenia związanego z obciążeniem.
Aby uzyskać więcej informacji na temat powiadomień webhook, zobacz New-AzAutoscaleWebhookNotificationObject
Ustaw webhook używając następującego polecenia cmdlet.
$webhook1=New-AzAutoscaleWebhookNotificationObject -Property @{} -ServiceUri "http://contoso.com/webhook1"
Skonfiguruj powiadomienie przy użyciu webhooka i skonfiguruj powiadomienie e-mail przy użyciu polecenia New-AzAutoscaleNotificationObject cmdlet.
$notification1=New-AzAutoscaleNotificationObject `
-EmailCustomEmail "jason@contoso.com" `
-EmailSendToSubscriptionAdministrator $true `
-EmailSendToSubscriptionCoAdministrator $true `
-Webhook $webhook1
Zaktualizuj ustawienia autoskalowania, aby zastosować powiadomienie
Update-AzAutoscaleSetting `
-Name vmss-autoscalesetting1 `
-ResourceGroupName $resourceGroupName `
-Profile $defaultProfile `
-Notification $notification1 `
-TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"
Przeglądanie ustawień automatycznego skalowania
Aby przejrzeć ustawienia autoskalowania, załaduj je do zmiennej przy użyciu Get-AzAutoscaleSetting, a następnie wyprowadź tę zmienną w następujący sposób:
$autoscaleSetting=Get-AzAutoscaleSetting -ResourceGroupName $resourceGroupName -Name vmss-autoscalesetting1
$autoscaleSetting | Select-Object -Property *
Uzyskaj historię skalowania automatycznego przy użyciu polecenia AzAutoscaleHistory
Get-AzAutoscaleHistory -ResourceId /subscriptions/<subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName
Profile planowane i cykliczne
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 użyto tych samych reguł co profil domyślny zdefiniowany powyżej, 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.
$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"
Dodaj zaplanowany profil cykliczny
Profile cykliczne umożliwiają zaplanowanie profilu skalowania powtarzanego co tydzień. Na przykład skaluj do pojedynczego wystąpienia w weekend, od piątkowego wieczoru do poniedziałkowego ranka.
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.
Aby na przykład 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.
Poniższy skrypt tworzy profil weekendowy i dodatkowy profil domyślny, aby zakończyć profil weekendowy.
$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"
Aby uzyskać więcej informacji na temat profilów zaplanowanych, zobacz Automatyczna skalowalność z wieloma profilami
Inne komendy autoskalowania
Aby uzyskać pełną listę poleceń cmdlet programu PowerShell dla autoskalowania, zobacz przeglądarkę modułów programu PowerShell
Czyszczenie zasobów
Aby wyczyścić zasoby utworzone w tym samouczku, usuń utworzoną grupę zasobów. Następujące polecenie cmdlet usuwa grupę zasobów i wszystkie jej zasoby.
Remove-AzResourceGroup -Name $resourceGroupName