Teilen über


cloud-init-Unterstützung für virtuelle Computer in Azure

Gilt für: ✔️ Linux-VMs ✔️ Flexible Skalierungsgruppen

In diesem Artikel wird die vorhandene Unterstützung für cloud-init zum Konfigurieren von VMs oder Virtual Machine Scale Sets während der Bereitstellung in Azure erläutert. Diese cloud-init-Konfigurationen werden beim erstmaligen Starten ausgeführt, nachdem die Ressourcen von Azure bereitgestellt wurden.

Die VM-Bereitstellung ist der Prozess, bei dem Azure Ihre „VM Create“-Parameterwerte wie Hostname, Benutzername und Kennwort weiterleitet und dem virtuellen Computer beim Starten zur Verfügung stellt. Ein „Bereitstellungs-Agent“ wird diese Werte verarbeiten, den virtuellen Computer konfigurieren und nach Abschluss des Vorgangs entsprechend Bericht erstatten.

Azure unterstützt zwei Bereitstellungs-Agents cloud-init und den Azure Linux Agent (WALA).

Übersicht zu cloud-init

cloud-init ist eine gängige Methode für die Anpassung eines virtuellen Linux-Computers beim ersten Start. Sie können mit cloud-init Pakete installieren und Dateien schreiben oder Benutzer und Sicherheit konfigurieren. Da cloud-init während des ersten Startvorgangs aufgerufen wird, müssen Sie keine zusätzlichen Schritte oder Agents auf Ihre Konfiguration anwenden. Weitere Informationen zum ordnungsgemäßen Formatieren Ihrer #cloud-config-Dateien oder anderer Eingaben finden Sie auf der cloud-init-Dokumentationswebsite. #cloud-config-Dateien sind Base64-codierte Textdateien.

„cloud-init“ funktioniert auch Distributionen übergreifend. Verwenden Sie z.B. nicht apt-get install oder yum install, um ein Paket zu installieren. Stattdessen können Sie eine Liste mit zu installierenden Paketen definieren. „cloud-init“ verwendet automatisch das native Paketverwaltungstool für die ausgewählte Distribution.

Wir arbeiten aktiv mit unseren Linux-Distributionspartnern zusammen, um cloud-init-fähige Images im Azure Marketplace zur Verfügung zu stellen. Mit diesen Images funktionieren Ihre cloud-init-Bereitstellungen und -Konfigurationen nahtlos mit VMs und VM-Skalierungsgruppen. Zunächst arbeiten wir mit den empfohlenen Linux-Distributionspartnern und dem Upstream zusammen, um cloud-init-Funktionen mit dem Betriebssystem in Azure sicherzustellen, dann werden die Pakete aktualisiert und in den Distributionspaketrepositorys öffentlich zugänglich gemacht.

Es gibt zwei Phasen, um cloud-init für die unterstützten Linux-Distributionen in Azure verfügbar zu machen: Paketunterstützung und Imageunterstützung:

  • „cloud-init-Paketunterstützung in Azure“ dokumentiert, welche cloud-init-Pakete bereits unterstützt werden oder sich in der Vorschauversion befinden, sodass Sie diese Pakete mit dem Betriebssystem in einem benutzerdefinierten Image verwenden können.
  • „Image-cloud-init-fähig“ dokumentiert, ob das Image bereits für die Verwendung von cloud-init konfiguriert ist.

Canonical

Herausgeber/Version Angebot SKU Version Image-cloud-init-fähig cloud-init-Paketunterstützung in Azure
Canonical 24.04 UbuntuServer 22.04-LTS latest ja ja
Canonical 22.04 UbuntuServer 22.04-LTS latest ja ja
Canonical 20.04 UbuntuServer 20.04-LTS latest ja ja

RHEL

