Um Custom-CI (Custom Cloud-Init) Parameter in Proxmox VE verwenden zu können, müssen folgende Dinge beachtet werden:
Hinweis: wir haben Cloudinit in einem Einsteiger Webinar vorgestellt: https://www.youtube.com/watch?v=EKn7lTJrOW8&t
Proxmox VE benötigt für die Weitergabe der CI-Custom Informationen die jeweiligen Cloud-Init-Config-Files in einem definiertem Storage für Snippets. Dieser kann wie folgt angelegt werden:
root@PMX7:~# mkdir /mnt/pve/cephfs/cloud-init
In diesem Verzeichnis werden die Snippets für Cloud-Init-Konfigurationen angelegt werden. Danach muss man das Verzeichnis noch über die Web-UI als Datastore für Snippets hinzufügen.
Wichtig: bei Cluster-Systemen: damit die VMs mit Cloud-Init-Drive HA-fähig bleiben, müssen die Snippets auf einem zentralem Speicher wie z.B. cephfs abgelegt werden, damit diese je nach Ausfallszenario, auf jedem Node verfügbar sind für das Anstarten der VMs.
Ist die Custom-CI-Config auf einem lokalen Datastore, so kann die VM nicht auf anderen Servern angestartet werden, da der Config-Verweis somit ungültig wird.
Wichtiger Hinweis: sobald man Custom-CI Parameter definiert, greifen die Cloud-Init-Parameter aus der Proxmox VE Web-UI nicht mehr. Edit 27.06.2024: Es scheint wohl, dass man die beiden Optionen (Web-UI Parameter) und Custom-CI kombinieren kann. Wie sinnvoll das ist und ob sich das zukünftig ändern, kann man nicht sagen. Letztendlich Vorrang hat immer das Custom-CI File.
Die VM kann mittels mehrerer Cloud-Init-Files konfiguriert werden: https://pve.proxmox.com/wiki/Cloud-Init_Support#_cloud_init_specific_options
meta=<volume> Specify a custom file containing all meta data passed to the VM via" ." cloud-init. This is provider specific meaning configdrive2 and nocloud differ. network=<volume> To pass a custom file containing all network data to the VM via cloud-init. user=<volume> To pass a custom file containing all user data to the VM via cloud-init. vendor=<volume> To pass a custom file containing all vendor data to the VM via cloud-init
Diese legt man nun nach belieben an. Es folgt eine Beispielkonfiguration:
das Vendor-File wird nur beim First-Boot der neuen VM-Ressource ausgeführt und berücksichtigt.
root@PMX7:/mnt/pve/cephfs/cloud-init/snippets# nano ci-vendor-90000.yml #cloud-config runcmd: - apt update - apt install -y qemu-guest-agent - systemctl start qemu-guest-agent - reboot
das Network-File definiert, die Netzwerkkonfiguration des Systems. Weitere Details findet man in der Cloud-Init Dokumentation: https://cloudinit.readthedocs.io/en/23.4.1/reference/network-config-format-v2.html
Als Beispiel habe ich eine Konfiguration von 2 Netzwerkadaptern genommen inklusive manueller statischer Routen.
root@PMX7:/mnt/pve/cephfs/cloud-init/snippets# cat ci-network-90000.yml # network: version: 2 ethernets: ens18: dhcp4: true ens19: dhcp4: no addresses: - 192.168.99.10/24 nameservers: addresses: [192.168.110.61] routes: - to: 192.168.99.0/24 via: 192.168.99.1 metric: 3
das User-File definiert sonstige Einstellungen wie z.B. den Hostnamen, den Default-User, SSH-Keys oder die Installation von Paketen.
root@PMX7:/mnt/pve/cephfs/cloud-init/snippets# cat ci-user-90000.yml #cloud-config hostname: ubuntu2404-ci manage_etc_hosts: true user: tk ssh_authorized_keys: - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQD= tkag\jsterr@Standard-150 - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC= tkag\jsterr@Standard-020 chpasswd: expire: False users: - default locale: de_DE.UTF-8 timezone: Europe/Berlin runcmd: - echo "Hello World Test" > test.txt packages: - qemu-guest-agent - docker.io
nachdem man die gewünschten Files erstellt hat, kann man diese nun mittels Kommandozeile der gewünschten VM mitgeben:
root@PMX7:/mnt/pve/cephfs/cloud-init/snippets# qm set 90000 --cicustom "user=ci-snippets:snippets/ci-user-90000.yml,vendor=ci-snippets:snippets/ci-vendor-90000.yml,network=ci-snippets:snippets/ci-network-90000.yml"
nach dem Setzen der Konfiguration, startet man die VM und diese verwendet dann anschließend die oben referenzierte custom Cloud-Init-Konfiguration, welche in unserem Fall folgendes erledigt:
Autor: Jonas Sterr Ich beschäftige mich mit den Themen Software Defined Storage, Proxmox Virtualisierung auf Basis von KVM, QEMU & Ceph im Produktmanagement der Thomas-Krenn.AG in Freyung. Proxmox ist meine absolute Leidenschaft und ich freue mich gerne über Kontaktanfragen und einen Austausch auf LinkedIn.
|