Fernwartung Download starten

Proxmox Cloud-Init: VMs automatisch provisionieren

ProxmoxCloud-InitVirtualisierungAutomatisierung
Proxmox Cloud-Init: VMs automatisch provisionieren

Wer regelmäßig neue virtuelle Maschinen in Proxmox VE anlegt, kennt das Problem: Betriebssystem installieren, Benutzer anlegen, Netzwerk konfigurieren, SSH-Keys hinterlegen — bei jeder VM dieselben manuellen Schritte. Cloud-Init löst dieses Problem, indem es VMs beim ersten Start automatisch konfiguriert. In Kombination mit Proxmox-Templates lassen sich neue Systeme in unter einer Minute ausrollen — vollständig konfiguriert und sofort einsatzbereit.

Was ist Cloud-Init?

Cloud-Init ist ein Industriestandard für die automatische Ersteinrichtung von virtuellen Maschinen. Ursprünglich für Cloud-Umgebungen wie AWS und OpenStack entwickelt, ist Cloud-Init heute in nahezu allen Linux-Cloud-Images vorinstalliert. Beim ersten Boot liest der Cloud-Init-Dienst Konfigurationsdaten aus einer angehängten Datenquelle und führt automatisch folgende Schritte aus:

  • Hostname setzen
  • Benutzer anlegen und Passwörter konfigurieren
  • SSH-Public-Keys hinterlegen
  • Netzwerk konfigurieren (statische IP oder DHCP)
  • Pakete installieren und Befehle ausführen

Proxmox VE unterstützt Cloud-Init nativ und bietet eine eigene Datenquelle, die sich direkt über die Weboberfläche oder die CLI konfigurieren lässt.

Template-VM mit Cloud-Init erstellen

Die Basis für automatisierte VM-Provisionierung ist eine Template-VM mit einem Cloud-fähigen Image. Die meisten Linux-Distributionen bieten fertige Cloud-Images an, die Cloud-Init bereits enthalten.

Cloud-Image herunterladen

# Ubuntu 24.04 Cloud-Image herunterladen
wget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img

# Alternativ: Debian 12 Cloud-Image
wget https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-genericcloud-amd64.qcow2

VM erstellen und Image importieren

# Neue VM erstellen (ID 9000 als Template-Konvention)
qm create 9000 --name ubuntu-cloud-template --memory 2048 --cores 2 \
  --net0 virtio,bridge=vmbr0 --ostype l26 --scsihw virtio-scsi-single

# Cloud-Image als Disk importieren
qm set 9000 --scsi0 local-lvm:0,import-from=/root/noble-server-cloudimg-amd64.img

# Cloud-Init-Laufwerk hinzufügen
qm set 9000 --ide2 local-lvm:cloudinit

# Boot-Reihenfolge auf die SCSI-Disk setzen
qm set 9000 --boot order=scsi0

# Serial Console für Cloud-Images aktivieren
qm set 9000 --serial0 socket --vga serial0

Das Cloud-Init-Laufwerk (ide2) ist ein spezielles ISO-Image, das Proxmox VE bei jedem Start der VM mit den aktuellen Konfigurationsdaten neu generiert.

Cloud-Init-Parameter konfigurieren

# Standardbenutzer und SSH-Key konfigurieren
qm set 9000 --ciuser admin --cipassword $(openssl passwd -6 'SicheresPasswort')
qm set 9000 --sshkeys ~/.ssh/authorized_keys

# Netzwerk konfigurieren (statische IP)
qm set 9000 --ipconfig0 ip=dhcp

# DNS-Server setzen
qm set 9000 --nameserver 1.1.1.1 --searchdomain example.com

VM in Template umwandeln

# VM in ein Template konvertieren
qm template 9000

Nach der Konvertierung kann die VM nicht mehr gestartet oder verändert werden — sie dient ausschließlich als Vorlage für neue Klone.

VMs aus dem Template klonen

Aus dem Template lassen sich in Sekunden neue VMs erstellen:

# Full Clone erstellen
qm clone 9000 110 --name webserver-01 --full

# Cloud-Init-Parameter für den Klon anpassen
qm set 110 --ipconfig0 ip=10.0.10.110/24,gw=10.0.10.1
qm set 110 --nameserver 10.0.10.1
qm set 110 --ciuser deploy

# VM starten
qm start 110

Die VM bootet, Cloud-Init erkennt die Konfiguration und richtet Hostname, Netzwerk, Benutzer und SSH-Keys innerhalb weniger Sekunden ein. Anschließend ist die VM per SSH erreichbar — ganz ohne manuelle Interaktion.

Provisionierung mit Skripten automatisieren

Für die Bereitstellung mehrerer VMs bietet sich ein einfaches Bash-Skript an:

#!/bin/bash
TEMPLATE_ID=9000
BASE_IP="10.0.10"
GATEWAY="10.0.10.1"
SSH_USER="deploy"

