Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Otomatik ölçeklendirme, uygulamanızın dalgalı yükünü işlemek için doğru miktarda kaynak çalıştırmanızı sağlar. otomatik ölçeklendirmeyi Azure portalı, Azure CLI, Azure PowerShell veya ARM veya Bicep şablonlarını kullanarak 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 olarak ölçeklendirebileceğiniz bir ölçek kümesi oluşturun.
- İçe ölçeklendirme ve dışa ölçeklendirme için kurallar oluşturun.
- Kurallarınızı kullanan bir profil oluşturun.
- Otomatik ölçeklendirme ayarlarını uygulayın.
- Otomatik ölçeklendirme ayarlarınızı bildirimlerle güncelleştirin.
Ö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
Azure Cloud Shell'de PowerShell kullanın.
Note
Örnekleri, hedeflenen aboneliğinizin seçili olduğu aynı PowerShell oturumunda çalıştırın.
# 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"
Sanal Makine Ölçek Kümesi oluşturun
Aşağıdaki Azure PowerShell örneği New-AzVmss ve New-AzResourceGroup cmdlet'lerini kullanır.
Note
İşiniz bittiğinde kaynaklarını silebilmeniz için bu örnek için ayrılmış bir kaynak grubu kullanın.
Örnek bir genel IP adresi oluşturur. Yönetim erişimi için RDP veya SSH bağlantı noktalarını İnternet'e açmak yerine Azure Bastion kullanın.
# 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
Otomatik ölçeklendirme ayarları oluşturma
PowerShell kullanarak otomatik ölçeklendirme ayarı oluşturmak için aşağıdaki sırayı izleyin:
- kullanarak
New-AzAutoscaleScaleRuleObjectkurallar oluşturun. -
New-AzAutoscaleProfileObjectkullanarak bir profil oluşturun. -
New-AzAutoscaleSettingkullanarak otomatik ölçeklendirme ayarlarını oluşturun. - Ayarları
Update-AzAutoscaleSettingkullanarak güncelleştirin.
Kural oluşturma
Ölçeği içeri alma ve ölçeği dışarı alma kuralları oluşturun ve bunları bir profille ilişkilendirin.
Aşağıdaki Azure PowerShell örnek cmdlet'ini New-AzAutoscaleScaleRuleObject kullanır.
Note
İki kural oluşturur:
- CPU yüzdesi %70'i aştığında yatay ölçeklendirin.
- CPU Yüzdesi %30'dan az olduğunda içeri ölçeklendirin.
# 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
Aşağıdaki tabloda cmdlet'inde New-AzAutoscaleScaleRuleObject kullanılan parametreler açıklanmaktadır.
| Parametre | Açıklama |
|---|---|
MetricTriggerMetricName |
Otomatik ölçeklendirme tetikleyicisi metriğini 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 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 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çindeki 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 mekanizmasının ölçümü toplulaştırmak için geriye dönük olarak 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 dakikaya ait ölçümleri sorguladığı 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 |
true olarak ayarlandığında, tetikleyici metriğini örneklerin toplam sayısına böler. Ö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 küçültmeyi veya büyütmeyi belirtin. Geçerli değerler Increase ve Decrease değerleridir. |
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 , ChangeCountve ExactCountdeğerlerini içerirPercentChangeCount. |
ScaleActionCooldown |
Bu kural başka bir ölçek eylemi başlatmaya uygun hale gelmeden önce geçmesi gereken bir ölçeklendirme işleminden sonraki en düşük süre. Otomatik ölçeklendirme, her kuralın bekleme süresini bağımsız olarak kontrol eder. Bekleme süresi, metriklerin kararlı hâle gelmesini sağlar ve durumun sık sık değişmesini önler. |
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.
Aşağıdaki Azure PowerShell örnek cmdlet'ini New-AzAutoscaleProfileObject kullanır.
Note
Bu profil varsayılan bir profil olduğundan zamanlama parametresi yoktur. Varsayılan profil, başka hiçbir profilin etkin olmadığı zamanlarda etkindir.
# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
Name = "default"
CapacityDefault = "1"
CapacityMaximum = "10"
CapacityMinimum = "1"
Rule = @($scaleOutRule, $scaleInRule)
}
$defaultProfile = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams
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 minimum örnek sayısı. |
FixedDateEnd |
Profil için ISO 8601 biçimindeki 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'dan Cumartesi'ye kadar olan günlerdir. Yinelenen zamanlamalar hakkında daha fazla bilgi için bkz. PowerShell kullanarak yinelenen profiller. |
ScheduleHour |
Profilin geçerli olduğu saatlerin listesi. Desteklenen değerler 0-23'lerdir. |
ScheduleMinute |
Profilin etkin olduğu dakika koleksiyonu. |
ScheduleTimeZone |
Profil için tanımlı saatlerin saat dilimi. |
Otomatik ölçeklendirme ayarlarını uygulama
Kuralları ve profili tanımladıktan sonra otomatik ölçeklendirme ayarlarını uygulayın. Mevcut otomatik ölçeklendirme ayarını güncelleştirmek için Update-AzAutoscaleSetting kullanın.
Aşağıdaki Azure PowerShell örnek cmdlet'ini New-AzAutoscaleSetting kullanır.
# 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
Otomatik ölçeklendirme ayarlarınıza bildirim ekleme
Bir webhook'u tetiklemek veya bir ölçek olayı gerçekleştiğinde e-posta bildirimleri göndermek için otomatik ölçeklendirme ayarınıza bildirimler ekleyin.
Aşağıdaki Azure PowerShell örnek cmdlet'ini New-AzAutoscaleWebhookNotificationObject kullanır.
# Set variables
$webhookUri = "<WebhookUri>"
# Create the webhook notification
$webhook = New-AzAutoscaleWebhookNotificationObject -Property @{} -ServiceUri $webhookUri
Aşağıdaki Azure PowerShell örneği, webhook ve e-posta bildirimlerini yapılandırmak için New-AzAutoscaleNotificationObject cmdlet'ini kullanır.
Note
Webhook için bir HTTPS uç noktası kullanın.
# Set variables
$notificationEmail = "<NotificationEmail>"
# Define parameters for New-AzAutoscaleNotificationObject
$newAzAutoscaleNotificationObjectParams = @{
EmailCustomEmail = @($notificationEmail)
EmailSendToSubscriptionAdministrator = $true
EmailSendToSubscriptionCoAdministrator = $true
Webhook = @($webhook)
}
$notification = New-AzAutoscaleNotificationObject @newAzAutoscaleNotificationObjectParams
Aşağıdaki Azure PowerShell örneği, bildirimi uygulamak için Update-AzAutoscaleSetting cmdlet'ini kullanır.
# Define parameters for Update-AzAutoscaleSetting
$updateAzAutoscaleSettingParams = @{
Name = $autoscaleName
ResourceGroupName = $resourceGroupName
Notification = @($notification)
}
# Update the autoscale notification
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams
Otomatik ölçeklendirme ayarlarınızı gözden geçirin
Aşağıdaki Azure PowerShell örneği, otomatik ölçeklendirme ayarını almak için Get-AzAutoscaleSetting cmdlet'ini kullanır.
# Define parameters for Get-AzAutoscaleSetting
$getAzAutoscaleSettingParams = @{
ResourceGroupName = $resourceGroupName
Name = $autoscaleName
}
$autoscaleSetting = Get-AzAutoscaleSetting @getAzAutoscaleSettingParams
$autoscaleSetting | Select-Object -Property *
Aşağıdaki Azure PowerShell örnek cmdlet'ini Get-AzAutoscaleHistory kullanır.
Note
Ölçek kümesinin kaynak kimliğini değil, otomatik ölçeklendirme ayarının geçmişini sorgular.
# 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
Zamanlanmış ve yinelenen profiller
Note
Profile öğesini güncellerken, saklamak istediğiniz tüm profilleri ekleyin. Aşağıdaki örnekler, bu makalede daha önce oluşturulan ayara profiller ekler. Diğer profilleri başka bir otomatik ölçeklendirme ayarına uyarlarken saklayın.
Ö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 Azure PowerShell örneği, Update-AzAutoscaleSetting ve New-AzAutoscaleProfileObject cmdlet'lerini kullanır.
Note
Aşağıdaki örnek, daha önce tanımlanan varsayılan profille aynı kuralları kullanır, ancak belirli bir tarih için yeni örnek sınırları ayarlar. Yeni profille kullanmak için farklı kurallar da yapılandırabilirsiniz. Başlangıç ve bitiş değerleri UTC'de ISO 8601 zaman damgalarını kullanır.
# 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
Yinelenen zamanlanmış profil ekleyin
Yinelenen profiller, her hafta tekrarlanan bir ölçeklendirme profili zamanlamanıza olanak sağlar.
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.
Aşağıdaki Azure PowerShell örneği, Update-AzAutoscaleSetting ve New-AzAutoscaleProfileObject cmdlet'lerini kullanır.
Note
Örneğin, cuma gecesinden Pazartesi sabahına kadar hafta sonunda tek bir örneğe ölçeklendirin. Cuma geceleri başlayan ve Pazartesi sabahları sona erecek bir hafta sonu profili yapılandırmak için, Cuma gecesi başlayan bir profil oluşturun, ardından Pazartesi sabahı başlayan varsayılan ayarlarınızla yinelenen bir profil oluşturun.
Önceki adımlarda yer alan varsayılan ve sabit tarih profillerini korurken, bir hafta sonu profili ve hafta sonu profilini bitiren yinelenen bir varsayılan profil oluşturur.
# 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
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 ayrılmış kaynak grubunu silin. Aşağıdaki cmdlet kaynak grubunu ve tüm kaynaklarını siler.
Aşağıdaki Azure PowerShell örnek cmdlet'ini Remove-AzResourceGroup kullanır.
# Delete the example resource group
Remove-AzResourceGroup -Name $resourceGroupName