<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://xinux.net/index.php?action=history&amp;feed=atom&amp;title=Proxmox_Cluster_-_GUI_und_Konsole</id>
	<title>Proxmox Cluster - GUI und Konsole - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://xinux.net/index.php?action=history&amp;feed=atom&amp;title=Proxmox_Cluster_-_GUI_und_Konsole"/>
	<link rel="alternate" type="text/html" href="https://xinux.net/index.php?title=Proxmox_Cluster_-_GUI_und_Konsole&amp;action=history"/>
	<updated>2026-10-13T17:01:15Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://xinux.net/index.php?title=Proxmox_Cluster_-_GUI_und_Konsole&amp;diff=73628&amp;oldid=prev</id>
		<title>Thomas.will: Die Seite wurde neu angelegt: „=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, pv…“</title>
		<link rel="alternate" type="text/html" href="https://xinux.net/index.php?title=Proxmox_Cluster_-_GUI_und_Konsole&amp;diff=73628&amp;oldid=prev"/>
		<updated>2026-10-12T14:59:43Z</updated>

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