declare -A VMS=(
  [201]="app-server-01"
  [202]="app-server-02"
  [203]="db-server-01"
  [204]="monitoring-01"
)

for VMID in "${!VMS[@]}"; do
  NAME="${VMS[$VMID]}"
  echo "Erstelle VM $VMID ($NAME)..."
  qm clone $TEMPLATE_ID $VMID --name "$NAME" --full
  qm set $VMID --ipconfig0 "ip=${BASE_IP}.${VMID}/24,gw=${GATEWAY}"
  qm set $VMID --ciuser "$SSH_USER"
  qm resize $VMID scsi0 +18G
  qm start $VMID
  echo "VM $NAME gestartet."
done

Mit diesem Skript werden vier VMs in wenigen Minuten erstellt, konfiguriert und gestartet. In Kombination mit Ansible oder anderen Konfigurationsmanagement-Tools lässt sich anschließend die Software-Konfiguration automatisieren.

Vergleich: Manuelle Installation vs. Cloud-Init vs. Terraform

MerkmalManuelle InstallationCloud-Init TemplateTerraform + Cloud-Init
Bereitstellungszeit30–60 Minuten1–2 Minuten1–2 Minuten
ReproduzierbarkeitGering (dokumentationsabhängig)Hoch (Template-basiert)Sehr hoch (deklarativ, versioniert)
LernkurveNiedrigMittelHoch
SkalierungManuell pro VMSkriptbasiertVollautomatisch
Netzwerk-KonfigurationManuell im InstallerAutomatisch per Cloud-InitAutomatisch per Provider
Drift-ErkennungKeineKeineIntegriert
Ideal fürEinzelne Test-VMsKMU mit 10–50 VMsGroße Umgebungen, IaC-Workflows

Für die meisten mittelständischen Unternehmen bietet Cloud-Init mit Templates das beste Verhältnis aus Aufwand und Nutzen. Terraform lohnt sich, wenn Infrastructure-as-Code-Workflows bereits etabliert sind oder Hunderte VMs verwaltet werden.

Häufige Fehler vermeiden

Cloud-Init läuft nicht: Stellen Sie sicher, dass das heruntergeladene Image tatsächlich Cloud-Init enthält. Standard-ISO-Installationen enthalten Cloud-Init nicht — verwenden Sie ausschließlich die offiziellen Cloud-Images der Distribution.

Netzwerk nicht erreichbar nach dem Klonen: Wenn Sie vergessen, --ipconfig0 für den Klon zu setzen, erhält die VM keine IP-Adresse. Cloud-Init konfiguriert das Netzwerk nur, wenn eine explizite Konfiguration (DHCP oder statisch) hinterlegt ist.

Änderungen greifen nicht: Cloud-Init läuft standardmäßig nur beim ersten Boot. Wenn Sie Cloud-Init-Parameter nach dem ersten Start ändern, müssen Sie Cloud-Init innerhalb der VM zurücksetzen: cloud-init clean --reboot.

Tipps für die Praxis

Template-Pflege: Aktualisieren Sie Ihre Cloud-Images regelmäßig. Erstellen Sie ein neues Template mit dem aktuellen Image und löschen Sie das alte — so enthalten neue VMs immer die neuesten Sicherheits-Updates.

Disk-Größe anpassen: Cloud-Images haben typischerweise nur 2–3 GB Disk-Größe. Verwenden Sie qm resize nach dem Klonen, um die Disk zu vergrößern. Cloud-Init sorgt dafür, dass die Partition beim ersten Boot automatisch erweitert wird.

Mehrere Templates: Erstellen Sie separate Templates für verschiedene Einsatzzwecke — ein minimales Template für Container-Hosts, ein umfangreicheres für Applikationsserver. Verwenden Sie eine konsistente Nummerierung (z. B. 9000–9099 für Templates).

Monitoring mit DATAZONE Control

In Umgebungen mit Dutzenden automatisch provisionierter VMs verliert man schnell den Überblick. DATAZONE Control erfasst neue VMs automatisch und integriert sie in das zentrale Monitoring: CPU, RAM, Disk, Netzwerk und Dienstverfügbarkeit werden sofort überwacht. Alerts bei Ressourcenengpässen oder ausgefallenen Services sorgen dafür, dass Probleme erkannt werden, bevor sie den Betrieb beeinträchtigen — unabhängig davon, ob fünf oder fünfhundert VMs laufen.


Sie möchten VM-Provisionierung in Ihrer Proxmox-Umgebung automatisieren? Kontaktieren Sie uns — wir unterstützen Sie bei der Einrichtung von Cloud-Init-Templates und der Automatisierung Ihrer Proxmox-Infrastruktur.

Mehr zu diesen Themen:

IT-Beratung gewünscht?

Kontaktieren Sie uns für eine unverbindliche Beratung zu Proxmox, OPNsense, TrueNAS und mehr.

Jetzt Kontakt aufnehmen