Installieren und Aktualisieren von Anwendungen in Virtual Machine Scale Sets

Abgeschlossen

Wenn Sie eine Anwendung in einer Skalierungsgruppe bereitstellen, benötigen Sie einen Mechanismus, um Ihre Anwendung konsistent auf allen Instanzen der Skalierungsgruppe zu aktualisieren. Dies können Sie durch die Verwendung einer benutzerdefinierten Skripterweiterung erreichen.

Im Versandunternehmensszenario müssen Sie ein Rollout der Updates für die Anwendung schnell durchführen, wobei Unterbrechungen für den Endbenutzer reduziert werden sollten. Eine benutzerdefinierte Skripterweiterung ist eine ideale Lösung.

In dieser Lerneinheit erfahren Sie, wie Sie eine benutzerdefinierte Skripterweiterung zum Aktualisieren einer Anwendung verwenden, die in einer Skalierungsgruppe ausgeführt wird.

Was ist eine benutzerdefinierte Skripterweiterung in Azure?

Die benutzerdefinierte Skripterweiterung in Azure lädt Skripts auf Azure-VMs herunter und führt sie aus. Zudem können gleiche Aufgaben auf allen VMs in einer Skalierungsgruppe automatisiert werden.

Speichern Sie benutzerdefinierte Skripts in Azure Storage oder GitHub. Wenn Sie einer VM benutzerdefinierte Skripts hinzufügen möchten, können Sie dazu das Azure-Portal verwenden. Kombinieren Sie eine benutzerdefinierte Skripterweiterung mit Azure Resource Manager-Vorlagen, um benutzerdefinierte Skripts im Rahmen einer auf Vorlagen basierten Bereitstellung auszuführen.

Installieren einer Anwendung in einer Skalierungsgruppe mithilfe einer benutzerdefinierten Skripterweiterung

Zum Verwenden der benutzerdefinierten Skripterweiterung mit der Azure-Befehlszeilenschnittstelle erstellen Sie eine Konfigurationsdatei, mit der definiert wird, welche Dateien abgerufen und welche Befehle ausgeführt werden sollen. Diese Datei liegt im JSON-Format vor.

Das folgende Beispiel zeigt eine Konfiguration eines benutzerdefinierten Skripts, bei der eine Anwendung aus einem GitHub-Repository heruntergeladen und auf einer Hostinstanz installiert wird, indem ein Skript mit dem Namen custom_application_v1.sh ausgeführt wird:

# yourConfigV1.json 
{
  "fileUris": ["https://raw.githubusercontent.com/yourrepo/master/custom_application_v1.sh"],
  "commandToExecute": "./custom_application_v1.sh"
}

Sie verwenden eine benutzerdefinierte Skripterweiterung, um diese Konfiguration in der Skalierungsgruppe bereitzustellen. Der folgende Code zeigt, wie Sie mithilfe der Azure-Befehlszeilenschnittstelle eine benutzerdefinierte Skripterweiterung für eine VM-Skalierungsgruppe erstellen. Mit diesem Befehl wird die neue App auf den VMs in der Skalierungsgruppe installiert:

az vmss extension set \
  --publisher Microsoft.Azure.Extensions \
  --version 2.0 \
  --name CustomScript \
  --resource-group myResourceGroup \
  --vmss-name yourScaleSet \
  --settings @yourConfigV1.json

Aktualisieren einer Anwendung in einer Skalierungsgruppe mithilfe einer benutzerdefinierte Skripterweiterung

Sie können eine benutzerdefinierte Skripterweiterung zum Aktualisieren einer vorhandenen App in einer VM-Skalierungsgruppe verwenden. Sie verweisen auf ein aktualisiertes Bereitstellungsskript und wenden die Erweiterung dann erneut auf Ihre Skalierungsgruppe an. Der folgende JSON-Code zeigt ein Beispiel für eine Konfiguration, die eine neue Version einer Anwendung abruft und installiert:

# yourConfigV2.json
{
  "fileUris": ["https://raw.githubusercontent.com/yourrepo/master/custom_application_v2.sh"],
  "commandToExecute": "./custom_application_v2.sh"
}

Sie können dann denselben Befehl az vmss extension set verwenden, der zuvor zum Bereitstellen der aktualisierten App gezeigt wurde, verweisen dieses Mal jedoch auf die neue Konfigurationsdatei:

az vmss extension set \
    --publisher Microsoft.Azure.Extensions \
    --version 2.0 \
    --name CustomScript \
    --resource-group yourResourceGroup \
    --vmss-name yourScaleSet \
    --settings @yourConfigV2.json

Die VMs werden gemäß der Upgraderichtlinie für die Skalierungsgruppe aktualisiert. Sie geben diese Richtlinie beim Erstellen der Skalierungsgruppe an. Die Upgraderichtlinie kann einen der folgenden drei Modi aufweisen:

  • Automatisch: Die Skalierungsgruppe definiert nicht, wann für die VMs Upgrades durchgeführt werden. Sie könnten alle gleichzeitig aktualisiert werden, wodurch ein Dienstausfall verursacht wird.
  • Parallel: Die Skalierungsgruppe führt ein Rollout des Updates auf den VMs in der Skalierungsgruppe in Batches durch. Zur Minimierung oder Vermeidung eines Dienstausfalls kann optional eine Pause eingeplant werden. In diesem Modus führen die Computer in der Skalierungsgruppe möglicherweise für kurze Zeit unterschiedliche Versionen der App aus. In diesem Modus müssen Sie entweder einen Integritätstest zur Skalierungsgruppe hinzufügen oder die Anwendungsintegritätserweiterung auf diese anwenden.
  • Manuell: Vorhandene VMs in der Skalierungsgruppe werden nicht aktualisiert. Alle Änderungen müssen manuell vorgenommen werden. Dies ist der Standardmodus.

Um den Upgraderichtlinienmodus beim Bereitstellen einer VM-Skalierungsgruppe anzugeben, verwenden Sie die Option upgrade-policy-mode. Im folgenden Codebeispiel wird die Azure-Befehlszeilenschnittstelle verwendet:

az vmss create \
  --resource-group MyResourceGroup \
  --name MyScaleSet \
  --image Ubuntu2204 \
  --upgrade-policy-mode automatic \
  --admin-username azureuser \
  --generate-ssh-keys