# Proxmox Cloud-Init: Automatisierte VM-Konfiguration ohne Handarbeit

TL;DR / Management Summary Das manuelle Einloggen in eine neue VM, um IPs zu setzen und User anzulegen, skaliert nicht. Cloud-Init ist der Industriestandard für das automatisierte Provisioning von Cloud-Instanzen. In Proxmox nutzen wir eine virtuelle CD-ROM (Cloud-Init Drive), um Konfigurationsdaten beim ersten Start in den Gast zu injizieren. Ein Senior Admin nutzt Cloud-Init in Kombination mit VM-Templates, um fertige, personalisierte Server innerhalb von Sekunden auszurollen.


# 1. Einführung & Funktionsweise

Die Konfiguration per ‘Sidecar’.

Cloud-Init ist ein Dienst, der innerhalb des Gast-Betriebssystems läuft (Standard bei fast allen Cloud-Images wie Ubuntu Cloud Image, Debian Generic Cloud).

  1. Host: Proxmox erstellt eine ISO-Datei mit Metadaten (User, Netz, SSH-Keys).
  2. Gast: Beim Booten erkennt der Cloud-Init Dienst das virtuelle CD-Laufwerk.
  3. Action: Er wendet die IP an, erstellt den Admin-User und hinterlegt die SSH-Keys.

# 2. Einrichtung in der Praxis

Das Cloud-Image vorbereiten.

# Schritt 1: Cloud-Image laden

Nutzen Sie fertige Cloud-Images statt Standard-ISOs:

wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img

# Schritt 2: VM erstellen & Image importieren

# VM erstellen
qm create 900 --memory 2048 --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci
# Disk importieren
qm importdisk 900 jammy-server-cloudimg-amd64.img local-zfs
# Disk zuweisen
qm set 900 --scsi0 local-zfs:vm-900-disk-0

# Schritt 3: Cloud-Init Drive hinzufügen

GUI -> VM -> Hardware -> Add -> Cloud-Init Drive.


# 3. Deep Dive: User Data & SSH Keys

Passwortloser Zugriff ab Sekunde Null.

Konfigurieren Sie die Parameter unter VM -> Cloud-Init:


# 4. Day-2 Operations: Custom Scripts (User-Data)

Software beim Booten installieren.

In den Cloud-Init Optionen können Sie ein Custom Script (YAML) hinterlegen.

#cloud-config
package_upgrade: true
packages:
  - qemu-guest-agent
  - git
  - curl
runcmd:
  - systemctl start qemu-guest-agent

# 5. Troubleshooting & “War Stories”

Wenn die Injektion fehlschlägt.

# Top 3 Fehlerbilder

  1. Symptom: Cloud-Init Einstellungen werden ignoriert.

    • Ursache: Das installierte OS im Gast hat kein cloud-init Paket vorinstalliert (Standard-ISOs haben dies nicht!).
    • Lösung: Nutzen Sie dedizierte Cloud-Images vom Hersteller.
  2. Symptom: IP-Adresse wird nicht übernommen.

    • Ursache: Das Netzwerk-Interface im Gast heißt anders als erwartet (z.B. eth0 vs ens18).
    • Fix: Cloud-Init modernisiert dies meist automatisch, im Zweifel Interface-Namen im Template fixieren.
  3. Symptom: Passwort-Login geht nicht.

    • Ursache: Cloud-Init deaktiviert aus Sicherheitsgründen oft den Passwort-Login, wenn ein SSH-Key vorhanden ist.

# “War Story”: Der “Double-User” Konflikt

Ein Admin klonierte eine VM von einem Cloud-Init Template. Er änderte den User in der Proxmox-GUI von admin auf webmaster. Das Ergebnis: Die VM hatte zwei User. Der ursprüngliche User aus dem Image und der neue via Cloud-Init. Das führte zu Verwirrung bei den Berechtigungen und beim Deployment. Lehre: Nutzen Sie Cloud-Init konsequent als einzige Quelle für die Userverwaltung beim Deployment. Ändern Sie niemals User innerhalb des Templates manuell.


# 6. Monitoring & Reporting

Status der Erst-Einrichtung.

# Cloud-Init Logs (im Gast)

Wenn etwas nicht passt, schauen Sie in der VM nach:

tail -f /var/log/cloud-init-output.log

# 7. Fazit & Empfehlung

Cloud-Init ist das Tor zum DevOps-Himmel.


# Anhang: Cheatsheet (qm cloudinit)

Aufgabe Befehl
Config generieren qm cloudinit dump <vmid>
Cloud-Init Refresh qm cloudinit update <vmid>
Meta-Daten sehen qm config <vmid> --cloudinit

# Referenzen