# 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).
- Host: Proxmox erstellt eine ISO-Datei mit Metadaten (User, Netz, SSH-Keys).
- Gast: Beim Booten erkennt der Cloud-Init Dienst das virtuelle CD-Laufwerk.
- 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.
- Wichtig: Stellen Sie den Disk-Controller auf SCSI.
# 3. Deep Dive: User Data & SSH Keys
Passwortloser Zugriff ab Sekunde Null.
Konfigurieren Sie die Parameter unter VM -> Cloud-Init:
- User:
admin(Vermeiden Sieubuntuoderdebian). - Password: (Optional, SSH-Key ist sicherer).
- SSH Public Key: Fügen Sie Ihren Team-Key ein.
- IP Config:
StaticoderDHCP.
# 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.
- Aktion: Installieren Sie automatisch Pakete wie
htopoderqemu-guest-agent.
#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
-
Symptom: Cloud-Init Einstellungen werden ignoriert.
- Ursache: Das installierte OS im Gast hat kein
cloud-initPaket vorinstalliert (Standard-ISOs haben dies nicht!). - Lösung: Nutzen Sie dedizierte Cloud-Images vom Hersteller.
- Ursache: Das installierte OS im Gast hat kein
-
Symptom: IP-Adresse wird nicht übernommen.
- Ursache: Das Netzwerk-Interface im Gast heißt anders als erwartet (z.B.
eth0vsens18). - Fix: Cloud-Init modernisiert dies meist automatisch, im Zweifel Interface-Namen im Template fixieren.
- Ursache: Das Netzwerk-Interface im Gast heißt anders als erwartet (z.B.
-
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.
- Empfehlung: Bauen Sie Ihre gesamte Infrastruktur auf Cloud-Init Templates auf.
- Wichtig: Nutzen Sie die DNS-01 Validierung für Ihre Automatisierung, um auch im isolierten Backend IPs und Namen korrekt setzen zu können.
# 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 |