Bestpratice Frage: Proxmox Host "clustern"

Es passt vllt nicht 100% hier zum Thema bzw. eigentlich bestimmt auch kein Proxmox Thema, sondern eher Docker vmtl, ich probiers trotzdem mal - ansonsten mache ich auch gerne einen neuen Thread auf - falls es hier im Forum überhaupt gewünscht ist.

Ich habe ja einen LXC (Ubuntu 26.04 LTS) auf dem Docker läuft. In Docker habe ich wg-easy und Rustdesk als 2 Container über docker compose erstellt, diese laufen auch wunderbar. Das wären für mich die beiden wichtigsten, die ich im Falle eines Disaster Recovery ganz schnell wieder an laufen bringen müsste.

Ich habe noch einen Pi im Netzwerk mit Pi OS Lite (aktuelle Version), welcher ebenfalls Docker installiert hat und auf dem grade Testweise ein Uptime Kuma Container läuft - sonst macht der nichts.

Gibt es daher eine Möglichkeit die beiden Docker Container aus dem LXC meines Proxmox Hosts inkl. allen Einstellungen (wg-easy zB. die erstellten Peers, Einstellungen, bei Rustdesk ebenfalls alle Einstellungen) so 1:1 zu überspielen auf den Pi, dass ich im Falle eines Ausfalls des Proxmox Hosts nur die Portweiterleitung in meiner FritzBox ändern muss auf den Pi für die Dienste wg-easy und Rustdesk?

Ich hoffe, ich habe das verständlich ausgedrückt.
Betreibe das Ubuntu als VM und sieh zu, auf einem weiteren PVE eine möglichst aktuelle Version dieser VM vorzuhalten.
Wenn es nötig ist, dann startest du diese und musst sonst nichts ändern.
Wenn du wirklich flexibel sein willst, dann betreibst du immer nur ein Docker pro VM.
Du brauchst also mindestens zwei ähnlich leistungsfähige PVE-hosts.
 
  • Like
Reactions: toffer84
Betreibe das Ubuntu als VM und sieh zu, auf einem weiteren PVE eine möglichst aktuelle Version dieser VM vorzuhalten.
Wenn es nötig ist, dann startest du diese und musst sonst nichts ändern.
Wenn du wirklich flexibel sein willst, dann betreibst du immer nur ein Docker pro VM.
Du brauchst also mindestens zwei ähnlich leistungsfähige PVE-hosts.
OK verstanden, aber warum nicht weiter als LXC? Wenn ich einen 2. PVE Host baue, kann ich doch einfach den vzdump des LXCs importieren und dann zur Not auch starten oder?
 
OK verstanden, aber warum nicht weiter als LXC? Wenn ich einen 2. PVE Host baue, kann ich doch einfach den vzdump des LXCs importieren und dann zur Not auch starten oder?
LXC ist mit dem Virtualisierungshost prinzipbedingt enger verzahnt als eine VM. Genau diese Verzahnung will aber zumindest ich bei Virtualisierung nicht haben. Gerade wenn man betrachtet, dass Docker ähnlich mit dem Host verzahnt ist. Darum mein Tipp: Eine VM mit genau einem Container darin.
 
LXC ist mit dem Virtualisierungshost prinzipbedingt enger verzahnt als eine VM. Genau diese Verzahnung will aber zumindest ich bei Virtualisierung nicht haben. Gerade wenn man betrachtet, dass Docker ähnlich mit dem Host verzahnt ist. Darum mein Tipp: Eine VM mit genau einem Container darin.
Ok verstanden - was meinst du mit enger verzahnt?

Grundsätzlich sollte das doch aber mit einem LXC auch funktionieren, wie ich oben beschrieben habe oder? So könnte ich die jetzige Konfiguration weiterhin immer auf meine DS920 sichern (1x am Tag) und bei Bedarf auf dem 2. PVE Host wiederherstellen oder?

Danke für deinen Input!
 
Ok verstanden - was meinst du mit enger verzahnt?

