PowerShell ile otomatik ölçeklendirmeyi yapılandırma
Otomatik ölçeklendirme, uygulamanızın dalgalı yükünü işlemek için doğru miktarda kaynak çalıştırmanızı sağlar. Azure portalı, Azure CLI, PowerShell veya ARM veya Bicep şablonlarını kullanarak otomatik ölçeklendirmeyi yapılandırabilirsiniz.
Bu makalede, PowerShell ile bir Sanal Makine Ölçek Kümesi için otomatik ölçeklendirmeyi yapılandırma işlemi gösterilmektedir. Yapılandırmalar aşağıdaki adımları kullanır:
- Otomatik ölçeklendirme yapabileceğiniz bir ölçek kümesi oluşturma
- Ölçeği daraltmak ve ölçeği genişletmek için kurallar oluşturma
- Kurallarınızı kullanan bir profil oluşturma
- Otomatik ölçeklendirme ayarlarını uygulama
- Otomatik ölçeklendirme ayarlarınızı bildirimlerle güncelleştirme
Önkoşullar
PowerShell kullanarak otomatik ölçeklendirmeyi yapılandırmak için etkin aboneliği olan bir Azure hesabına ihtiyacınız vardır. Ücretsiz bir hesap oluşturabilirsiniz.
Ortamınızı ayarlama
#Set the subscription Id, VMSS name, and resource group name
$subscriptionId = (Get-AzContext).Subscription.Id
$resourceGroupName="rg-powershell-autoscale"
$vmssName="vmss-001"
Sanal Makine Ölçek Kümesi oluşturma
Aşağıdaki cmdlet'leri kullanarak bir ölçek kümesi oluşturun. $resourceGroupName
$vmssName
ortamınızı paketleye ve değişkenlerini ayarlayın.
# 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"
Otomatik ölçeklendirme ayarları oluşturma
PowerShell kullanarak otomatik ölçeklendirme ayarı oluşturmak için aşağıdaki sırayı izleyin:
- Kullanarak kural oluşturma
New-AzAutoscaleScaleRuleObject
- kullanarak profil oluşturma
New-AzAutoscaleProfileObject
- kullanarak otomatik ölçeklendirme ayarlarını oluşturma
New-AzAutoscaleSetting
- Kullanarak ayarları güncelleştirme
Update-AzAutoscaleSetting
Kural oluşturma
Ölçeği daraltma ve ölçeği genişletme kuralları oluşturup bunları bir profille ilişkilendirin.
Kurallar kullanılarak New-AzAutoscaleScaleRuleObject
oluşturulur.
Aşağıdaki PowerShell betiği iki kural oluşturur.
- CPU Yüzdesi %70'i aştığında ölçeği genişletme
- CPU Yüzdesi %30'dan az olduğunda ölçeği daraltma
$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))
Aşağıdaki tabloda cmdlet'inde New-AzAutoscaleScaleRuleObject
kullanılan parametreler açıklanmaktadır.
Parametre | Açıklama |
---|---|
MetricTriggerMetricName |
Otomatik ölçeklendirme tetikleyicisi ölçümünü ayarlar |
MetricTriggerMetricResourceUri |
Ölçümün ait olduğu MetricTriggerMetricName kaynağı belirtir. MetricTriggerMetricResourceUri yalnızca ölçeklendirilen kaynak değil herhangi bir kaynak olabilir. Örneğin, Sanal Makine Ölçek Kümeleri bir yük dengeleyici, veritabanı veya ölçek kümesinin kendisi tarafından oluşturulan ölçümlere göre ölçeklendikleyebilirsiniz. MetricTriggerMetricName belirtilen MetricTriggerMetricResourceUri için mevcut olmalıdır. |
MetricTriggerTimeGrain |
Kuralın izlediği ölçümün örnekleme sıklığı. MetricTriggerTimeGrain belirtilen ölçüm için önceden tanımlanmış değerlerden biri olmalı ve 12 saat ile 1 dakika arasında olmalıdır. Örneğin PT1M"*, = MetricTriggerTimeGrain ölçümlerin her 1 dakikada bir örneklendiğini ve içinde MetricTriggerStatistic belirtilen toplama yöntemi kullanılarak toplandığını gösterir. |
MetricTriggerTimeAggregation |
timeGrain dönemi içinde toplama yöntemi. Örneğin, istatistik = "Ortalama" ve timeGrain = "PT1M", ölçümlerin ortalama alınarak 1 dakikada bir toplandığını gösterir. |
MetricTriggerStatistic |
Örneklenen ölçümleri toplamak için kullanılan toplama yöntemi. Örneğin, TimeAggregation = "Average" örneklenen ölçümleri ortalamayı alarak toplar. |
MetricTriggerTimeWindow |
Otomatik ölçeklendirme altyapısının ölçümü toplamak için geriye baktığı süre. Bu değer, kaynağa göre değişen ölçüm koleksiyonundaki gecikmeden büyük olmalıdır. 5 dakika ile 12 saat arasında olmalıdır. Örneğin, 10 dakika, otomatik ölçeklendirme her çalıştığında son 10 dakikadaki ölçümleri sorgular. Bu özellik ölçümlerinizin kararlı olmasını sağlar ve geçici ani artışlara tepki vermekten kaçınıyor. |
MetricTriggerThreshold |
Ölçek olayını tetikleyen ölçümün değerini tanımlar. |
MetricTriggerOperator |
Ölçüm değeri değerlendirilirken kullanılacak mantıksal karşılaştırmalı işletimi belirtir. |
MetricTriggerDividePerInstance |
Tetikleyici ölçümünü toplam örnek sayısına bölecek şekilde ayarlandığında true . Örneğin, ileti sayısı 300 ise ve 5 örnek çalışıyorsa, hesaplanan ölçüm değeri örnek başına 60 iletidir. Bu özellik tüm ölçümler için geçerli değildir. |
ScaleActionDirection |
Ölçeği daraltma veya genişletmeyi belirtin. Geçerli değerler ve Decrease değerleridirIncrease . |
ScaleActionType |
Belirli sayıda örneğe göre ölçeklendirin, belirli bir örnek sayısına ölçeklendirin veya geçerli örnek sayısının yüzdesine göre ölçeklendirin. Geçerli değerler , ExactCount ve PercentChangeCount değerlerini içerirChangeCount . |
ScaleActionCooldown |
Ölçeklendirme işlemleri arasında beklenme süresi minimum. Bu, ölçümlerin dengelenmesini sağlamaktır ve dokunmayı önler. Örneğin, 10 dakika ise ve bir ölçeklendirme işlemi yeni gerçekleştiyse ScaleActionCooldown , Otomatik Ölçeklendirme 10 dakika boyunca yeniden ölçeklendirmeyi denemez. |
Varsayılan otomatik ölçeklendirme profili oluşturma ve kuralları ilişkilendirme
Ölçek kurallarını tanımladıktan sonra bir profil oluşturun. Profil varsayılan, üst ve alt örnek sayısı sınırlarını ve ilişkili kuralların uygulanabileceği saatleri belirtir. New-AzAutoscaleProfileObject
Yeni bir otomatik ölçeklendirme profili oluşturmak için cmdlet'ini kullanın. Bu varsayılan bir profil olduğundan zamanlama parametresi yoktur. Varsayılan profil, başka hiçbir profilin etkin olmadığı zamanlarda etkindir
$defaultProfile=New-AzAutoscaleProfileObject `
-Name "default" `
-CapacityDefault 1 `
-CapacityMaximum 10 `
-CapacityMinimum 1 `
-Rule $rule1, $rule2
Aşağıdaki tabloda cmdlet'inde New-AzAutoscaleProfileObject
kullanılan parametreler açıklanmaktadır.
Parametre | Açıklama |
---|---|
CapacityDefault |
Ölçümler değerlendirme için kullanılamıyorsa olan örnek sayısı. Varsayılan, yalnızca geçerli örnek sayısı varsayılandan düşükse kullanılır. |
CapacityMaximum |
Kaynak için en fazla örnek sayısı. Maksimum örnek sayısı, abonelikte kullanılabilen çekirdek sayısıyla da sınırlıdır. |
CapacityMinimum |
Kaynak için en az örnek sayısı. |
FixedDateEnd |
IÇIN ISO 8601 biçiminde profilin bitiş zamanı. |
FixedDateStart |
PROFILIn ISO 8601 biçimindeki başlangıç zamanı. |
Rule |
Bu profil etkin olduğunda ölçeklendirme eylemi için tetikleyicileri ve parametreleri sağlayan kurallar koleksiyonu. En fazla 10 virgülle ayrılmış kural belirtilebilir. |
RecurrenceFrequency |
Zamanlanan profilin ne sıklıkta etkin olduğu. Bu değer olmalıdır week . |
ScheduleDay |
Yinelenen bir zamanlama belirtirken profilin etkin olduğu gün koleksiyonu. Olası değerler Pazar ile Cumartesi arasıdır. Yinelenen zamanlamalar hakkında daha fazla bilgi için bkz . CLI kullanarak yinelenen profil ekleme |
ScheduleHour |
Profilin etkili olduğu saat koleksiyonu. Desteklenen değerler 0-23'lerdir. |
ScheduleMinute |
Profilin etkin olduğu dakika koleksiyonu. |
ScheduleTimeZone |
Profilin saatleri için saat dilimi. |
Otomatik ölçeklendirme ayarlarını uygulama
Kuralları ve profili yüzgeçledikten sonra kullanarak otomatik ölçeklendirme ayarlarını New-AzAutoscaleSetting
uygulayın. Mevcut otomatik ölçeklendirme ayarını güncelleştirmek için 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"
Otomatik ölçeklendirme ayarlarınıza bildirim ekleme
Bir web kancasını tetiklemek veya bir ölçek olayı gerçekleştiğinde e-posta bildirimleri göndermek için satış ayarınıza bildirimler ekleyin.
Web kancası bildirimleri hakkında daha fazla bilgi için bkz. New-AzAutoscaleWebhookNotificationObject
Aşağıdaki cmdlet'i kullanarak bir web kancası ayarlayın;
$webhook1=New-AzAutoscaleWebhookNotificationObject -Property @{} -ServiceUri "http://contoso.com/webhook1"
Web kancasını kullanarak bildirimi yapılandırın ve cmdlet'ini kullanarak e-posta bildirimini New-AzAutoscaleNotificationObject
ayarlayın:
$notification1=New-AzAutoscaleNotificationObject `
-EmailCustomEmail "jason@contoso.com" `
-EmailSendToSubscriptionAdministrator $true `
-EmailSendToSubscriptionCoAdministrator $true `
-Webhook $webhook1
Bildirimi uygulamak için otomatik ölçeklendirme ayarlarınızı güncelleştirme
Update-AzAutoscaleSetting `
-Name vmss-autoscalesetting1 `
-ResourceGroupName $resourceGroupName `
-Profile $defaultProfile `
-Notification $notification1 `
-TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"
Otomatik ölçeklendirme ayarlarınızı gözden geçirin
Otomatik ölçeklendirme ayarlarınızı gözden geçirmek için, kullanarak ayarları bir değişkene Get-AzAutoscaleSetting
yükleyin ve ardından değişkenin çıkışını aşağıdaki gibi yapın:
$autoscaleSetting=Get-AzAutoscaleSetting -ResourceGroupName $resourceGroupName -Name vmss-autoscalesetting1
$autoscaleSetting | Select-Object -Property *
Kullanarak otomatik ölçeklendirme geçmişinizi alma AzAutoscaleHistory
Get-AzAutoscaleHistory -ResourceId /subscriptions/<subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName
Zamanlanmış ve yinelenen profiller
Özel bir etkinlik için zamanlanmış profil ekleme
Belirli olaylar için farklı ölçeklendirilecek şekilde otomatik ölçeklendirme profilleri ayarlayın. Örneğin, talebin normalden yüksek olacağı bir gün için, artan maksimum ve en düşük örnek sınırlarına sahip bir profil oluşturun.
Aşağıdaki örnek, yukarıda tanımlanan varsayılan profille aynı kuralları kullanır, ancak belirli bir tarih için yeni örnek sınırları ayarlar. Yeni profille kullanılacak farklı kuralları da yapılandırabilirsiniz.
$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"
Yinelenen zamanlanmış profil ekleme
Yinelenen profiller, her hafta tekrarlanan bir ölçeklendirme profili zamanlamanıza olanak sağlar. Örneğin, cuma gecesinden Pazartesi sabahına kadar hafta sonunda tek bir örneğe ölçeklendirin.
Zamanlanmış profillerin başlangıç ve bitiş tarihi olsa da, yinelenen profillerin bitiş saati yoktur. Profil, bir sonraki profilin başlangıç zamanına kadar etkin kalır. Bu nedenle, yinelenen bir profil oluşturduğunuzda, önceki yinelenen profilin bitmesini istediğinizde başlayan bir yinelenen varsayılan profil oluşturmanız gerekir.
Örneğin, Cuma geceleri başlayan ve Pazartesi sabahları biten bir hafta sonu profili yapılandırmak için, Cuma gecesi başlayan bir profil oluşturun ve ardından Pazartesi sabahı başlayan varsayılan ayarlarınızla yinelenen profil oluşturun.
Aşağıdaki betik, hafta sonu profilini sonlandırmak için bir hafta sonu profili ve ek varsayılan profil oluşturur.
$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"
Zamanlanmış profiller hakkında daha fazla bilgi için bkz. Birden çok profille otomatik ölçeklendirme
Diğer otomatik ölçeklendirme komutları
Otomatik ölçeklendirme için PowerShell cmdlet'lerinin tam listesi için bkz . PowerShell Modül Tarayıcısı
Kaynakları temizleme
Bu öğreticide oluşturduğunuz kaynakları temizlemek için oluşturduğunuz kaynak grubunu silin. Aşağıdaki cmdlet kaynak grubunu ve tüm kaynaklarını siler.
Remove-AzResourceGroup -Name $resourceGroupName