Herausgeber/Version Angebot SKU Version Image-cloud-init-fähig cloud-init-Paketunterstützung in Azure
RedHat 7 RHEL 7.7, 7.8, 7_9 latest ja ja
RedHat 8 RHEL 8.1, 8.2, 8_3, 8_4 latest ja ja
RedHat 9 RHEL 9_0, 9_1 latest ja ja
  • Alle anderen RedHat-SKUs ab RHEL 7 (Version 7.7) und RHEL 8 (Version 8.1), einschließlich Gen1- und Gen2-Images, werden mit cloud-init bereitgestellt. Die Cloudinitialisierung (cloud-init) wird in RHEL 6 nicht unterstützt.

Oracle

Herausgeber/Version Angebot SKU Version Image-cloud-init-fähig cloud-init-Paketunterstützung in Azure
Oracle 7 Oracle Linux 77, 78, ol79 latest ja ja
Oracle 8 Oracle Linux 81, ol82, ol83-lvm, ol84-lvm latest ja ja
  • Alle anderen Oracle-SKUs ab Oracle 7 (Version 7.7) und Oracle 8 (Version 8.1), einschließlich Gen1- und Gen2-Images, werden mit cloud-init bereitgestellt.

SUSE Linux Enterprise Server (SLES)

Herausgeber/Version Angebot SKU Version Image-cloud-init-fähig cloud-init-Paketunterstützung in Azure
SUSE 15 SLES (SUSE Linux Enterprise Server) sp1, sp2, sp3 latest ja ja
SUSE 12 SLES (SUSE Linux Enterprise Server) sp5 latest ja ja

Debian

Herausgeber/Version Angebot SKU Version Image-cloud-init-fähig cloud-init-Paketunterstützung in Azure
debian-10 Debian 10-cloudinit-gen2 Debian:debian-10:10-cloudinit-gen2:0.0.1015 ja ja
debian-10 Debian 10-cloudinit-gen2 Debian:debian-10:10-cloudinit-gen2:0.0.991 ja ja
debian-10 Debian 10-cloudinit-gen2 Debian:debian-10:10-cloudinit-gen2:0.0.999 ja ja

Derzeit unterstützt Azure Stack die Bereitstellung von Images mit cloud-init.

Was ist der Unterschied zwischen cloud-init und Linux-Agent (WALA)?

WALA ist ein für die Azure-Plattform spezifischer Agent zum Bereitstellen und Konfigurieren von virtuellen Computern und zum Behandeln von Azure-Erweiterungen.

Wir ergänzen das Konfigurieren von VMs um cloud-init anstelle des Linux-Agents, damit cloud-init-Kunden ihre vorhandenen cloud-init-Skripts und neue Kunden die umfangreichen cloud-init-Konfigurationsfunktionen nutzen können. Wenn Sie in cloud-init-Skripts zum Konfigurieren von Linux-Systemen investiert haben, sind für die Aktivierung keine zusätzlichen Einstellungen erforderlich, um die Verarbeitung mit cloud-init zu ermöglichen.

Die Cloudinitialisierung (cloud-init) kann keine Azure-Erweiterungen verarbeiten, daher ist WALA weiterhin im Image erforderlich, um Erweiterungen zu verarbeiten. Der Bereitstellungscode muss jedoch deaktiviert sein. Für Images für unterstützte Linux-Distributionen, die für die Bereitstellung mit cloud-init konvertiert werden, muss WALA installiert und ordnungsgemäß eingerichtet sein.

Wenn Sie beim Erstellen eines virtuellen Computers während der Bereitstellung nicht den Switch --custom-data der Azure-Befehlszeilenschnittstelle einfügen, verwendet cloud-init oder WALA die minimalen VM-Bereitstellungsparameter, die zum Bereitstellen des virtuellen Computers und zum Fertigstellen der Bereitstellung mit den Standardeinstellungen erforderlich sind. Wenn Sie auf die cloud-init-Konfiguration mit dem Switch --custom-data verweisen, steht alles, was in Ihren benutzerdefinierten Daten enthalten ist, für die cloud-init-Konfiguration zur Verfügung, wenn der virtuelle Computer startet.