Grundsätzlich sollte das doch aber mit einem LXC auch funktionieren, wie ich oben beschrieben habe oder? So könnte ich die jetzige Konfiguration weiterhin immer auf meine DS920 sichern (1x am Tag) und bei Bedarf auf dem 2. PVE Host wiederherstellen oder?

Danke für deinen Input!
Sofern sich Quellhost und Zielhost kaum unterscheiden, funktioniert das auch mit LXC gut. Sobald sich die Softwarestände/Hardware (erheblich) unterscheiden, eben nicht mehr zwangsläufig.
Bei VMs. muss nur sichergestellt sein, dass die Virtualisierungsschicht nicht kilometerweit auseinanderdriftet.
Dann ist es sogar egal, ob ein Debian oder BSD oder anderes als Host agieren. Hauptsache diese unterstützen QEMU.
Bei Containern nutzt dieser Funktionalitäten des darunterliegenden Hosts. In dem Container selbst nutzt Docker auch die Funktionalitäten des aus seiner Sicht darunterliegenden Hosts. Diese kaskadierende Abhängigkeit will ich keinesfalls haben.
 
Last edited:
  • Like
Reactions: toffer84
Sofern sich Quellhost und Zielhost kaum unterscheiden, funktioniert das auch mit LXC gut. Sobald sich die Softwarestände/Hardware (erheblich) unterscheiden, eben nicht mehr zwangsläufig.
Bei VMs. muss nur sichergestellt sein, dass die Virtualisierungsschicht nicht kilometerweit auseinanderdriftet.
Dann ist es sogar egal, ob ein Debian oder BSD oder anderes als Host agieren. Hauptsache diese unterstützen QEMU.
Bei Containern nutzt dieser Funktionalitäten des darunterliegenden Hosts. In dem Container selbst nutzt Docker auch die Funktionalitäten des darunterliegenden Hosts. Diese kaskadierende Abhängigkeit will ich keinesfalls haben.
Danke für diese Erklärung!

Ich würde versuchen, einen 2. PVE Host auch mit Intel Chip zu kriegen (der TH 80 von Minisforum hat einen Intel Core i7-11800H, 32GB RAM und 512 NVME) und dann sollte es doch gut aussehen oder? Für die Softwarestände bin ich ja dann selbstverantwortlich :)
 
Danke für diese Erklärung!

Ich würde versuchen, einen 2. PVE Host auch mit Intel Chip zu kriegen (der TH 80 von Minisforum hat einen Intel Core i7-11800H, 32GB RAM und 512 NVME) und dann sollte es doch gut aussehen oder? Für die Softwarestände bin ich ja dann selbstverantwortlich :)
Ähnliche Hosts sind schon mal eine sehr gute Idee.
Ich lasse mich aber ungern auf ein Plattform festnageln. Darum meine Präferenz für VMs statt Containern.
Die Softwarestände liegen selbstverständlich immer in deiner Hand.
Deine HW-Beschreibung hat schon mächtig Matsch auf dem Paddel. Warum also keine VM mit minimal erhöhtem Resourcenverbrauch "dazwischenschieben"?
 
Last edited:
  • Like
Reactions: toffer84
Ähnliche Hosts sind schon mal eine sehr gute Idee.
Ich lasse mich aber ungern auf ein Plattform festnageln. Darum meine Präferenz für VMs statt Containern.
Die Softwarestände liegen selbstverständlich immer in deiner Hand.
Okay, danke nochmals für deinen Input, ich werde dann demnächst einen 2. Host besorgen und es einfach mal durchspielen. Werde berichten...

Vielen Dank an alle, die hier Anregungen geben haben! Hat mich unheimlich weitergebracht!
 
Ich muss mich jetzt auch noch mal einklinken, für meinen Geschmack sind die (sonst hochgeschätzten) Kollegen hier in der Diskussion teilweise etwas zu dogmatisch, bzw. zu sehr von ihrer beruflichen Brille geprägt. Ein Großteil der Regulars hier (mich eingeschloßen) verdient ja auch seine Brötchen mit Computerkram, da hat man dann in Bezug auf Betrieb, dessen Stabilität und Hochverfügbarkeit andere Ansprüche und Sichtweisen, als jemand im Heimnetz. Das ist auch überhaupt nicht schlimm, aber was in einen Fall ein No-Go ist, kann im anderen Fall durchaus tolerabel sein.

