Azure Virtual Machine Scale Sets - Tipps

15. Dezember 2017
Das Logo von Microsoft Azure

Die „alten Hasen“ der Azure-Welt haben noch das klassische Azure Portal mit den klassischen VMs kennengelernt. Zu diesen VMs gehörte per default immer ein sog. „Cloud Service“, über welchen man Autoscale Regeln hinterlegen konnte. Bei den „neuen“ Resource Manager VMs sucht man nach dieser Option vergeblich. Wie können also die neuen VMs automatisch skaliert werden?

Die Lösung: VM Scale Sets!

Was sind VM Scale Sets eigentlich?

Bei den VM Scale Sets handelt es sich um eine Sammlung von identischen VM’s, deren Anzahl man mit nur einem Klick auf bspw. 100 erhöhen kann – also ohne mühselig mehrere VMs aus einem vorher erstellten Snapshot manuell erstellen zu müssen!

Screenshot des "Azure Virtual machine scale sets"

 

Wie im Screenshot zu sehen, lassen sich sogar mehrere Metriken durch AND/OR kombinieren, was zuvor bei den klassischen VMs nicht möglich war.

Was genau passiert beim Hoch- bzw. Herunterskalieren?

Nun, man muss sich die VMs eines ScaleSets wie Einwegware vorstellen (ähnlich wie Docker Container): Wenn hochskaliert wird, wird anhand eines vorher definierten Basis Images eine neue VM erstellt. Beim Herunterskalieren wird eine der VMs gelöscht. Aus diesem Grund sollten zur Laufzeit auch keine Daten direkt auf den VMs persistiert werden!

Doch halt: Wie wird ein solches Basisimage erstellt und wie weise ich dieses meinem ScaleSet zu?

Erstellung von eines Basis Azur Image

Dazu wird zunächst eine „normale“ Resource Manager VM erstellt. Diese kann nun nach Belieben konfiguriert werden und auf bekannte Weise ge-snapshotet werden. Je nachdem, welchen Disktyp ihr bei der Erstellung gewählt habt (managed oder unmanaged) wird beim Snapshot entweder ein Azure Image erstellt (eigenständige Azure Resource) oder es wird ein .vhd Datei in einem definierten Storage Account abgelegt. Der Vorteil eines Azure Image liegt ganz klar in der besseren Übersichtlichkeit der Azure Ressourcen. Allerdings gibt es hier die Limitierung, dass ein solches Image nur für ScaleSets innerhalb derselben Subscription genutzt werden kann! .vhd Dateien können (sofern sie als „Public“ markiert sind) auch subscriptionübergreifend genutzt werden.

Und wie weise ich mein Basis Image nun einem (vorhandenen) Scale Set zu? Dies ist derzeit leider nur per PowerShell Script möglich:

# Subscription ID where your VM Scale Set is in

$subId = "abcd-efgh-ijkl-mnop"

# Resource Group Name where your VM Scale Set is in

$rgname = "my-vmss"

#VM Scale Set name

$vmssname = "myvmss"

# image reference of the custom base image

$newImageReference = /subscriptions/ abcd-efgh-ijkl-mnop/resourceGroups/baseimage-rg/providers/Microsoft.Compute/images/my-base-image "

# after updating the image reference, you might want to upgrade all the VMs in the scale set. this can be done inside the Azure Portal or with PS (last command in this script)

$instanceid = "*"

# Login and set SubID

Login-AzureRMAccount

Select-AzureRmSubscription -SubscriptionId $subId

# get the VMSS model

$vmss = Get-AzureRmVmss -ResourceGroupName $rgname -VMScaleSetName $vmssname

# set the new version in the model data

$vmss.virtualMachineProfile.storageProfile.imageReference.id = $newImageReference

# update the virtual machine scale set model

Update-AzureRmVmss -ResourceGroupName $rgname -Name $vmssname -VirtualMachineScaleSet $vmss

# now start updating instances

Update-AzureRmVmssInstance -ResourceGroupName $rgname -VMScaleSetName $vmssname -InstanceId $instanceId

Euer aktuell verwendetes Basis Image könnt ihr im Portal sehen:

 

Screenshot der Azure VMSS zur Definition des Basis Image

Anstatt das Basis Image eines vorhandenen Scale Sets zu ändern wollt ihr stattdessen vielleicht direkt bei der Erstellung eines neuen Scale Sets euer Basis Image zuweisen. Dies ist leider via Portal noch nicht möglich, dafür aber mit einem ARM Template. Gleichzeitig könnt ihr mittels ARM Template noch weitere Metriken für das Autoscaling aktivieren. Das Template findet ihr unter: https://github.com/mrmunch/azure-arm-template-custom-vmss

Im Vergleich zu den klassischen VMs hat auch der LoadBalancer ein paar neue Eigenschaften: Zum Einen sind nun sticky sessions möglich und zum Anderen lässt sich ein custom path für den health check angeben:

Screenshot Azure VMSS HTTP-Health-Probe

Fazit:

Azure VM Scale Sets bieten deutlich mehr Konfigurationsmöglichkeiten als die klassischen Cloud Services. Es dauert zwar eine Weile, bis man verstanden hat, wie man damit umgehen muss – dafür bleiben hinterher fast keine Wünsche mehr offen. Der größte Vorteil ist aber natürlich das one-click-scaling auf bis zu 100 VMs, ohne dafür selbst neue VMs erstellen zu müssen!

Neuen Kommentar schreiben