Proxmox Homeserver - Grundinstallation (PVE 6.x und 7.x)

 

Proxmox, als mein bevorzugter Hypervisor, sollte nach der recht einfachen Installation i.d.R. noch an die eigenen Bedürfnisse und die Umgebung angepasst werden, in der er betrieben wird.

Dieser Artikel beschreibt meine Standardmodifikationen z.B. VLANs, ZFS, ntp, APT usw. und wird ständig erweitert. Aktuell für Version 6.4-1. bzw. 7.0-1

Hier geht es zum ausführlichen Artikel:

 

1. Installation

2. Netzwerk

2. APT-Konfiguration, zusätzliche Pakete

3. SWAP / Swappiness

4. Mail- und Zeitserver

5. Bandbreiteneinstellung

6. KSM-Konfiguration

4. ZFS-Konfiguration

5. Monitoring

 

1. Installation

Die Installation eines Proxmox-Servers ist im Prinzip eine einfache Angelegenheit. ISO downloaden, auf USB-Stick schreiben, booten, WWF (weiter weiter fertig). 
Dennoch gibt es ein paar Dinge zu beachten, welche sich nach der Installation schlecht ändern lassen. 

Ich beschreibe hier einen Homeserver/Lab-Server, im Enterpriseumfeld gibt es durchaus andere Prämissen zu beachten. 

Ich bin ein Freund von ZFS und nutze es gern an allen möglichen Stellen, allerdings muss man beim Einsatz ein paar Dinge beachten. 
Aus meiner Erfahrung sollte z.B. die Installation (auch wenn es möglich ist) nicht direkt auf ZFS (Z1) erfolgen, auch wenn man sich so eine/mehrere Boot-Disks sparen kann. 
Der Grund liegt in der Funktionsweise. Installiert ihr auf ZFS wird z.B. der SWAP direkt ausgeschaltet.
Das macht auch Sinn - die Kurzfassung ->ZFS nutzt den RAM zu Cachen, ist der RAM soweit voll, dass ausgelagert werden muss würde der Cache auf die Disk und für den Schreibvorgang
wird wieder der ZFS-Cache verwendet. Geht euch also der RAM aus, wird das System fast unbrauchbar langsam. 
Daher installiere ich immer auf ein(e) EXT4 Disk/Raid-Volume und kümmere mich nach der Installation ggf. um die Extra-Storages für die VMS.
Außerdem macht es Sinn sich mit der Partitionierung bei der Installation zu befassen. Hier lohnt ein Blick in das WIKI von Proxmox. LVM lässt sich auch im Nachhinein anpassen, aber warum nicht gleich erledigen. 
In der Vergangenheit musste man hier etwas rechnen, da es Vorgaben für die Größen gab z.B. SWAP nur 1/8 des Gesamtspeicherplatzes, siehe Wiki. Aber mittlerweile kann man hier auch von der Formel abweichende Werte eintragen. 
Wer hier nichts einstellt bekommt eine ggf. wenig brauchbare automatische Aufteilung entsprechend der Gesamtdiskgröße.
Hier am Beispiel einer 120GB Start-SSD:
 

Tip für das Emailfeld: Hier muss eine "valide" Emailadresse mit "@" eingegeben werden, was in Remoteconsolen ala ILO, iDrac, virtuell schon mal eine Herausforderung sein kann. Daher nur vor und nach dem "@" editieren
und falls ihr es doch gelöscht habt, 1x auf Previous und Next. ;)

Der Hostname muss dem FQDN-Format entsprechen. Während des Setup kann nur ein DNS-Server angegeben werden.

 


2. Netzwerk

In meinem Setup nutze ich eine bzw. zwei 1g-Netzwerkkarten ohne Bonding, LACP etc. Der Fokus des Lab-Servers ist nicht unbedingt Hochverfügbarkeit, mehr Kosten- und Energieeffizienz. 
Dennoch nutze ich grundsätzlich VLANs und die müssen wir nun konfigurieren. Ich nutze dabei verschiedene Bridges für die Proxmox-Infrastruktur / Management und die VMs. Ggf. kann/sollte man auch für Storage/Migration Bridges mit dediziert zugeordneten NICs verwenden. Die VMs werden dabei in eine "VLAN-Aware-Bridge" gehangen und pro VM in den Netzwerkeinstellungen das zu nutzende VLAN eingetragen. Dies funktioniert dann quasi wie ein Filter. 
Man könnte auch pro VLAN eine Bridge definieren. Dazu bräuchte man aber eine recht statisches VLAN-Liste. Bei mir kommt da schnell mal eins dazu und dafür müsste ich dann eine neue Bridge auf allen Hosts erstellen, das VLAN zuordnen und des Host neustarten. 

Nachdem ihr die IP-Konfiguration im Setup soweit eingegeben habt, muss diese auf das VLAN Setup angepasst werden. Anschließend am Besten neustarten.

#Default nach Setup
auto lo
iface lo inet loopback

iface enp0s25 inet manual

auto vmbr0
iface vmbr0 inet static
        address 192.168.180.10/24
        gateway 192.168.180.1
        bridge_ports enp0s25
        bridge_stp off
        bridge_fd 0