Konfigurationen mit cloud-init, die auf virtuelle Computer angewendet werden, sind nicht zeitlich beschränkt und führen bei der Bereitstellung nicht zu Zeitüberschreitungsfehlern. Dies gilt nicht für WALA. Wenn Sie die WALA-Standardwerte ändern, um benutzerdefinierte Daten zu verarbeiten, darf die Gesamtdauer der VM-Bereitstellung von 40 Minuten nicht überschritten werden, da sonst ein Fehler bei der VM-Erstellung auftritt.

VM-Bereitstellung mit cloud-init ohne UDF-Treiber

Ab cloud-init 21.2 können Sie cloud-init verwenden, um eine VM in Azure ohne einen UDF-Treiber bereitzustellen. Wenn kein UDF-Treiber im Image verfügbar ist, verwendet cloud-init die Metadaten, die im Azure Instance Metadata Service verfügbar sind, um die VM bereitzustellen. Diese Option funktioniert nur für SSH-Schlüssel und Benutzerdaten. Um während der Bereitstellung ein Kennwort oder benutzerdefinierte Daten an einen virtuellen Computer zu übergeben, müssen Sie einen UDF-Treiber verwenden.

Bereitstellen von cloud-init-fähigen virtuellen Computern

Das Bereitstellen eines clout-init-fähigen virtuellen Computers besteht einfach aus dem Verweisen auf eine cloud-init-fähige Distribution während der Bereitstellung. Die Verwalter von Linux-Distributionen müssen cloud-init in ihren bei Azure veröffentlichten Basisimages aktivieren und integrieren. Nachdem Sie sich vergewissert haben, dass das Image, das Sie bereitstellen möchten, cloud-init unterstützt, können Sie es mit der Azure CLI bereitstellen.

Der erste Schritt der Bereitstellung dieses Images ist die Erstellung einer Ressourcengruppe mit dem Befehl az group create. Eine Azure-Ressourcengruppe ist ein logischer Container, in dem Azure-Ressourcen bereitgestellt und verwaltet werden.

Das folgende Beispiel erstellt eine Ressourcengruppe mit dem Namen myResourceGroup am Standort eastus.

az group create --name myResourceGroup --location eastus

Im nächsten Schritt erstellen Sie in der aktuellen Shell eine Datei namens cloud-init.txt und fügen die folgende Konfiguration ein. Erstellen Sie für dieses Beispiel die Datei in der Cloud Shell, nicht auf dem lokalen Computer. Sie können einen beliebigen Editor Ihrer Wahl verwenden. Geben Sie sensible-editor cloud-init.txt ein, um die Datei zu erstellen und eine Liste der verfügbaren Editoren anzuzeigen. Verwenden Sie den Editor Ihrer Wahl. Einige typische Auswahlmöglichkeiten sind nano, vim oder ed. Stellen Sie sicher, dass die gesamte Datei „cloud-init“ ordnungsgemäß kopiert wird, insbesondere die erste Zeile:

SLES Ubuntu RHEL
# cloud-config
package_upgrade: true
packages:
- apache2
# cloud-config
package_upgrade: true
packages:
- httpd
# cloud-config
package_upgrade: true
packages:
- httpd

Hinweis

„cloud-init“ weist mehrere Eingabetypen auf und gibt in der ersten Zeile von „customData/userData“ an, wie die Eingabe verarbeitet werden soll. Beispielsweise gibt #cloud-config an, dass der Inhalt als cloud-init-Konfiguration verarbeitet werden soll.

Beenden Sie die Datei, und speichern Sie die Datei entsprechend dem Editor. Überprüfen Sie den Dateinamen beim Beenden.

Erstellen Sie im letzten Schritt mit dem Befehl az vm create einen virtuellen Computer.

Das folgende Beispiel erstellt eine VM mit dem Namen ubuntu2204 und SSH-Schlüssel, falls sie nicht bereits an einem Standard-Schlüsselspeicherort vorhanden sind. Um einen bestimmten Satz von Schlüsseln zu verwenden, nutzen Sie die Option --ssh-key-value. Verwenden Sie den --custom-data-Parameter, um Ihre cloud-init-Konfigurationsdatei zu übergeben. Geben Sie den vollständigen Pfad zu der Konfigurationsdatei cloud-init.txt an, wenn Sie die Datei außerhalb Ihres vorhandenen Arbeitsverzeichnisses gespeichert haben.

