Heute möchte ich auf ein weiteres sehr interessantes Thema in Azure eingehen. Erst kürzlich hat Microsoft mit Azure Virtual Machine Scale Set die Möglichkeit geschaffen automatisch und sehr schnell massive Compute und Storage Ressource über den Azure Ressource Manager auszurollen. Bisher musste der Weg über die alten Azure Cloud Services genommen werden, die mit dem alten Service Manager (Classic Portal) konfiguriert wurden. Mit dem Virtual Machine Scale Set gibt es eine sehr mächtige Möglichkeit auf schwankenden Bedarf automatisiert zu reagieren.
Wie das ganze funktioniert?
Die Anforderungsanalyse
Die Anforderungen sind klar definiert:
- Kosten sparen
- Auf Lastspitzen reagieren
- Weniger Hardware On-premises
- Moderner werden
- Risikoarme Migration in die Cloud-Welt
- Möglichkeit einer hybriden Bereitstellung
Nehmen wir mal folgende Anwendungsfall an. Ich habe eine Webanwendung, die ich aktuell im eigenen Rechenzentrum betreibe. Diese ist in die Jahre gekommen. Ein Tech-Refresh steht an. Ich möchte aber in Zukunft wirtschaftlicher werden. Deshalb möchte ich nicht mehr Infrastruktur für Lastspitzen zur Verfügung stellen, sondern flexibel darauf reagieren. Die Infrastruktur soll atmen können.
Was benötige ich für meine Webanwendung?
- Eine öffentliche Url/IP
- Einen Loadbalancer
- VMs
- Storage für VMs
- Ein Standard Image einer VM (mit installierter Web-Anwendung)
Benötigte Werkzeuge in diesem Beispiel
- Powershell
- JSON
- Azure-Portal
Die Architektur
Mit diesem Anforderungskatalog greife ich nun auf das Iaas Portfolio in Azure zu und baue eine Lösung. Zentrale Element ist Azure Machine Scale Set
- Der Benutzer greift auf den Azure Traffic Manager zu und wird entweder in die neue Azure Infrastruktur oder in die alte Infrastruktur umgeleitet
- Der Benutzer greift dann auf den Azure Loadbalancer zu
- Dieser Verteilt die Anfragen auf eine Basis-Anzahl von VM und damit auf die Anwendung zu
- Bei steigender Last werden weitere VMs automatisch hochgefahren, um Last zu übernehmen
- Bei sinkender Last werden die VMs wieder heruntergefahren
- Es wird ein Golden-Image für die VMs verwendet
Hier eine Übersicht aus dem Azure Friday.
Zudem möchte ich mittel des Traffic-Manager die neue Umgebung sanft in Betrieb nehmen. Oder im Ernstfall auch wieder zurück-migrieren können. Dies ist aber nicht Fokus dieses Beitrages.
Das Vorgehen
Schaut man sich nun nach schon vorhandenen ARM-Templates um, so musste ich feststellen, dass es ein solches nicht existiert. Also habe ich ein eigenes gebaut. Alles der Reihe nach:
- Im Grundsatz erstelle ich mir zunächst ein Golden-Image mit PowerShell in Azure.
New-AzureRmVM (hier kommen eine Menge weitere Parameter, die aber nicht Inhalt dieses Artikels sind)
2. Diese VM passe ich mir entsprechend an und generalisiere sie. Dann setze ich in Azure das Flag „Generalized“.
Stop-AzureRmVM -ResourceGroupName $myResourceGroup -Name $vmName
Set-AzureRmVm -ResourceGroupName $myResourceGroup -Name $vmName -Generalized
3. Nun sichere ich die VHD per Befehl in einen anderen Container im gleichen Storageaccount.
Save-AzureRmVMImage -ResourceGroupName $myResourceGroup -Name $vmName -DestinationContainerName $imagecontainer -VHDNamePrefix $vhdprefix
4. Nun kann ich mit dem folgenden JSON Script ein VMSS erstellen welches das Golden-Image zum Autoskalieren verwendet.
Virtual Machine Scale Set with own Image
Hinweis: Bitte darauf achten, dass das Image in der gleichen Subscription liegt.
Das Scale Set löst bei 10 % CPU Last aus und startet 1 VM nach. Dieses Ruleset ist im Abschnitt „type“: „Microsoft.Insights/autoscaleSettings“ einstellbar. Alle Funktionen im Detail sind wie gewohnt in der Azure Dokumentation einsehbar.
https://azure.microsoft.com/de-de/documentation/articles/virtual-machine-scale-sets-overview/
https://azure.microsoft.com/de-de/documentation/articles/virtual-machine-scale-sets-advanced-autoscale/
Fazit
Auch hier haben wir wieder ein Beispiel einer hybriden Bereitstellung von Cloud-Services. Das Migrationsrisiko wird dadurch erheblich reduziert. Und die eigene IT-Infrastruktur entlastet.
Viel Spaß beim Ausprobieren.