Proxmox VM Template & Cloud-Init auto install
Voraussetzungen
- Proxmox VE ≥ 6.x
- Linux-Cloud-Image (Ubuntu, Debian, Alma, Rocky, …)
- SSH-Key auf deinem Client
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.
Im Anschluss muss das Hochgeladene image nur noch Hard Disk importiert werden.
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:
- 👤 User:
ubuntu - 🔐 SSH Public Key einfügen
- 🌐 IP-Config:
- DHCP oder
ip=192.168.1.50/24,gw=192.168.1.1
- 🖥 DNS optional
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
Hier muss nur im Content Menü Snippets angeklickt werden und dann nur noch mit OK bestätigt werden.
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:
- Erste Zeile muss
#cloud-configsein - YAML korrekt eingerückt!
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.