Proxmox Cluster - GUI und Konsole
Proxmox Cluster - GUI und Konsole
Alles, was die Proxmox-GUI macht, läuft über die REST-API (/api2/json). Die Konsolenwerkzeuge (pvecm, qm, pct, pvesm, pveum, ha-manager, vzdump) und pvesh sprechen dieselbe API bzw. dieselbe Konfiguration in /etc/pve an. Jeder Schritt unten zeigt deshalb den Weg in der GUI und den Befehl auf der Konsole.
Die GUI-Pfade sind in der englischen Oberfläche angegeben.
Laborannahmen
| Node | IP (Cluster-Netz) |
|---|---|
| pve1 | 192.168.10.11 |
| pve2 | 192.168.10.12 |
| pve3 | 192.168.10.13 |
- Shared Storage (NFS): 192.168.10.5:/srv/nfs/pve
- Namen und Adressen an das eigene Labor anpassen
Vorbereitung auf allen Nodes
- Hostname prüfen (GUI
- Node -> System -> DNS / Hosts)
- hostnamectl
- Namensauflösung der Nodes eintragen
- vim /etc/hosts
192.168.10.11 pve1.kurs.int pve1 192.168.10.12 pve2.kurs.int pve2 192.168.10.13 pve3.kurs.int pve3
- Erreichbarkeit testen
- ping -c2 pve2
- Zeit muss synchron sein (GUI
- Node -> System -> Time)
- chronyc tracking
- Versionen sollten gleich sein (GUI
- Node -> Summary)
- pveversion
Wichtig: Ein Node, der einem Cluster beitritt, darf keine VMs oder Container haben. Die VMIDs müssen clusterweit eindeutig sein.
Cluster aufbauen
Cluster erstellen (nur auf pve1)
- GUI
- Datacenter -> Cluster -> Create Cluster
- pvecm create kurs --link0 192.168.10.11
- Status anzeigen (GUI
- Datacenter -> Cluster)
- pvecm status
Nodes hinzufügen (auf pve2 und pve3)
- GUI
- auf pve1 Datacenter -> Cluster -> Join Information kopieren, auf pve2 Datacenter -> Cluster -> Join Cluster
- pvecm add 192.168.10.11 --link0 192.168.10.12
Der Befehl fragt nach dem root-Passwort von pve1 und nach der Bestätigung des Fingerprints. Auf pve3 entsprechend mit --link0 192.168.10.13.
Cluster kontrollieren
- Mitglieder anzeigen
- pvecm nodes
- Quorum und Votes anzeigen
- pvecm status
- Corosync-Konfiguration ansehen
- cat /etc/pve/corosync.conf
- Logs live mitlesen
- journalctl -u corosync -u pve-cluster -f
- Clusterdateisystem
- Inhalt ist auf allen Nodes identisch
- ls -l /etc/pve/nodes/
Storage
Storage anzeigen
- GUI
- Datacenter -> Storage
- pvesm status
- cat /etc/pve/storage.cfg
NFS-Storage hinzufügen
- GUI
- Datacenter -> Storage -> Add -> NFS
- pvesm add nfs nfs-kurs --server 192.168.10.5 --export /srv/nfs/pve --content images,rootdir,iso,vztmpl,backup
- Inhalt eines Storage anzeigen
- pvesm list nfs-kurs
Storage entfernen
- pvesm remove nfs-kurs
Virtuelle Maschinen
ISO hochladen
- GUI
- Storage -> ISO Images -> Upload oder Download from URL
Auf der Konsole wird das ISO einfach in das Verzeichnis des Storage kopiert:
- cp debian-13-netinst.iso /mnt/pve/nfs-kurs/template/iso/
VM anlegen
- GUI
- Create VM
qm create 100 --name deb100 --ostype l26 \
--memory 2048 --cores 2 \
--scsihw virtio-scsi-single --scsi0 nfs-kurs:16 \
--ide2 nfs-kurs:iso/debian-13-netinst.iso,media=cdrom \
--net0 virtio,bridge=vmbr0 \
--boot 'order=scsi0;ide2'
VM verwalten
- Alle VMs des Nodes anzeigen
- qm list
- Alle VMs und Container im Cluster anzeigen (GUI
- Datacenter -> Search)
- pvesh get /cluster/resources --type vm
- Starten, sauber herunterfahren, hart stoppen
- qm start 100
- qm shutdown 100
- qm stop 100
- Konfiguration anzeigen (GUI
- VM -> Hardware / Options)
- qm config 100
- cat /etc/pve/qemu-server/100.conf
- Hardware ändern
- qm set 100 --memory 4096 --cores 4
- Platte vergrößern (GUI
- VM -> Hardware -> Disk Action -> Resize)
- qm disk resize 100 scsi0 +4G
- Konsole der VM (serielle Konsole muss in der VM aktiv sein)
- qm terminal 100
- VM löschen
- qm destroy 100 --purge
Snapshots
- GUI
- VM -> Snapshots
- qm snapshot 100 vor-update --description "Stand vor dem Update"
- qm listsnapshot 100
- qm rollback 100 vor-update
- qm delsnapshot 100 vor-update
Templates und Klone
- In Template umwandeln (GUI
- rechte Maustaste -> Convert to template)
- qm template 100
- Vollen Klon erzeugen (GUI
- rechte Maustaste -> Clone)
- qm clone 100 101 --name deb101 --full
- Linked Clone
- qm clone 100 102 --name deb102
Container
Templates holen
- GUI
- Storage -> CT Templates -> Templates
- pveam update
- pveam available --section system | grep debian
- pveam download nfs-kurs debian-13-standard_XXX_amd64.tar.zst
- pveam list nfs-kurs
Container anlegen
- GUI
- Create CT
pct create 200 nfs-kurs:vztmpl/debian-13-standard_XXX_amd64.tar.zst \
--hostname ct200 --unprivileged 1 \
--memory 512 --cores 1 \
--rootfs nfs-kurs:8 \
--net0 name=eth0,bridge=vmbr0,ip=dhcp \
--password
Container verwalten
- pct list
- pct start 200
- pct shutdown 200
- pct config 200
- Shell im Container (GUI
- CT -> Console)
- pct enter 200
- Befehl im Container ausführen
- pct exec 200 -- ip a
- pct destroy 200 --purge
Migration
- VM live migrieren (GUI
- VM -> Migrate, Mode online)
- qm migrate 100 pve2 --online
- VM mit lokalen Platten migrieren
- qm migrate 100 pve2 --online --with-local-disks
- Container migrieren (Container können nicht live migriert werden)
- pct migrate 200 pve2 --restart
Backup und Restore
Einmaliges Backup
- GUI
- VM -> Backup -> Backup now
- vzdump 100 --storage nfs-kurs --mode snapshot --compress zstd
- vzdump 200 --storage nfs-kurs --mode snapshot --compress zstd
Backup-Job anlegen
- GUI
- Datacenter -> Backup -> Add
- pvesh create /cluster/backup --schedule "sun 01:00" --storage nfs-kurs --vmid 100,200 --mode snapshot --compress zstd
- pvesh get /cluster/backup
- cat /etc/pve/jobs.cfg
Restore
- GUI
- Storage -> Backups -> Restore
- ls /mnt/pve/nfs-kurs/dump/
- qmrestore /mnt/pve/nfs-kurs/dump/vzdump-qemu-100-XXX.vma.zst 110 --storage nfs-kurs
- pct restore 210 /mnt/pve/nfs-kurs/dump/vzdump-lxc-200-XXX.tar.zst --storage nfs-kurs
Hochverfügbarkeit (HA)
HA setzt Quorum und Shared Storage voraus. Die VM muss auf dem NFS-Storage liegen.
Ressource in HA aufnehmen
- GUI
- Datacenter -> HA -> Resources -> Add
- ha-manager add vm:100 --state started --max_restart 1 --max_relocate 1
- Status anzeigen (GUI
- Datacenter -> HA)
- ha-manager status
- ha-manager config
Bevorzugte Nodes festlegen
- Proxmox VE 8 (GUI
- Datacenter -> HA -> Groups)
- ha-manager groupadd kursgruppe --nodes "pve1:2,pve2:1"
- ha-manager set vm:100 --group kursgruppe
- Proxmox VE 9 (GUI
- Datacenter -> HA -> Affinity Rules)
- ha-manager rules add node-affinity bevorzugt-pve1 --resources vm:100 --nodes "pve1:2,pve2:1"
- ha-manager rules config
HA-Ressource bedienen
- Migration über den HA-Manager (bei HA-Ressourcen nicht qm migrate verwenden)
- ha-manager crm-command migrate vm:100 pve2
- Ressource aus HA entfernen
- ha-manager remove vm:100
Ausfalltest
- Auf dem Node, auf dem vm
- 100 läuft, hart ausschalten
- echo o > /proc/sysrq-trigger
- Auf einem anderen Node beobachten
- watch ha-manager status
Nach dem Fencing (ca. 2-3 Minuten) wird die VM auf einem anderen Node gestartet.
Benutzer und Rechte
- GUI
- Datacenter -> Permissions -> Users / Groups / Permissions
- pveum user add kurs@pve --comment "Kursteilnehmer"
- pveum passwd kurs@pve
- pveum group add teilnehmer
- pveum user modify kurs@pve --groups teilnehmer
- pveum acl modify /vms --groups teilnehmer --roles PVEVMUser
- Übersicht
- pveum user list
- pveum acl list
- pveum role list
- cat /etc/pve/user.cfg
Firewall
Vorsicht: Die Datacenter-Firewall vor dem Einschalten mit Regeln für Port 8006 und 22 versehen, sonst sperrt man sich aus.
- Regel auf Datacenter-Ebene (GUI
- Datacenter -> Firewall -> Add)
- pvesh create /cluster/firewall/rules --type in --action ACCEPT --proto tcp --dport 8006 --source 192.168.10.0/24 --enable 1
- pvesh create /cluster/firewall/rules --type in --action ACCEPT --proto tcp --dport 22 --source 192.168.10.0/24 --enable 1
- Firewall einschalten (GUI
- Datacenter -> Firewall -> Options)
- pvesh set /cluster/firewall/options --enable 1
- Status und Konfiguration
- pve-firewall status
- cat /etc/pve/firewall/cluster.fw
- Regel für eine einzelne VM (GUI
- VM -> Firewall)
- pvesh create /nodes/pve1/qemu/100/firewall/rules --type in --action ACCEPT --proto tcp --dport 80 --enable 1
Quorum verstehen
- Zwei von drei Nodes herunterfahren und auf dem letzten Node prüfen
- pvecm status
Ohne Quorum ist /etc/pve nur lesbar. VMs lassen sich weder starten noch ändern.
- Nur im Notfall
- erwartete Stimmen herabsetzen
- pvecm expected 1
Node aus dem Cluster entfernen
- Den zu entfernenden Node (pve3) zuerst herunterfahren, dann auf einem verbleibenden Node
- pvecm delnode pve3
- pvecm status
- Reste im Clusterdateisystem entfernen
- rm -r /etc/pve/nodes/pve3
Der entfernte Node darf nicht wieder mit der alten Konfiguration ins Netz. Am saubersten wird er neu installiert.
pvesh - die GUI auf der Konsole
Jede Seite der GUI ist ein API-Pfad. Mit pvesh lässt sich dieser Pfad direkt abfragen.
- Nodes im Cluster
- pvesh get /nodes
- Ressourcen des Clusters
- pvesh get /cluster/resources
- VMs eines Nodes
- pvesh get /nodes/pve1/qemu
- Status einer VM
- pvesh get /nodes/pve1/qemu/100/status/current
- VM über die API starten
- pvesh create /nodes/pve1/qemu/100/status/start
- Ausgabe als JSON
- pvesh get /cluster/resources --type vm --output-format json-pretty
- Welche Parameter kennt ein Pfad?
- pvesh usage /nodes/pve1/qemu --verbose
- Task-Liste (GUI
- unteres Fenster Tasks)
- pvesh get /cluster/tasks
Tipp für die Teilnehmer: In den Entwicklertools des Browsers (Reiter Netzwerk) sieht man bei jedem Klick in der GUI den API-Aufruf. Diesen Pfad mit pvesh nachbauen.