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.
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.
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.
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.
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.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.
- In dieser Phase können Sie Skripts ausführen, indem Sie sie in den Verzeichnissen unter