Worüber du dir also zuerst klar sein musst, was du dir unter Hochverfügbarkeit vorstellst:
  • Sollen die Dienste weiterlaufen, während du z.B. einen Knoten wartest (neue Platte einbauen, Updates machen und neustarten)?
  • Sollen die Dienste weiterlaufen, wenn ein Knoten (wegen Hardwareschaden, gezogenen Kabel o.ä.) ausfällt?
  • Soll niemand was vom Ausfall bemerken oder ist eine kleine Downtime vertretbar? Falls letzteres, wie lange darf es maximal dauern?
  • Fall ja: Dürfen dabei (für einen kleinen Zeitraum) Daten verloren gehen, oder muss der Datenbestand immer auf beiden Knoten identisch sein?
Diese Ansprüche kriegt man auch im Heimnetz erledigt, je nach vorhandener Hardware und Budget mehr oder weniger gut und mit unterschiedlichen Vor- und Nachteilen, mehr dazu gleich ;)

Im professionellen Umfeld will man aber meistens auch folgendes:
  • Die Dienste sollen auch bei einen Internetausfall weiter laufen, etwa damit Unternehmenswebseiten/der Passwortmanager (in deinen Fall bitwarden)/das VPN (wg-easy) weiter erreichbar sind. Dafür hat man dann einen zusätzlichen Internetvertrag, der dann aber nur für solche Notfälle ist und hat einen entsprechend eingerichteten Router, der zwischen beiden hin- und herwechseln kann. Mit einer handelsüblichen Fritzbox o.ä. funktioniert das nicht, aber OPNsense kann das z.B. Das ist dafür aber dann auch deutlich komplexer im Handling und man braucht eigentlich zwei Router, falls mal einer ausfälllt.
  • Auch im Falle eines Stromausfalls es noch eine bestimmte Zeit weiterlaufen. Zum einen, um alle Systeme geordnet zu stoppen, damit es keine Folgefehler aus den Ausfall gibt. Zum anderen, um envtl. an einen anderen Standort (z.B. Cloud) auf Reserve gehaltene Notfallinfrastruktur starten zu können. Je nach Anspruch werden dafür Notfallaggregate oder auch "nur" Batterien genutzt. Während die Batterievariante auch für Heimanwender noch möglich ist (sofern man nur genug Zeit für die Notabschaltung haben will), werden die wenigsten Anwender wie ein mir bekanntes Rechenzentrum genug Diesel bevorraten, um 2-4 Tage (je nachdem, was man abschaltet) ohne Strom auszukommen.

Ich unterstelle mal, dass du dabei nicht soweit gehst, wie unsereins bei unseren täglich Brot, sondern es dir "nur" darum geht die Wartung deines Hauptknotens oder dessen Ausfall zu kompensieren und außerdem mal VMs und Container zwischen beiden Knoten hin- und herbewegen zu können.

Das geht grundsätzlich mit ProxmoxVE. Nur fürs bewegen (migrieren) reicht der ProxmoxDatacenterManager, den kann man auch als schmale VM oder Container einrichten. Hochverfügbarkeit hat man nicht (doof), dafür braucht es keine zusätzliche Netzwerkhardware oder einen dritten Knoten.

