Tiefere Einblicke in cloud-init

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

Um sich tiefergehendes Wissen zu cloud-init anzueignen oder Problembehandlung für cloud-init auf einer tieferen Ebene auszuführen, müssen Sie verstehen, wie cloud-init funktioniert. In diesem Dokument werden die wichtigen Teile hervorgehoben, und es werden die Azure-Besonderheiten erläutert.

Ist cloud-init in einem generalisierten Image enthalten und wird eine VM mit diesem Image erstellt, durchläuft cloud-init beim Erststart fünf Phasen und verarbeitet dabei Konfigurationen. Diese Phasen zeigen Ihnen, an welchem Punkt cloud-init Konfigurationen anwendet.

Grundlegendes zur cloud-init-Konfiguration

Beim Konfigurieren eines virtuellen Computers für die Ausführung auf einer Plattform wird cloud-init verwendet, um mehrere Konfigurationen anzuwenden. Sie interagieren in erster Linie mit Konfigurationen vom Typ User data (customData). Dabei werden mehrere Formate unterstützt. Weitere Informationen finden Sie in der Dokumentation zu Benutzerdatenformaten und cloud-init 21.2. Sie haben auch die Möglichkeit, Skripts („/var/lib/cloud/scripts“) für andere Konfigurationen hinzuzufügen und auszuführen.

Vorkonfigurierte Azure Marketplace-Images

Einige Konfigurationen sind bereits in Azure Marketplace-Images integriert, die mit cloud-init bereitgestellt werden.

  • Clouddatenquelle: cloud-init enthält Code, der mit Cloudplattformen interagieren kann. Dieser Code wird als „Datenquellen“ (Datasources) bezeichnet. Wenn eine VM aus einem cloud-init-image in Azure erstellt wird, lädt cloud-init die Azure-Datenquelle, die mit den Azure-Metadatenendpunkten interagiert, um die VM-spezifische Konfiguration abzurufen.

  • Laufzeitkonfiguration („/run/cloud-init“).

  • Imagekonfiguration (/etc/cloud), z. B. /etc/cloud/cloud.cfg, /etc/cloud/cloud.cfg.d/*.cfg. Ein Beispiel dafür, wo diese Konfiguration in Azure verwendet wird: Üblicherweise verfügen Linux-Betriebssystemimages mit cloud-init über eine Azure-Datenquellenanweisung, in der cloud-init mitgeteilt wird, welche Datenquelle verwendet werden soll. Diese Konfiguration kann cloud-init Zeit sparen:

    sudo cat /etc/cloud/cloud.cfg.d/90_dpkg.cfg
    
    # to update this file, run dpkg-reconfigure cloud-init
    datasource_list: [ Azure ]
    

Cloud-init-Startphasen (Verarbeitungskonfiguration)

Wenn Sie VMs mit cloud-init bereitstellen, gibt es fünf Startphasen für die Konfiguration. Die Ausgabe dieser Phasen ist in den Protokollen sichtbar.

  1. Generator-Phase: Der cloud-init-Generator systemd wird gestartet. Dieser ermittelt dann, ob cloud-init in die Startziele einbezogen werden soll, und ist dies der Fall, aktiviert er cloud-init.

  2. Lokale cloud-init-Phase: In dieser Phase sucht cloud-init nach der lokalen Datenquelle „Azure“. Dadurch wird es cloud-init ermöglicht, eine Verbindung mit Azure herzustellen und eine Netzwerkkonfiguration anzuwenden, einschließlich Fallback.

  3. Cloud-init-Phase Network: Das Netzwerk muss funktionsbereit sein, und die NIC- und Routingtabelleninformationen müssen generiert werden. In dieser Phase werden die in cloud_init_modules aufgeführten Module in /etc/cloud/cloud.cfg ausgeführt. Die VM wird in Azure eingebunden, der kurzlebige Datenträger wird formatiert, der Hostname wird festgelegt, und es werden weitere Aufgaben ausgeführt.

    Im Folgenden werden einige cloud_init_modules aufgeführt:

    - migrator
    - seed_random
    - bootcmd
    - write-files
    - growpart
    - resizefs
    - disk_setup
    - mounts
    - set_hostname
    - update_hostname
    - ssh
    

    Nach dieser Phase sendet cloud-init ein Signal an die Azure-Plattform, dass die VM erfolgreich bereitgestellt wurde. Bei einigen Modulen sind möglicherweise Fehler aufgetreten, nicht alle Modulfehler führen jedoch automatisch zu einem Bereitstellungsfehler.

  4. Cloud-init-Konfigurationsphase: In dieser Phase werden die Module in cloud_config_modules ausgeführt, die in „/etc/cloud/cloud.cfg“ definiert sind und aufgeführt werden.

  5. Cloud-init-Abschlussphase: In dieser letzten Phase werden die Module in cloud_final_modules ausgeführt, die in „/etc/cloud/cloud.cfg“ aufgeführt werden. Hier werden Module ausgeführt, die spät im Startprozess ausgeführt werden müssen, z. B. Paketinstallationen, werden Skripts ausgeführt usw.

    • In dieser Phase können Sie Skripts ausführen, indem Sie sie in den Verzeichnissen unter /var/lib/cloud/scripts platzieren:
      • per-boot: Skripts in diesem Verzeichnis werden bei jedem Neustart ausgeführt.
      • per-instance: Skripts in diesem Verzeichnis werden ausgeführt, wenn eine neue Instanz erstmalig gestartet wird.
      • per-once: Skripts in diesem Verzeichnis werden nur ein Mal ausgeführt.

Nächste Schritte

Problembehandlung bei VM-Bereitstellung mit cloud-init