Proxmox VM Template & Cloud-Init auto install

Voraussetzungen

1. Cloud-Image herunterladen

wget <https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img>

💡 Wichtig: Normale ISOs funktionieren nicht, nur Cloud Images.

Weitere Ubuntu Cloud Images gibts hier: https://cloud-images.ubuntu.com/

2. VM als Cloud-Init-Template anlegen

qm create 9000 \\
  --name ubuntu-cloudinit \\
  --memory 2048 \\
  --cores 2 \\
  --net0 virtio,bridge=vmbr0

Disk importieren:

qm importdisk 9000 noble-server-cloudimg-amd64.img local-lvm

Wichtige Information: Bei Proxmox version 9.1.4 und neuer gibt es einen bug wenn man den VM Speicher als LVM-Thin formatiert hat. In dem Fall muss die Image Datei unter local (pve) → Import → Upload hochgeladen werden.

3360-1658-max.png

Im Anschluss muss das Hochgeladene image nur noch Hard Disk importiert werden.

300-632-max.png

Disk & Boot setzen:

qm set 9000 \\
  --scsihw virtio-scsi-pci \\
  --scsi0 local-lvm:vm-9000-disk-0 \\
  --boot c \\
  --bootdisk scsi0

Cloud-Init aktivieren:

qm set 9000 --ide2 local-lvm:cloudinit
qm set 9000 --serial0 socket --vga serial0

Cloud-Init konfigurieren (Proxmox GUI)

Dies ist nur erforderlich wenn man nicht mit Snippets arbeitet

Wenn man aber mit Snippets arbeitet ist es ratsam im Template in IP-Config die Konfiguration auf DHCP zu stellen.

Wenn trotzdem eine statische IP für einen Dienst gewünscht wird, kann man dies auch über das Snippet konfigurieren.

In der VM unter Cloud-Init:

VM zum Template machen

qm template 9000

🎉 Fertig! Das Golden Image ist bereit.

Snippets erstellen und einbinden

Snippet Speicherort einstellen

Bevor wir Snippets verwenden können, muss erst einmal das Speichern von Snippets erlaubt werden.

Dafür im Proxmox Webinterface unter dem Punkt Datacenter → Storage → local → Edit

3360-1650-max.png

Hier muss nur im Content Menü Snippets angeklickt werden und dann nur noch mit OK bestätigt werden.

1320-724-max.png

Nun muss über die Proxmox shell nur noch die Datei am Richtigen Ort abgelegt werden

Snippets liegen dann hier:

/var/lib/vz/snippets/

user-data Datei erstellen

Beispiel:

nano /var/lib/vz/snippets/user-data-web.yaml

Inhalt:

#cloud-config

hostname: web01

users:
  - name: devops
    shell: /bin/bash
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    ssh_authorized_keys:
      - ssh-ed25519 AAAA...DEINKEY

package_update: true
packages:
  - nginx
  - curl

runcmd:
  - systemctl enable nginx
  - systemctl start nginx
  - echo "Provisioned by cloud-init" > /etc/motd

Wichtig:

VM klonen (vom Template)

qm clone 9000 101 --name web01

Custom user-data anhängen

qm set 101 --cicustom "user=local:snippets/user-data-web.yaml"

VM Starten

qm start 101

Fertig 🎉

Beim ersten Boot wird die Config ausgeführt.

Erweiterte Beispiele

Weitere Beispiele habe ich auf meiner Cloud liegen.

Proxmox


Revision #5
Created 2026-02-27 11:19:38 UTC by 7chatban
Updated 2026-03-06 10:49:15 UTC by 7chatban