Azure üzerinde neden scale set vm kullanmalıyız? Bu makalemize soru cümlesi ile başlamak istedim. Çünkü Azure üzerinde bir vm kurmak artık çok basit. Bu soruya en güzel cevap e-ticaret siteleri. E-ticaret sitelerinin belirli günlerde yani bu black Friday veya başka bir kampanya günlerinde e-ticaret sitesine yapılan yoğun giriş isteklerinden dolayı sistemin gelen isteklere geç cevap vermesi hatta bu istekleri bir süre sonra karşılayamaz olması durumundan sistemin tamamen erişilmez olması gibi sonuçlar doğurabilir.
Bu noktada Azure üzerinde scale sets vm konumlandırdığınızda vm ‘leri otomatik olarak yatay veya dikey şekilde ölçeklendirebiliyoruz. Bu ölçeklendirme yapılırken bu sunuculardaki yük dengeleme işlemlerini de Azure Load Balancer veya Application Gateway ile sağlayabiliyoruz.
Scale sets, aynı VM’ leri bir küme olarak dağıtmanızı ve yönetmenizi kolaylaştırır. Azure portalı, Azure PowerShell veya Azure CLI kullanarak Linux veya Windows sanal sunucuları için scale sets oluşturabilirsiniz. Bu makalemizde de Azure PowerShell ile scale set vm oluşturmayı göreceğiz.
Ayrıca scale set işlemlerini Python veya Node.js gibi SDK'larla veya doğrudan REST API kullanarak da oluşturabilir ve yönetebilirsiniz.
Resim 01
Genel itibariyle scale set vm’ leri ne amaçla kullanmamız gerektiğinden bahsettik. Artık işlemlere Azure PowerShell başlayabiliriz.
Login-AzureRmAccount
Komutu ile Azure aboneliğimizde owner yetkisine sahip olan bir kullanıcı hesabı ile giriş yapıyoruz.
Resim 02
Bende birden fazla abonelik olduğundan işlem yapacağım aboneliği seçmem gerekiyor. Bunun içinse mevcutta sahip olduğum tüm aboneliklerin listesini görmek için:
Get-AzureRmSubscription
Komutunu yazıyorum.
Resim 03
Abonelik listesi geldikten sonra hangi abonelik içerisinde çalışacaksam Select-AzureRmSubscription -SubscriptionName "Visual Studio Enterprise"
Komutunu yazarak, abonelik seçimimi gerçekleştiriyorum.
Resim 04
Artık seçmiş olduğumuz abonelik içerisinde çalışmaya hazırız.
Subsctiption id, resource group name, scale set name ve region değerlerini giriyoruz.
$mySubscriptionId = (Get-AzureRmSubscription)[2].Id
$myResourceGroup = "rg-vmss"
$myScaleSet = "utss"
$myLocation = "West Europe"
Resim 05
$vmcred = Get-Credential
Oluşturacağımız vm’ e ait login bilgilerini giriyoruz.
Resim 06
Sonrasında scale set vm’ imizi oluşturmak için aşağıdaki komut satırını çalıştırıyoruz.
New-AzureRmVmss -Credential $vmcred -ResourceGroupName $myResourceGroup -VMScaleSetName $myScaleSet -Location $myLocation -VirtualNetworkName "utvnet" -SubnetName "default" -PublicIpAddressName "utnlb01" -LoadBalancerName "utnlb"
Yaklaşık olarak 3 dakika içerisinde vm scale set kurulumumuz tamamlanıyor.
Resim 07
Resim 08
Resim 09
Resim 10
Scale set vm’ i oluşturma işlemi tamamlandı. Şimdi auto scale özelliğini aktif etmek için aşağıdaki komutu çalıştırıyoruz. Aşağıdaki komut içerisinde yeni bir auto scale kuralı oluşturarak, cpu kullanımı %70 olduğunda ve bu kullanım oranı 5 dakika boyunca devam ettiğinde scale set içerisindeki vm sayısını 3’e çıkarmak için gerekli olan ayarları gerçekleştiriyor.
$myRuleScaleOut = New-AzureRmAutoscaleRule -MetricName "Percentage CPU" -MetricResourceId /subscriptions/$mySubscriptionId/resourceGroups/$myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/$myScaleSet -TimeGrain 00:01:00 -MetricStatistic "Average" -TimeWindow 00:05:00 -Operator "GreaterThan" -Threshold 70 -ScaleActionDirection "Increase" –ScaleActionScaleType "ChangeCount" -ScaleActionValue 3 -ScaleActionCooldown 00:05:00
Resim 11
Scale out kuralını yazmış olduk. Kullanılan kaynak tüketimi düştüğünde scale set içerisindeki vm sayısının eski haline dönebilmesi için yeni bir kural yazıyoruz. Bu kural içerisinde CPU kullanımı %30 altında olduğunda ve 5 dakika boyunca sürdüğünde scale set içerisindeki vm sayısı 1’e düşürüyor.
$myRuleScaleIn = New-AzureRmAutoscaleRule -MetricName "Percentage CPU" -MetricResourceId /subscriptions/$mySubscriptionId/resourceGroups/$myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/$myScaleSet -Operator "LessThan" -MetricStatistic "Average" -Threshold 30 -TimeGrain 00:01:00 -TimeWindow 00:05:00 -ScaleActionCooldown 00:05:00 -ScaleActionDirection "Decrease" –ScaleActionScaleType "ChangeCount" -ScaleActionValue 1
Resim 12
Scale set kurallarını oluşturduktan sonra scale set profilini oluşturmamız gerekiyor. Bunun için aşağıdaki komut satırını çalıştırıyoruz. Profili belirlerken scale set içerisinde olması gereken en az vm sayısı ve en fazla olması gereken vm sayısını belirtip, yukarıda belirttiğimiz kurallara göre bu profilin çalışacağını belirtiyoruz.
$myScaleProfile = New-AzureRmAutoscaleProfile -DefaultCapacity 2 -MaximumCapacity 10 -MinimumCapacity 2 -Rule $myRuleScaleOut,$myRuleScaleIn -Name "autoprofile"
Resim 13
Oluşturmuş olduğumuz scale set profilini uygulamak için aşağıdaki komutunu çalıştırarak profil atamasını gerçekleştiriyoruz.
Add-AzureRmAutoscaleSetting -Location $myLocation -Name "autosetting" -ResourceGroup $myResourceGroup -TargetResourceId /subscriptions/$mySubscriptionId/resourceGroups/$myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/$myScaleSet -AutoscaleProfile $myScaleProfile
Scale set olarak oluşturduğumuz vm’ e rdp veya powershell ile uzak bağlantıları sağlamak için Azure Load Balancer üzerinde oluşturulan NAT kurallarını listeleyerek bağlantıyı sağlayabiliyoruz.
$lb = Get-AzureRmLoadBalancer -ResourceGroupName "rg-vmss" -Name "utnlb"
Get-AzureRmLoadBalancerInboundNatRuleConfig -LoadBalancer $lb | Select-Object Name,Protocol,FrontEndPort,BackEndPort
Get-AzureRmPublicIpAddress -ResourceGroupName "rg-vmss" -Name utnlb01 | Select IpAddress
Resim 14
Resim 15
Artık scale set olarak oluşturduğumuz vm’ i kullanabiliriz. Bu makalemizde Azure üzerinde neden scale set vm konumlandırmalıyız konusunu ve scale set vm’ in PowerShell kullanılarak nasıl oluşturulabileceğinden bahsetmiş olduk. Umarım faydalı bir makale olmuştur. Bir sonraki makalemizde görüşmek üzere.