Powershell ile Azure Yonetimi – IaaS – Part 11 – VM Scale Set Olusturmak

Scale Set’ler (bundan sonra SS diyecegim) ile tek VM imajini kullanarak birden fazla klonlanmis VM’yi bir arada kullanabilirsiniz. Aslinda bu ozellik bir VM’nin kaynaklarina bir yuklenme oldugunda otomatik olarak ayni konfigurasyon ve dataya sahip yeni bir VM’nin oyuna dahil edilmesi anlamina gelir. Yogunluk gectiginde ise fazladan eklenen VM otomatik olarak ortadan kaldirilir. Bu sayede 1000 adet VM’ye kadar otomatik yuk kontrolu (Auto Scale) saglanabilir. SS olustururken, kullanacagimiz VM imajini da belirleriz. Dilersek custom bir imaj da tanimlayabiliriz. Oyle ya bazen istediginiz butun yazilimlari kurup bir imaj hazirlarsiniz ve tum VM’lerde bu Imajin kullanilmasini istersiniz. Ben, bu ornekte Azure marketplace imaji kullanacagim.

[crayon]
New-AzureRmVmss `
-ResourceGroupName ResourceGroup001 `
-Location “NorthEurope” `
-VMScaleSetName “towershellScaleSet01” `
-VirtualNetworkName “TestVNet003” `
-SubnetName “default” `
-LoadBalancerName “towershellNLB01” `
-UpgradePolicyMode “Automatic” `
-ImageName Win2016Datacenter
[/crayon]

Windows Server 2015 imajim ile birlikte VM SS kuruldu. Asil onemli olan bu SS’nin icinde ka cadet VM gozuktugu ya da gozukecegi. Bu durum icin cesitli kurallar kullaniyoruz. Mesela en az 2 VM olsun ancak bunlarin CPU seviyesi yuzde 80’nin ustune cikarsa o zaman ucuncu bir VM daha olusturulsun ve bu boyle yukariya dogru devam edip gitsin diyebiliriz. Yogunluk azaldiginda alinacak aksiyon icin de yine CPU seviyesi belirli bir duzeyin altina inerse fazladan acilan VM’ler kapatilsin diyebilecegiz.

Simdi oncelikle Scale Set icindeki VM’lere bir goz atalim.

[crayon]
Get-AzureRmVmss `
-ResourceGroupName ResourceGroup001 `
-VMScaleSetName “towershellScaleSet01” | Get-AzureRmVmssVM
[/crayon]


Goruldugu gibi su anda 2 adet VM hazir ve calisir durumda Gelecek gorevleri bekliyor.

Simdi manuel olarak SS icindeki VM’lerin adedini arttiracagim. Bu islemi manuel olarak yapiyorum.

[crayon]
$scaleset01 = Get-AzureRmVmss `
-ResourceGroupName ResourceGroup001 `
-VMScaleSetName “towershellScaleSet01” | Update-AzureRmVmss -SkuCapacity 3
[/crayon]


Simdi bakalim kac VM gorunuyor ve ne durumdalar.

Evet 3 kisi oldular!
Simdi SS icinde bulunan VM’ler uzerindeki yuk artarsa ne olacagini belirlemek icin AutoScale ozelligini configure edecegim. Boylece belirledigim kurallara gore SS icindeki VM sayisi otomatik olarak artacak ya da azalacak.
Asagidaki kurallarla birlikte sunu diyorum:

CPU yuzde 80’nin ustune cikarsa 1 tane daha VM ekle, yuzde 20’nin altina inerse fazla VM’yi kapat.

[crayon]
$scalesetID = (Get-AzureRmVmss `
-ResourceGroupName ResourceGroup001 `
-VMScaleSetName “towershellScaleSet01”).Id

$arttir = New-AzureRmAutoscaleRule `
-MetricName “Percentage CPU” `
-MetricResourceId $scalesetID `
-Operator GreaterThan `
-MetricStatistic Average `
-Threshold 80 `
-TimeGrain 00:01:00 `
-TimeWindow 00:05:00 `
-ScaleActionCooldown 00:05:00 `
-ScaleActionDirection Increase `
-ScaleActionValue 1

$azalt = New-AzureRmAutoscaleRule `
-MetricName “Percentage CPU” `
-MetricResourceId $scalesetID `
-Operator LessThan `
-MetricStatistic Average `
-Threshold 20 `
-TimeGrain 00:01:00 `
-TimeWindow 00:05:00 `
-ScaleActionCooldown 00:05:00 `
-ScaleActionDirection Decrease `
-ScaleActionValue 1

$ScaleProfili = New-AzureRmAutoscaleProfile `
-DefaultCapacity 2 `
-MaximumCapacity 8 `
-MinimumCapacity 2 `
-Rule $arttir,$azalt `
-Name “otomatikprofil”

Add-AzureRmAutoscaleSetting `
-Location “NorthEurope” `
-Name “AutoScale” `
-ResourceGroup ResourceGroup001 `
-TargetResourceId $scalesetID `
-AutoscaleProfile $ScaleProfili
[/crayon]