#Angepasst für VLANs
auto lo
iface lo inet loopback

auto enp0s25
iface enp0s25 inet manual

auto vlan180
iface vlan180 inet manual
        vlan-raw-device enp0s25

auto vmbr0
iface vmbr0 inet static
        address 192.168.180.10
        netmask 255.255.255.0
        gateway 192.168.180.1
        bridge_ports vlan180
        bridge_stp off
        bridge_fd 0
#ProxMox-Server Netzwerk

auto vmbr1
iface vmbr1 inet manual
        bridge_ports enp0s25
        bridge_stp off
        bridge_fd 0
        bridge_vlan_aware yes
        bridge-vids 2-4094
#Netzwerk fuer VMs

auto vmbr2
iface vmbr2 inet static
        address  192.168.40.10
        netmask  255.255.255.0
#       bridge_ports enp2s0
        bridge_stp off
        bridge_fd 0
#Storage-Netzwerk

In meinem Beispiel, wird für Proxmox selbst das VLAN 180 verwendet. VLAN 180 wird daher an das physische Interface "enp0s25" gebunden. VLAN 180 wird an Bridge "vmbr0" gebunden (statt zuvor direkt das phys. Interface).
Der Kommentar !nach dem Abschnitt ist notwendig, damit dies in der GUI richtig angezeigt wird. 

Alle anderen VLANs sollen auf Bridge "vmbr1" für die VMs nutzbar sein. 

In den VMs wird diese dann der virtuellen Netzwerkkarte !mit dem entsprechenden VLAN Tag zugeordnet. Vergisst man den VLAN Tag, "sieht" die VM alle VLAN-Tags. Das wird zum einen nicht zum gewünschten Ergebnis führen und ist auch aus Sicherheitssicht unglücklich.


Hinweis: Einzige Ausnahme, soll eine VM in das gleiche Netzwerk wie der Proxmox Host, muss diese an vmbr0 ohne VLAN Eintrag angeschlossen werden. 

Bridge "vmbr2" ist hier als dedizierte Bridge für Storage vorbereitet, der Uplink aber auskommentiert, da ich in diesem Server keine 2. NIC habe. 

 

2. APT-Konfiguration, zusätzliche Pakete

Ich nutze in meinem Lab einen Proxy-Server (Mikrotik), also muss ich diesen für APT noch hinterlegen. Das geht auch über die Proxmox GUI (Datacenter/Options/HTTP proxy).
Außerdem nutze ich Edition ohne Enterprise Updates, diese müssen daher auch noch deaktiviert werden. 

Also schnell auf die console:

nano /etc/apt/apt.conf.d/76pveproxy

# folgenden Eintrag ergänzen (Proxyserver anpassen)
Acquire::http::Proxy "http://192.168.180.1:3128";

# den vorhanden Eintrag löschen oder auskommentieren
#// no proxy configured
nano /etc/apt/sources.list.d/pve-enterprise.list

# folgende Zeile auskommentieren
deb https://enterprise.proxmox.com/debian/pve buster pve-enterprise

#deb https://enterprise.proxmox.com/debian/pve buster pve-enterprise

