PowerShell ile otomatik ölçeklendirmeyi yapılandırma

Otomatik ölçeklendirme ayarları, uygulamanızın dalgalı yükünü işlemek için doğru kaynak miktarına sahip olduğunuzdan emin olmanıza yardımcı olur. Azure portal, Azure CLI, PowerShell veya ARM veya Bicep şablonlarını kullanarak otomatik ölçeklendirmeyi yapılandırabilirsiniz.

Bu makalede, aşağıdaki adımları kullanarak PowerShell ile bir Sanal Makine Ölçek Kümesi için otomatik ölçeklendirmeyi yapılandırma adımları gösterilmektedir:

  • Otomatik olarak ölçeklendirebileceğ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ğe sahip bir Azure hesabınız olmalıdı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 ortamınızı pakete eklemek için ve $vmssName 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:

  1. kullanarak kural oluşturma New-AzAutoscaleScaleRuleObject
  2. kullanarak profil oluşturma New-AzAutoscaleProfileObject
  3. kullanarak otomatik ölçeklendirme ayarlarını oluşturma New-AzAutoscaleSetting
  4. 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-AzAutoscaleScaleRuleObjectoluş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çeklendirilmekte olan 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 MetricTriggerMetricResourceUriiç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 MetricTriggerStatisticbelirtilen 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 toplama gecikmesinden daha 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 dakikanın ölçümlerini sorgular anlamına gelir. 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 DecreasedeğerleridirIncrease.
ScaleActionType Belirli bir örnek sayısına 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 , ExactCountve PercentChangeCountdeğerlerini içerirChangeCount.
ScaleActionCooldown Ölçeklendirme işlemleri arasında beklenme süresi alt sınır. Bu, ölçümlerin dengelenmesini sağlamaktır ve çırpmayı önler. Örneğin, 10 dakika ve bir ölçeklendirme işlemi 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 değer yalnızca geçerli örnek sayısı varsayılandan düşükse kullanılır.
CapacityMaximum Kaynak için en fazla örnek sayısı. En fazla örnek sayısı, abonelikte kullanılabilen çekirdek sayısıyla daha da sınırlıdır.
CapacityMinimum Kaynak için en az örnek sayısı.
FixedDateEnd için ISO 8601 biçimindeki profilin bitiş saati.
FixedDateStart ISO 8601 biçimindeki profilin 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 geçerlilik süresi. 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üzölçekledikten sonra kullanarak otomatik ölçeklendirme ayarlarını New-AzAutoscaleSettinguygulayı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

Web kancasını tetiklemek veya ö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çirme

Otomatik ölçeklendirme ayarlarınızı gözden geçirmek için, aşağıdaki gibi değişkenin çıkışını kullanarak Get-AzAutoscaleSetting ayarları bir değişkene yükleyin:

    $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 daha yüksek olacağı bir gün için, artan maksimum ve minimum ö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şlayıp 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 bir 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çeklendirmeye yönelik 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