VMs müssen automatisch skalieren? Konfiguriere VM-Autoskalierung
Die CloudTrips-Webebene soll bei anhaltend höherer Nachfrage Kapazität hinzufügen und ungenutzte Kapazität anschließend entfernen. Azure Monitor Autoskalierung ändert die Instanzanzahl einer VM-Skalierungsgruppe anhand von definierten Metriken und Grenzen.
Dieser Trip ergänzt die vorhandene Skalierungsgruppe um CPU-basierte Regeln für Skalierung und Rückskalierung, erzeugt vorübergehende CPU-Last, überprüft die neue Instanz und beobachtet die Rückkehr zur Mindestkapazität.
Bestätige die Skalierungsgruppe
Dieser Trip benötigt die Ressourcen aus Viele identische VMs benötigt? Erstelle eine VM-Skalierungsgruppe:
Resource group: rg-cloudtrips-vmss-test-weu
Scale set: vmss-cloudtrips-web-test-weu
Orchestration mode: Flexible
Healthy instance count: 2
Load balancer: lb-cloudtrips-vmss-test-weu
Öffne die Skalierungsgruppe > Instances. Bestätige, dass beide Instanzen
ausgeführt werden und NGINX über Run command active zurückgibt:
systemctl is-active nginx
curl --fail http://localhost/
Konfiguriere Autoskalierung erst, wenn beide Instanzen fehlerfrei sind. Eine fehlerhafte Anwendung wird nicht repariert, indem weitere fehlerhafte Instanzen erstellt werden.
Erstelle eine Autoskalierungseinstellung
Öffne die Skalierungsgruppe > Scaling und wähle je nach Portalansicht Custom autoscale oder Configure. Erstelle eine Einstellung:
Autoscale setting name: autoscale-cloudtrips-web-test-weu
Resource group: rg-cloudtrips-vmss-test-weu
Scale mode: Scale based on a metric
Minimum instances: 2
Maximum instances: 4
Default instances: 2
Das Minimum erhält zwei Webserver. Das Maximum verhindert, dass dieser Test mehr als vier kostenpflichtige Instanzen erstellt. Der Standardwert wird verwendet, wenn Azure die Metrik nicht lesen kann. Er ist kein normales Ziel, das die Regeln außer Kraft setzt.

Füge die Regel zur Skalierung hinzu
Wähle Add a rule und konfiguriere:
Metric source: Current resource
Metric namespace: Virtual Machine Host
Metric name: Percentage CPU
Dimension values: All values
Time aggregation: Average
Operator: Greater than
Metric threshold: 70
Duration: 5 minutes
Time grain statistic: Average
Operation: Increase count by
Instance count: 1
Cooldown: 5 minutes
All values verhindert eine Filterung der Metrik auf eine bestimmte Instanz.
Azure bewertet die durchschnittliche CPU-Auslastung der Skalierungsgruppe.
Bleibt sie während des Auswertungsfensters über 70 %, fordert Autoskalierung
eine zusätzliche Instanz an. Die Abkühlzeit gibt der neuen VM Zeit zum Starten,
bevor eine weitere Skalierungsaktion möglich wird.

Füge die Regel zur Rückskalierung hinzu
Füge eine zweite Regel hinzu:
Metric source: Current resource
Metric namespace: Virtual Machine Host
Metric name: Percentage CPU
Dimension values: All values
Time aggregation: Average
Operator: Less than
Metric threshold: 30
Duration: 10 minutes
Time grain statistic: Average
Operation: Decrease count by
Instance count: 1
Cooldown: 5 minutes
Das längere Fenster mit niedriger CPU-Auslastung reduziert ein ständiges Wechseln zwischen Skalierung und Rückskalierung. Azure reduziert die Kapazität nicht unter das Minimum von zwei.

Speichere die Autoskalierungseinstellung. Bestätige, dass sie aktiviert ist und beide Regeln im Standardprofil erscheinen.
Erzeuge vorübergehende CPU-Last
Die durchschnittliche CPU-Auslastung muss in der gesamten Skalierungsgruppe steigen. Führe deshalb über Run command > RunShellScript auf beiden aktuellen Instanzen aus:
sudo apt-get update
sudo apt-get install -y stress-ng
nohup stress-ng \
--cpu 0 \
--cpu-load 90 \
--timeout 10m \
> /tmp/stress-ng.log 2>&1 &
pgrep -a stress-ng
stress-ng beansprucht absichtlich zehn Minuten lang CPU und stoppt
anschließend. Verwende es nur in dieser entbehrlichen TEST-Umgebung. Der Befehl
läuft im Hintergrund, sodass Azure Run Command beendet werden kann, während die
Last weiterläuft.
Beobachte die automatische Skalierung
Öffne die Skalierungsgruppe > Metrics und zeige Percentage CPU mit Durchschnittsaggregation an. Öffne anschließend Scaling > Run history oder den Ausführungsverlauf der Autoskalierungseinstellung.
Autoskalierung erfolgt nicht sofort: Die Metrik muss fünf Minuten über dem Schwellenwert bleiben, Azure muss die Regel auswerten und die VM bereitstellen. Warte auf ein erfolgreiches Skalierungsereignis und eine dritte Instanz.

Führe auf der neuen Instanz aus:
cloud-init status --long
systemctl is-active nginx
curl --fail http://localhost/
Die Instanz muss active melden und ihren Hostnamen zurückgeben. Dadurch wird
bewiesen, dass das VMSS-Modell automatisch erstellte Kapazität konfigurieren
kann.
Überprüfe die neue Instanz hinter dem Load Balancer
Sende mehrere Verbindungen an die öffentliche IP:
for request in 1 2 3 4 5 6; do
curl --silent --header 'Connection: close' http://<PUBLIC-IP>/
done
Die Ergebnisse sollten schließlich alle drei fehlerfreien Hostnamen enthalten. Azure Load Balancer verteilt Flows und nicht Anfragen in strikt zyklischer Reihenfolge. Wiederhole deshalb die Schleife, falls ein Hostname nicht in den ersten sechs Antworten erscheint.

Beobachte die automatische Rückskalierung
Nach zehn Minuten stoppt stress-ng. Die CPU-Auslastung sollte unter 30 %
fallen. Warte auf das zehnminütige Fenster mit niedriger CPU-Auslastung, die
Regelauswertung und die Abkühlzeit. Bestätige im Autoskalierungsverlauf, dass
die Kapazität sinkt und die Instanzanzahl zu zwei zurückkehrt.

Autoskalierung entfernt eine Instanz und bewahrt keine Daten auf, die nur auf deren Betriebssystemdatenträger gespeichert sind. Workloads in Skalierungsgruppen müssen dauerhafte Daten in externen Diensten speichern.
Bereinige
Deaktiviere die Autoskalierungseinstellung, falls du das Lab ohne weitere Kapazitätsänderungen untersuchen möchtest. Lösche anschließend die eigene Ressourcengruppe:
az group delete \
--name rg-cloudtrips-vmss-test-weu \
--yes
Dadurch werden Autoskalierungseinstellung, Skalierungsgruppe, Instanzen, Datenträger, Load Balancer, öffentliche IP, NSG, VNet und Subnetz entfernt. Überprüfe die Löschung:
az group exists --name rg-cloudtrips-vmss-test-weu
Das erwartete Ergebnis ist false.