az vm create \
  --resource-group myResourceGroup \
  --name ubuntu2204 \
  --image Canonical:UbuntuServer:22_04-lts:latest \
  --custom-data cloud-init.txt \
  --generate-ssh-keys 

Beim Erstellen des virtuellen Computers werden in der Azure CLI Informationen zu Ihrer Bereitstellung angezeigt. Notieren Sie sich den Wert von publicIpAddress. Diese Adresse wird verwendet, um auf den virtuellen Computer zuzugreifen. Es dauert einige Minuten, den virtuellen Computer zu erstellen, die Pakete zu installieren und die App zu starten. Es gibt Hintergrundaufgaben, die weiterhin ausgeführt werden, wenn Ihnen von der Azure CLI wieder eine Eingabeaufforderung angezeigt wird. Sie können per SSH eine Verbindung mit dem virtuellen Computer herstellen und anhand der Schritte im Abschnitt zur Problembehandlung die cloud-init-Protokolle anzeigen.

Sie können auch einen cloud-init-fähigen virtuellen Computer bereitstellen, indem Sie die Parameter in einer ARM-Vorlage übergeben.

Beheben von Problemen mit cloud-init

Nachdem der virtuelle Computer bereitgestellt wurde, durchläuft cloud-init alle Module und Skripts, die in --custom-data definiert sind, um den virtuellen Computer zu konfigurieren. Wenn Sie Fehler oder ausgelassene Einstellungen der Konfiguration korrigieren möchten, müssen Sie den Modulnamen (z.B. disk_setup oder runcmd) im cloud-init-Protokoll unter /var/log/cloud-init.log suchen.

Hinweis

Nicht jeder Modulfehler führt zu einer insgesamt fehlerhaften cloud-init-Konfiguration. Wenn Sie beispielsweise das Modul runcmd verwenden und das Skript einen Fehler verursacht, meldet cloud-init trotzdem eine erfolgreiche Bereitstellung, da das Modul runcmd ausgeführt wurde.

Weitere Informationen zur cloud-init-Protokollierung finden Sie in der cloud-init-Dokumentation.

Telemetrie

cloud-init sammelt Nutzungsdaten und sendet diese an Microsoft, damit wir unsere Produkte und Dienste verbessern können. Telemetrie wird nur während des Bereitstellungsprozesses (erster Start der VM) erfasst. Die gesammelten Daten helfen uns bei der Untersuchung von Bereitstellungsfehlern und der Überwachung von Leistung und Zuverlässigkeit. Die erfassten Daten enthalten keine Bezeichner (persönliche Bezeichner). Weitere Informationen finden Sie in unseren Datenschutzbestimmungen. Beispiele für erfasste Telemetriedaten (dies ist keine vollständige Liste): betriebssystembezogene Informationen (cloud-init-Version, Distributionsversion, Kernelversion), Leistungsmetriken der wesentlichen VM-Bereitstellungsaktionen (Zeit zum Abrufen der DHCP-Lease, Zeit zum Abrufen von Metadaten, die zum Konfigurieren der VM usw. erforderlich sind), cloud-init-Protokoll und dmesg-Protokoll.

Die Telemetriesammlung ist derzeit für die meisten unserer Marketplace-Images aktiviert, die cloud-init verwenden. Sie wird aktiviert, indem Sie den KVP-Telemetriebericht für cloud-init angeben. In den meisten Azure Marketplace-Images finden Sie diese Konfiguration in der Datei „/etc/cloud/cloud.cfg.d/10-azure-kvp.cfg“. Durch das Entfernen dieser Datei während der Imagevorbereitung wird die Telemetriesammlung für alle von diesem Image erstellten VMs deaktiviert.

Beispielinhalt von 10-azure-kvp.cfg

reporting:
  logging:
    type: log
  telemetry:
    type: hyperv

Nächste Schritte

Behandlung von Problemen mit cloud-init

cloud-init-Beispiele für Änderungen an der Konfiguration finden Sie in den folgenden Dokumenten: