Proxmox VE Installation und Grundkonfiguration
Im folgenden Beitrag gehe ich auf die Konfigurationsmöglichkeiten einer Proxmox VE Basisinstallation ein. Für den Beitrag habe ich noch PVE 6.4 installiert, da kurz darauf PVE 7.0 released wurde, habe ich Änderungen in dieser Version noch in den Beitrag einfließen lassen.
Installation
Die eigentliche Grundinstallation von PVE ist im Wiki vom Proxmox hier (https://pve.proxmox.com/wiki/Installation) ganz gut dokumentiert, daher gehe ich auf die Installation nicht mehr groß ein.
Grundkonfiguration
Im Anschluss an die Installation nehme ich über die Web UI und SSH einige Grundeinstellungen vor.
No-Subscription Warning
Ohne Subscription erscheint in der Web-GUI von Proxmox bei jedem Login eine Warnmeldung, dass das System ohne Subscription betrieben wird. Dies ist trotzdem ganz legal, allerdings ist die Meldung sehr störend, kann aber glücklicherweise deaktiviert werden.
Dazu verbindet man sich im ersten Schritt per SSH mit dem PVE Host. Danach sichert man die Datei, die für die Deaktivierung angepasst werden muss und öffnet die Datei mit nano:
cp /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js.bak nano /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
In der proxmoxlib.js
Datei sucht man in nano
mit Ctrl+W nach dem Suchbegriff No valid subscription
. Die Ergebniszeile sieht wie folgt aus:
... Ext.Msg.show({ title: gettext('No valid subscription'), ...
Der Eintrag Ext.Msg.show
wird gegen den Eintrag void
getauscht und die Datei mit Ctrl+X gespeichert:
... void({ title: gettext('No valid subscription'), ...
Danach muss nur noch der PVE Web Service neu gestartet werden, um die Änderung zu aktivieren:
systemctl restart pveproxy.service
Nach einem Versionsupdate kann es vorkommen, dass die obige Konfiguration erneut durchgeführt werden muss!
No-Subscription Repository
Da ich keine Subscription habe, deaktiviere das Enterprise Repository und lege eine Sources-Datei an für das No-Subscription Repository.
mv /etc/apt/sources.list.d/pve-enterprise.list /etc/apt/sources.list.d/pve-enterprise.list.bak nano /etc/apt/sources.list.d/pve-no-subscription.list
In der neu erstellte Sources-Datei ist folgender Eintrag hinzuzufügen:
# PVE 6.x deb http://download.proxmox.com/debian/pve buster pve-no-subscription # PVE 7.x deb http://download.proxmox.com/debian/pve bullseye pve-no-subscription
Update/Änderung in PVE 7.0
Mit PVE 7.0 wurde die Möglichkeit geschaffen, die Repositories über die Web GUI auszuwählen. Zu finden ist die Option unter dem Server-Node im Menü Updates -> Repositories. Der Eintrag in der pve-no-subscription.list
wird nur für das Update von 6.x auf 7.x benötigt.
Open vSwitch
Optional kann man auch noch Open vSwitch (OVS) nachinstallieren, falls man das Feature nutzen möchte:
apt update apt install openvswitch-switch
Mir reichen in meinen Installationen die normalen Linux Netzwerk-Bridges und benötige daher OVS nicht.
ifupdown2
Um Änderungen an der Netzwerkkonfiguration in der PVE GUI auch im laufenden Betrieb ohne Neustart zu ermöglichen, installiere ich noch das dazu benötigte ifupdown2
Tool.
apt install ifupdown2
Update/Änderung in PVE 7.0
In PVE 7.0 wurde ifupdown2
in die Basisinstallation integriert und muss nicht mehr nachinstalliert werden.
ZFS File System Konfiguration / ZFS ARC Tuning
Wie in einem anderen Beitrag beschrieben, habe ich 2 Server, ein Produktivsystem und ein Testsystem; in beiden Systemen sind 2 Data Disks, die ich per ZFS mit RAID 1 zu einem logischen Volume zusammenschließe. Für die Nutzung von ZFS ist jedoch einiges zu beachten.
ARC (Adaptive Replacement Cache) ist eine Funktion von ZFS, die Daten, auf die am häufigsten zugegriffen wird, im RAM speichert und so extrem schnelle Lesevorgänge für diese Ressourcen ermöglicht. Das ist an sich eine sinnvolle Funktion, aber die standardmäßige maximale Größe für ARC beträgt 50% des gesamten System-RAMs. Auf einem File Server macht eine Einstellung von 50% oder sogar noch mehr durchaus Sinn, aber Proxmox VE ist ja nun mal kein File Server sondern ein Hypervisor. Da RAM einerseits teuer ist und andererseits der RAM für ein System begrenzt ist, drehe ich die Einstellung in meiner Installation daher herunter.
Es gibt viele Empfehlungen, wie viel RAM für ARC verwendet werden soll. Häufig trifft man dabei auf den Wert 1 GB pro TB ZFS Speicher, mindestens jedoch 8 GB. Meine Server haben jeweils eine 500 GB ZFS RAID 1 Disk, d.h. rein nach diesem TB Wert würde 1 GB für ARC reichen. Zudem verfügen meine Server über 32 GB, bzw. 64 GB RAM. Daher bleibe ich erst mal unter der Empfehlung und limitiere ARC erstmal auf 2 GB, bzw. 4 GB. Sollte das zu Performance Problemen führen, kann auf 8 GB erhöht werden. 1 GB RAM bzw. 2 GB RAM konfiguriere ich als Minimalwert.
Diese Werte müssen in Bytes angegeben werden und können wie folgt berechnet werden:
GB * 1024 = MB -> MB * 1024 = KB -> KB * 1024 = Bytes
Daraus ergeben sich folgende Werte:
8GB = 8589934592 Bytes
4GB = 4294967296 Bytes
2GB = 2147483648 Bytes
1GB = 1073741824 Bytes
Um ARC zu konfigurieren, ist mit dem folgenden Befehl die zfs.conf
Datei zu editieren (wird neu angelegt, falls sie noch nicht existiert):
nano /etc/modprobe.d/zfs.conf
Dort trage ich folgende Werte ein:
Produktivserver
options zfs zfs_arc_min=2147483648 options zfs zfs_arc_max=4294967296
Testserver
options zfs zfs_arc_min=1073741824 options zfs zfs_arc_max=2147483648
Da ich UEFI Systeme verwende, muss die Kernel Liste aktualisiert werden, damit das aktualisierte RAM File System verwendet wird (bei BIOS nicht notwendig):
pve-efiboot-tool refresh
Für das eigentliche PVS System verwende ich eine separate EXT4 formatierte LVM Disk. Dadurch ist die Konfiguration von ZFS für meine System fertig. Wer jedoch auch das System auf einer ZFS Disk installiert, muss auch das initiale RAM Dateisystem anpassen, damit die Änderung wirksam wird vor dem Mounten des ZFS Volumes.
update-initramfs -u
Damit obige Änderungen wirksam werden, muss das System abschließend nun noch gebootet werden.
Replication Runner Syslog Messages
Wer den Replication Runner unverändert lässt, dem werden im Syslog von PVE minütliche Einträge wie diese auffallen:
systemd[1]: Starting Proxmox VE replication runner...
Um diese Meldung zu unterbinden, lässt sich der entsprechende Dienst einfach deaktivieren:
systemctl disable pvesr.timer
Wer den Dienst nicht komplett abschalten möchte, kann alternativ das Intervall ändern, in denen der Replication Runner ausgeführt wird:
nano /lib/systemd/system/pvesr.timer
Hier ändere ich den Eintrag …
[Timer]
OnCalendar=minutely
… in …
[Timer]
OnCalendar=monthly
Danach läuft der Replication Runner nur noch einmal monatlich.
Netzwerk Konfiguration
In meinen Systemen befinden sich je 4 NICs. Diese teile ich wie folgt auf:
NIC 1 > LAN Bond 1/2
NIC 2 > LAN Bond 2/2
NIC 3 > DMZ
NIC 4 > SAN
Besonders bei der Konfiguration des Bonds hatte ich massive Probleme. Das Löschen der vmbr0, Anlegen von bond0 mit Member eno0 eno1 (oder wie die IFs im System halt heißen), Anlegen von vmbr0 mit Member bond0 und IP Konfiguration, Anwenden der Konfiguration hat bei mir dazu geführt, dass das System nicht mehr erreichbar ist.
Die Lösung war bei mir:
Löschen der vmbr0, anlegen von bond0 mit Member eno0, anlegen von vmbr0 mit Member bond0 und IP Konfiguration, anwenden der Konfiguration; danach hinzufügen von eno1 zu bond0, anwenden der Konfiguration
Warum das so ist, konnte ich noch nicht nachvollziehen, Hinweise dazu sind natürlich willkommen.
Wichtig ist auch zu beachten, dass PVE ggf. bei der Bildung von Bridges und Bonds eigene MAC-Adressen vergibt und sich diese bei einem Major Release Update auch gerne mal ändern. Dies tritt auf, wenn die physikalischen Bond-Members automatisch starten.
Welche MACs verwendet werden, lässt sich mit folgendem Befehl anschauen:
ip -c link
Die Ausgabe sieht dann z.B. wie folgt aus, wenn die Bond-Members automatisch starten:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eno1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond1 state UP mode DEFAULT group default qlen 1000 link/ether f6:76:43:97:f6:a4 brd ff:ff:ff:ff:ff:ff permaddr ac:1f:6b:44:cd:18 altname enp5s0f0 3: eno2: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond1 state UP mode DEFAULT group default qlen 1000 link/ether f6:76:43:97:f6:a4 brd ff:ff:ff:ff:ff:ff permaddr ac:1f:6b:44:cd:19 altname enp5s0f1 4: eno3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master vmbr2 state UP mode DEFAULT group default qlen 1000 link/ether ac:1f:6b:44:cd:1a brd ff:ff:ff:ff:ff:ff altname enp7s0f0 5: eno4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master vmbr3 state UP mode DEFAULT group default qlen 1000 link/ether ac:1f:6b:44:cd:1b brd ff:ff:ff:ff:ff:ff altname enp7s0f1 6: bond1: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue master vmbr1 state UP mode DEFAULT group default qlen 1000 link/ether f6:76:43:97:f6:a4 brd ff:ff:ff:ff:ff:ff 7: vmbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether f6:76:43:97:f6:a4 brd ff:ff:ff:ff:ff:ff 8: vmbr2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether ac:1f:6b:44:cd:1a brd ff:ff:ff:ff:ff:ff 9: vmbr3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether ac:1f:6b:44:cd:1b brd ff:ff:ff:ff:ff:ff
Wie man in diesem Beispiel sieht, vergibt PVE für alle Member-NICs des Bonds, für den Bond selbst und für die Bridge des Bonds eine neue MAC-Adresse. Wie geschrieben, kann diese sich jedoch unter Umständen ändern. Um dies zu vermeiden, gibt es 2 Optionen:
- Konfiguration einer statischen MAC für die Bridge
- Deaktivierung des Autostarts für die physikalischen NIC Members des Bonds
Warum ist es wichtig, mit welchen MAC-Adressen der PVE Server daherkommt? In meinem Fall, weil ich eine Firewall mit MAC-based Policies verwende. Ändert sich also die MAC, muss das jeweilige Firewall Objekt angepasst werden, sonst funktionieren die Freischaltungen nicht mehr.
Konfiguration einer statischen MAC
Leider lässt sich die vergebene MAC-Adresse nicht in der PVE-GUI konfigurieren. Um diese anzupassen und persistent zu halten, muss über die Shell die Datei /etc/network/interfaces
mit z.B. nano
angepasst werden, indem ein Parameter hwaddress
in die entsprechende Bridge-Konfiguration eingefügt wird, also in meinem Beispiel:
auto vmbr1 iface vmbr1 inet static hwaddress f6:76:43:97:f6:a4 address 10.x.x.x/24 gateway 10.x.x.1 bridge-ports bond1 bridge-stp off bridge-fd 0
Deaktivierung des Autostarts für die phsikalischen NIC Members des Bonds
Der Autostart der NICs muss ebenfalls über die Datei /etc/network/interfaces
durchgeführt werden. Dazu muss bei allen betroffenen NICs der auto
Parameter entfernt oder auskommentiert werden. Wichtig! Die Änderung funktioniert nur, wenn keine VM auf die Bridge und den Bond gebunden wird, dessen Slaves die NICs sind.
auto eno1iface eno1 inet manualauto eno2iface eno2 inet manual
Abschließend muss die neue Konfiguration noch angewendet werden. Dazu ist der Befehl ifreload -a
. Danach sieht die Ausgabe von ip -c link
nun so aus:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eno1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond1 state UP mode DEFAULT group default qlen 1000 link/ether ac:1f:6b:44:cd:18 brd ff:ff:ff:ff:ff:ff altname enp5s0f0 3: eno2: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond1 state UP mode DEFAULT group default qlen 1000 link/ether ac:1f:6b:44:cd:18 brd ff:ff:ff:ff:ff:ff permaddr ac:1f:6b:44:cd:19 altname enp5s0f1 4: eno3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master vmbr2 state UP mode DEFAULT group default qlen 1000 link/ether ac:1f:6b:44:cd:1a brd ff:ff:ff:ff:ff:ff altname enp7s0f0 5: eno4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master vmbr3 state UP mode DEFAULT group default qlen 1000 link/ether ac:1f:6b:44:cd:1b brd ff:ff:ff:ff:ff:ff altname enp7s0f1 6: bond1: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue master vmbr1 state UP mode DEFAULT group default qlen 1000 link/ether ac:1f:6b:44:cd:18 brd ff:ff:ff:ff:ff:ff 7: vmbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether ac:1f:6b:44:cd:18 brd ff:ff:ff:ff:ff:ff 8: vmbr2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether ac:1f:6b:44:cd:1a brd ff:ff:ff:ff:ff:ff 9: vmbr3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether ac:1f:6b:44:cd:1b brd ff:ff:ff:ff:ff:ff
Leider bleibt diese Korrektur nicht persitent – warum auch immer. Der auto
Parameter bleibt zwar raus, die „virtuelle“ MAC wird aber beim Reboot wieder erzeugt. D.h. die Korrektur ist bei jedem Reboot per cron-Job auszuführen:
@reboot ifreload -a
NTP Server
Da Proxmox VE auf Debian basiert, versucht das System sein Zeit standardmäßig mit den debian.pool.ntp.org Servern zu synchronisieren. Dazu verwendet PVE den Daemon systemd-timesyncd. Um eigene Server zu hinterlegen, muss daher die Datei /etc/systemd/timesynd.conf
mit z.B. nano
angepasst werden (mehrere Server werden mit Leerzeichen getrennt angegeben), z.B.:
[Time] NTP=de.pool.ntp.org
Danach muss nur noch der entsprechende Dienst neu gestartet werden, damit die Änderung aktiv wird:
systemctl restart systemd-timesyncd
Die Änderung kann geprüft werden entweder mit den Befehlen systemctl status systemd-timesynd
oder journalctl --since -1h -u systemd-timesyncd
.
Quellen:
https://pve.proxmox.com/wiki/
Die Meldung zur Subscription ist jetzt weg. Danke für die Anleitung.
Mich irritiert allerdings die Anpassung zum Repository.
Proxmox in Version 7 setzt auf Debian Bullseye. Eingebunden wird allerdings die vorherige Version Buster, was zu einer Fehlermeldung im Update Prozess führt. Ok den Eintrag auf Bullseye angepasst.
Mit der Meldung „Das no-subscription Repository ist nicht für die Verwendung in Produktivsystemen empfohlen“ könnte ich leben, allerdings wäre ein Hinweis darauf oben im Text hilfreich.
Hallo Enrico
Danke für deine Rückmeldung. Wie im Beitrag geschrieben, werden in PVE 7 die Repositories über die Web GUI gesetzt. Daher ist dort keine Datei-basierte Anpassung für Bullseye notwendig.
Gruß
Andreas
Bei einer neuen Installation von Proxmox VE 7 ist als Zeitdienst Chrony installiert, Konfiguration sh. https://chrony.tuxfamily.org/doc/4.3/chrony.conf.html
Sehr informative Seite. Gefällt mir.
Danke für die Anleitung. Ich habe Proxmox VE statt auf einem Raspberry Pi auf einem günstigen Celeron N5095 laufen. Preis unter 200 € mit 512 TB SSD und 16 GB RAM. Nicht größer als ein Raspberry und Stromverbrauch im Idle um die 4,6 Watt! Läuft echt super und macht viel Spaß. Top Performance mit Paperless NGX.
Ich hab gerade ein Proxmox VE 7.3-1 aufgesetzt. Wird in proxmoxlib.js die Funktion auf void() geändert, um den Nag-Screen zu entfernen, passiert in der Oberfläche nix wenn man GUI-Dialoge aufrufen. Beispielsweise der Dialog zum Hinzufügen eines Repositories funktioniert danach nicht mehr.
Besser funktioniert es, wenn der gesamte if/else-Block auskommentiert und durch orig_cmd(); ersetzt wird.
Hallo Martin
Danke für deine beiden Kommentare. Ich kann das leider nicht verifizieren, weil ich keine Neuinstallation von 7.3 habe. Bei mir ist PVE noch von 6.x upgegraded und ich hab keine Auswirkungen bei dem gesetzten Parameter. Bei nächster Gelegenheit versuche ich mal eine Neuinstallation von 7.x.
Gruß
Andreas
Danke für den Artikel. Verwende einen Mini-Server nach Bauanleitung C’t 2023/6 Seite 150 mit 32GB RAM und 2T SSD M.2.
Das ist meine erste Proxmox-VE installation hier mit 8.0.2. Verwende hier erst mal den Hinweis aus den Kommentaren den „Ext.Msg.show(…)“ gleich den ganzen If-Block auszukommentieren. Ausserdem wichtig: Webseite mit Ctrl-Shift-R neu laden ansonsten verwendet der Browser allenfalls die gecatchen Daten (hat mich 15 Minuten Kopfkratzen gekostet).
Verwende:
nano /etc/apt/sources.list.d/pve-no-subscription.list
# PVE 8.x
deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription
FG Paul