Will man dagegen einen richtigen Cluster, dann sollte dieser pro Knoten mindestens (!) zwei Netzwerkkarten haben, wobei einer exklusiv nur für die Cluster-Kommunikation mit corosync verwendet wird: https://pve.proxmox.com/wiki/Cluster_Manager#pvecm_cluster_network Der Grund dafür ist, dass die Knoten gerne miteinander reden möchten, um ihren Status und Konfiguration untereinander abzugleichen sowie, mitzukriegen, falls einer ausfällt und auszumachen, wer dann dessen VMs /Container übernimmt. Wenn nun die Hauptkarte schon mit den regulären Traffic plus Datenübertragung fürs Migrieren o.ä. beschäftigt ist, dann kann es passieren, dass irgendwann die Leitung dicht ist und der Cluster nicht mehr seinen Status synchronisieren kann->Cluster funktioniert nicht wie erwartet. Da für die Abstimmung, wer übernimmt immer eine Mehrheit benötigt wird, ergibt sich daraus auch, dass es mindestens drei Knoten braucht. Wenn man aber noch einen alten PC, eine NAS mit VM- oder Docker-Support, einen PI (oder irgendwas anderes worauf Debian läuft) über hat, dann kann dieses Gerät die Rolle des dritten Knotens übernehmen ( https://pve.proxmox.com/wiki/Cluster_Manager#_corosync_external_vote_support ). Dafür braucht es auch nur eine Netzwerkkarte, da dafür weniger Daten fließen als bei der eigentlichen Cluster-Kommunikation.

