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:
- 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ç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 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 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 Decrease değ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 , ExactCount ve PercentChangeCount değ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-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
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