Die sources.list sichern und durch den Inhalt von der Proxmox Webseite für "No-Subscription" ersetzen (Aktuell scheint es mit dieser Konfig. ein Problem zu geben, ggf. hat es auch mit meinem Proxy zu tun, daher unten die Konfig. die aktuell bei mir funktioniert.

cp /etc/apt/sources.list /etc/apt/sources.list-old # Backup erstellen
nano /etc/apt/sources.list

# Inhalt am Besten komplett löschen und ersetzen, im Fall für Buster:

deb http://ftp.de.debian.org/debian buster main contrib
deb http://ftp.de.debian.org/debian buster-updates main contrib
# PVE pve-no-subscription repository provided by proxmox.com,
# NOT recommended for production use
deb http://download.proxmox.com/debian/pve buster pve-no-subscription
# security updates
deb http://security.debian.org buster/updates main contrib

Diese Meldung lässt sich theoretisch deaktivieren, aber Vorsicht, dies könnte beim nächsten Update überschrieben werden und ggf. zu Fehlern führen. Also auf eigene Gefahr! Link für die ausführliche Anleitung.

Anschließend die Repos updaten, die Pakete upgraden und zusätzliche Pakete nach Bedarf installieren:

apt update && apt upgrade && apt dist-upgrade -y
apt install htop iotop iftop powertop mc snmp -y

 

3. SWAP / Swappiness

Hier gibt es viele verschiedene Ansätze und Ansichten. Anbei eine Sammlung an Befehlen zur Statusabfrage, Anpassung Swappiness. 

swapon --show
sysctl vm.swappiness
sysctl vm.swappiness=50

swap (temp. deaktivieren/aktivieren)
swapoff -a  ## Swap ausschalten
swapon -a   ## Swap einschalten

beobachen wie Swap geleert wird
free -s 3 |grep Swap 

 

4. Mail- und Zeitserver

Ich habe ein internes Mailrelay gebaut, welches auf Basis von Source-Adressen Email ohne Authentifizierung annimmt und über das Smart-Gateway meines Providers versendet. So muss ich bei meinen internen Systemen nur noch den Mailserver und die Absenderadresse, ohne Authentifizierung eintragen. Bei Proxmox braucht man das z.B. um das Ergebnis der Datensicherung zu bekommen. Die Absenderadresse habt ihr bei der Installation angegeben. Diese kann in der GUI via "Datacenter/Options/Email from address" angepasst werden.

nano /etc/postfix/main.cf
# relayhost = # -> hier Mailserver eintragen
relayhost = mail.domain.local

Proxmox 6.x nutzt den systemd-timesyncd als Standard ntp-Client. Eigene Zeitserver könnt ihr so konfigurieren. An der Stelle sei auch auf die sehr ausführliche Offline-Hilfe in der Proxmox GUI verwiesen. 

nano /etc/systemd/timesyncd.conf
# hier den Eintrag Server= anpassen, selbsterklärend

# Dienst neustarten
systemctl restart systemd-timesyncd

# Ergebnis prüfen
journalctl --since -1h -u systemd-timesyncd

Ab Proxmox 7.x wurde auf chrony gewechselt. Um diesen zu konfigurieren bzw. die Zeit direkt abzugleichen die folgenden Befehle:

# Installation - bei PVE 7 Neuinstallation bereits installiert
apt install chrony

# Zeitserver konfigurieren
nano /etc/chrony/chrony.conf
#pool .. selbsterklärend

# Dienst neustarten
systemctl restart chronyc

# Status und Abfrage prüfen
chronyc tracking

# aktuelle Quellen anzeigen
chronyc sources

# Zeit sofort abgleichen
chronyc makestep

 

5. Bandbreiteneinstellung

Da ich, wie oben beschrieben, hier nur eine Netzwerkkarte benutze, macht es Sinn für Migrationen / Backups etc. nur ein eingeschränkten Anteil an der Gesamtbandbreite hierfür zu verwenden. Sonst bekommen die VMs ein Problem. 

Die Einstellung findet ihr in der GUI unter "Datacenter/Options/Bandwitdth Limits". Ich habe hier jeweils 80 MiB/s gewählt. 

 

6. KSM-Konfiguration

KSM (Kernel Samepage Merging) optimiert die RAM des Hosts in dem es gleiche Speicherblöcke findet und nur einmal nutzt. Also eine Art RAM-Deduplizierung für VMs. KSM ist default eingeschalten, greift aber erst ab 80% Speicherbelegung ein. Das ist mir zu spät, daher passe ich Wert hierfür an. Der Wert beschreibt wie viel freier Speicherplatz noch verfügbar ist. 20 = 80% belegt.

nano /etc/ksmtuned.conf
# Zeile "KSM_THRES_COEF" auskommentieren und Parameter anpassen
KSM_THRES_COEF=60

# Ergebnis bewundern:
watch cat /sys/kernel/mm/ksm/pages_sharing

 

4. ZFS-Konfiguration und Befehle

ZFS füllt selbst Bücher und soll hier nicht im Detail beschrieben werden. Ich zeige nur meine Anpassungen für den kleinen Server. Zum einen passe ich den max. genutzten RAM-Cache an (ARC), diese ist default unlimitiert. Zum anderen setze ich die Sync-Option aus Performancegründen auf disabled. Dabei wird der Rückmeldung an das Betriebsystem nicht abgewartet bis alle Disks die Daten geschrieben haben. Was die Datensicherheit angeht, sollte man sich dies speziell, wenn keine USV genutzt wird, gut überlegen. Also ganz klar keine Empfehlung und auf eigenes Risiko!!

# aktuelle Performance abfragen
zpool iostat
zpool iostat -v 1


# Datasets (VMs)
zfs list

# ZFS-Pool Status und Aufbau
zpool status
zpool status [Pool] –v

# ZFS Kompression und Dedup abfragen
zfs get compression
zfs get dedup

# ZFS Kompressionsraten abfragen
zfs get compressratio,refcompressratio

# Scrub starten
zpool scrub [Pool]

# ZFS Historie und Events
zpool history
zpool events

###########################################
#ARC Cache konfigurieren in KiB z.B. 6GiB * 1024 * 1024 * 1024 = 6442450944
Beispiel: ARC min. 4GiB; max. 6GiB
nano /etc/modprobe.d/zfs.conf
options zfs zfs_arc_min=4294967296
options zfs zfs_arc_max=6442450944
reboot

# ARC Abfragen
arc_summary
arc_summary | grep -A3 'ARC size'
cat /sys/module/zfs/parameters/zfs_arc_min
cat /sys/module/zfs/parameters/zfs_arc_max

###########################################
# Sync abfragen
zfs get sync
# Sync deaktivieren
zfs set sync=disabled [Pool]

 

5. Monitoring

tbd

 

Ist doch umfangreicher geworden, als ich dachte. Natürlich lassen sich die Schritte scripten und wesentlich schneller abarbeiten. Aber ich wollte auch mal das warum und wozu ausführen. Hinterlasst gerne Kommentare und Ergänzungen.