Die Netzwerkkarten sind aber nur die halbe Miete: Du willst ja erreichen, dass deine Workloads weiterlaufen, woher soll aber der zweite Knoten die Daten her haben und wissen, wieviel RAM/CPUs etc deine Container/VMs kriegen sollen? Auch diese Konfiguration wird über corosync abgeglichen, auch darum ist es wichtig, dass die corosync-Verbindung sich ihre Bandbreite nicht mit anderen teilen muss. Bleiben noch die eigentlichen Daten, also virtuellen Platten der vms und container. Will man, dass die Daten immer gleich sind, dann braucht es einen Netzwerkspeicher, der dies sicherstellt zwischen beiden Knoten. Ceph ist dafür eigentlich das vorgesehene Mittel der Wahl in ProxmoxVE, das braucht aber dann noch mal mehr Netz- und Storagehardware und mindestens drei Knoten (siehe https://forum.proxmox.com/threads/fabu-can-i-use-ceph-in-a-_very_-small-cluster.159671/). Das dürfte in deinen Szenario tatsächlich too much sein. Eine andere Möglichkeit wäre das NAS zu nutzen, aber über ein langsames Netzwerk wird das dann zum Flaschenhals für die virtuellen Laufwerke mit Betriebssystem und Anwendungen. Man könnte aber das NAS nutzen, um darüber gemeinsame Ordner zu realisieren, die die eigentlichen Daten enthalten. Hat das NAS (wie die meisten Homeuser-NAS) selbst keine Hochverfügbarkeitsfunktion (die ja selbst wieder ein zusätzliches kompatibles NAS bräuchte), wird das NAS dann zum single-point-of-failure. Ist man bereit das Risiko zu akzeptieren wie ein Kollege von mir in seinen Heimlabor? Dann kann man das machen, aber strenggenommen läuft das deiner Idee der Hochverfügbarkeit zuwider.

Was dagegen im Heimnetz "gut" genug funktioniert sind folgende Varianten (beide basieren auf zfs-internen Mechanismen und brauchen somit zwingend zfs, aber das will man eh haben https://forum.proxmox.com/threads/f...y-a-few-disks-should-i-use-zfs-at-all.160037/ dann aber die VMs/lxcs nur in mirrors ablegen, sonst wird es lahm: https://forum.proxmox.com/threads/fabu-can-i-use-zfs-raidz-for-my-vms.159923/ ):

- pve-zsync (https://pve.proxmox.com/wiki/PVE-zsync) : Synchronisiert Daten und Konfiguration von vms und containern zwischen mehreren Knoten. Vorteil: Die müssen nicht mal im gleichen Cluster sein, Nachteil: Sie müssen manuell gestartet werden
- https://pve.proxmox.com/wiki/Storage_Replication Synchronisiert Daten und Konfiguration von vms und containern zwischen mehreren Knoten eines Clusters. Im aktivierten HA-Modus ( https://pve.proxmox.com/pve-docs/chapter-ha-manager.html ) führt dann ein Ausfall oder eine geplante Wartung dazu, dass die VMs und Container auf den anderen Knoten übertragen (bei Migration) und danach gestartet werden. Bei einen Ausfall entfällt natürlich die Übertratung (darum kleiner Datenverlust), gestartet wird aber trotzdem. Das benötigt dann aber halt einen Cluster mit allen Anforderungen (Drei Knoten oder 2+qdevice, dezidiertes Clusternetzwerk etc)

Beide Verfahren sind asynchron und gehen nur mit zfs, standardmäßig werden die Inhalte alle 15 Minuten synchronisiert, das kann aber auf bis zu eine Minute reduziert werden. Ich behaupte, dass das ein Datenverlust ist, denn die meisten Homelabs besser verkraften können als alle Daten seit dem letzten Backup (was man ja trotzdem braucht! Hochverfügbarkeit und Replikation sind KEIN Backup) oder das Risiko eines Ausfalls falls das NAS wegbricht. Es gibt sogar Firmen, die das einsetzen, weil für ihren Usecase, dieses Risiko als vertretbar gesehen wird, @Falk R. hat öfter erwähnt, dass er kleine Mittelständler hat, die so ein Setup fahren. Und auch die Proxmox-Webseite hat da das Beispiel einer portugiesischen Online-Apotheke, die damit arbeiten: https://www.proxmox.com/de/ueber-uns/ueber-uns/stories/story/farmacia-nova-da-maia-de
In solchen Fällen ist aber dann bessere Netzwerkhardware zur Datenübertragung (mindestens 10GB besser 25G-Karten) am start, als im typischen Heimnetzwerk ;)

Eine andere Sache, die man sich klar machen muss, sind prinzipbedingte Unterschiede zwischen VMs und Containern. @TErxleben hat ja bereits die Problematik in Bezug auf docker erwähnt. Es ist in der Vergangenheit immer mal wieder vorgekommen, dass in lxc-Containern laufende docker-Container nach einen Update nicht mehr gingen (siehe z.B. hier https://forum.proxmox.com/threads/d...bian-13-host-worked-fine-on-proxmox-8.169508/ ), weil sich was geändert hat, was dann vom Host auf die Container durchschleift. Das passiert bei VMs deutlich seltener. Ein anderer Unterschied ist, dass bei der Migration eines Containers IMMER der Container gestoppt und gestartet werden muss. Das dauert zwar normalerweise nur ein paar Sekunden, aber solange ist der Dienst dann nicht erreichbar. VMs können dagegen (wenn sie migriert werden) mehr oder weniger unterbrechungsfrei (tatsächlich gibt es auch dort eine kurze Auszeit, aber die ist quasi nicht wahrnehmbar) auf dem neuen Host dort weitermachen, wo sie vorher waren. Wenn du also keine Hardware an deine Anwendungen durchreichen musst (und imho ist das für keine deiner Anwendungen nötig), dann würde ich mir gut überlegen, ob eine Umstellung der docker-Container auf eine VM nicht stressfreier ist. VMs müssen nicht viel Ressourcen fressen, die Debian-VM mit meinen docker-Containern (sind nicht viel mehr als du) hat zwei CPUs und vier GB RAM zugewiesen, wirklich genutzt wird davon aktuell nur die Hälfte des RAMs und die beiden vCPUs langweilen sich.

Eine andere Möglichkeit Hochverfügbarkeit herzustellen ist eine auf Anwendungsebene (hier ist ein Beispiel für den adblocker pihole, auch wenn die Anleitung so auf neueren Versionen von pihole nicht mehr funktionieren wird, Idee sollte aber klar werden: https://forum.proxmox.com/threads/pi-hole-lxc-with-gravity-sync.109881/post-645646) statt ProxmoxVE. Die meisten Datenbanken (Mysql/mariadb, MSSQL, Postgres) können das zum Beispiel, für deine Anwendungen müsstest du das prüfen (würde mich ehrlich gesagt eher wundern, aber Doku lesen schadet nie).

Langer Rede gar kein Sinn: Wenn du bereit bist, bestimmte Grenzen zu akzeptieren und dir ggf. passende Hardware zuzlegen, ist eine eingeschränkte Hochverfügbarkeit auch zuhause definitiv möglich und je nach Nutzungszweck auch nützlich. Ob das für dich zutrifft, kannst aber nur du entscheiden ;)
 
Last edited:
  • Like
Reactions: UdoB and toffer84
Eine andere Sache, die man sich klar machen muss, sind prinzipbedingte Unterschiede zwischen VMs und Containern. @TErxleben hat ja bereits die Problematik in Bezug auf docker erwähnt. Es ist in der Vergangenheit immer mal wieder vorgekommen, dass in lxc-Containern laufende docker-Container nach einen Update nicht mehr gingen (siehe z.B. hier https://forum.proxmox.com/threads/d...bian-13-host-worked-fine-on-proxmox-8.169508/ ), weil sich was geändert hat, was dann vom Host auf die Container durchschleift. Das passiert bei VMs deutlich seltener. Ein anderer Unterschied ist, dass bei der Migration eines Containers IMMER der Container gestoppt und gestartet werden muss. Das dauert zwar normalerweise nur ein paar Sekunden, aber solange ist der Dienst dann nicht erreichbar. VMs können dagegen (wenn sie migriert werden) mehr oder weniger unterbrechungsfrei (tatsächlich gibt es auch dort eine kurze Auszeit, aber die ist quasi nicht wahrnehmbar) auf dem neuen Host dort weitermachen, wo sie vorher waren. Wenn du also keine Hardware an deine Anwendungen durchreichen musst (und imho ist das für keine deiner Anwendungen nötig), dann würde ich mir gut überlegen, ob eine Umstellung der docker-Container auf eine VM nicht stressfreier ist. VMs müssen nicht viel Ressourcen fressen, die Debian-VM mit meinen docker-Containern (sind nicht viel mehr als du) hat zwei CPUs und vier GB RAM zugewiesen, wirklich genutzt wird davon aktuell nur die Hälfte des RAMs und die beiden vCPUs langweilen sich.
Vielen Dank für deine ausführliche Beschreibung.

Das umstellen auf VM bedeutet aber auch, das alles neu gemacht werden muss, richtig? Sprich wg-easy, Rustdesk und dann natürlich auch die Clients/Peers, weil ja neue Configschlüssel erstellt werden oder?
 
Das umstellen auf VM bedeutet aber auch, das alles neu gemacht werden muss, richtig? Sprich wg-easy, Rustdesk und dann natürlich auch die Clients/Peers, weil ja neue Configschlüssel erstellt werden oder?
Du könntest ja die Konfigs plus Volumes aus der alten Umgebung in die neue kopieren ;) Dann gibt es noch folgendes Skript zum Umwandeln von lxcs in VMS, das habe ich selbst aber noch nicht ausprobiert:

Und Sachen, die nicht unter docker laufen, kannst du natürlich im Lxc lassen.

Oder halt alles lassen wie es ist und damit leben, dass es dir mal kaputt gehen könnte. Meistens geht es ja gut, aber man sollte halt um die Risiken wissen, um das abwägen zu können.
 
Last edited:
  • Like
Reactions: toffer84
Du könntest ja die Konfigs plus Volunes aus der alten Umgebung in die neue kopieren ;) Dann gibt es noch folgendes Skript zum Umwandeln von lxcs in VMS, das habe ich selbst aber noch nicht ausprobiert:

Und Sachen, die nicht unter docker laufen, kannst du natürlich im Lxc lassen.

Oder halt alles lassen wie es ist und damit leben, dass es dir mal kaputt gehen könnte. Meistens geht es ja gut, aber man sollte halt um die Risiken wissen, um das abwägen zu können.
Vielen Dank für die Erklärungen, ich werde es erstmal probieren einen neuen Host aufzusetzen, dann die vzdumps der LXCs einzuspielen. Sollte das nicht klappen, werde ich die LXCs als VM neu machen. Vaultwarden kann ich ja die Tresore sichern, wg-easy und Rustdesk ist zur Not auch relativ schnell neu gemacht.
 
  • Like
Reactions: Johannes S