Tag 33
Docker und NFS
Wie ich es schon bei Tag 28 geschrieben hatte, bin ich aktuell mit TrueNAS Scale sehr zufrieden.
Und auch mit Docker in Verbindung mit TrueNAS, habe ich mich nun einige Zeit beschäftigt.
Wie ja bekannt ist, hat TrueNAS nicht so richtig eine native Docker Unterstützung. Man kann zwar Docker Container in Kubernetes „irgendwie“ integrieren. Aber das geht eher in die Richtung einer Bastellösung.
Auch die TrueNAS Scale Apps „behelfen“ sich diesem Trick. Des Weiteren haben diese noch einen signifikanten Nachteil → man kann diese nicht auf einem verschlüsselten Dataset ablegen.
Das nachträgliche Installieren von Docker ist auch keine praktikable Lösung. Da nicht sichergestellt werden kann, dass dies nach einem Update noch zuverlässig funktioniert.
Meine ersten Lösung war, die Container in meiner Docker VM auf meinem Proxmox System laufen zu lassen und die Daten per NFS auf dem NAS abzulegen. Um das ganze robuster zu gestalten, sollten die NFS Shares immer über Docker Volumes in den Container eingebunden werden.
Das geht soweit gut, bis:
- der Container Benutzer- und Gruppenrechte ändern möchte
- das Netzwerk einen „Schluckauf“ hat
- das NFS Share nicht mehr verfügbar ist
Nach einigem probieren und testen sowie dem kurzzeitigen produktiven Betrieb, musste ich feststellen dass dies nicht die Endgültige Lösung sein kann.
Durch einiges an Recherche in diesem Bereich, hat mich dann schlussendlich Level1Techs auf die wohl richtige Lösung geführt.
Vorab zwei Begriffserklärungen:
- br0 = Netzwerkbrücke zwischen Host und Gast
- enp1s0 = Netzwerkkarte des Hosts
Im angehängten Video, wird genau auf das Problem eingegangen und mit einer eigentlich genialen Lösung behoben:
Man nutzt die von TrueNAS Scale zur Verfügung gestellte VM Funktionalität und richtet sich damit ein Docker Host direkt auf dem Storage System ein.
Die im Video beschriebene Netzwerklösung, ist aber nicht zu empfehlen. Diese wurde durch eine simplere und clevere Variante in der folgenden ergänzenden Anleitung unter „Stage 6“ ersetzt.
Hello everyone, I decided to write this guide which is an amalgamation of all the solutions found on this post by Wendell: Post Disclaimer: This guide is based on my personal experience on 2 TrueNAS systems, follow at your own discretion. I will try to help if I can, and update this guide if...
forum.level1techs.com
Des Weiteren wird das NFS Share nicht mehr über Docker Volumes gemountet, sondern direkt im Docker Host, also der VM auf dem TrueNAS Scale System.
Dieses ganze Konzept hat folgende Vorteile:
- die virtuelle Festplatte der VM kann auf einem verschlüsselten Dataset abgelegt werden
- die Daten der Docker Container werden auf einem NFS Share abgelegt, welches auf einem verschlüsselten Dataset liegt
- es ist für die Container problemlos möglich Benutzer- und Gruppenrechte des NFS Mounts zu ändern
- es gibt ein dediziertes internes Netzwerk „br0“ zwischen dem Host und Gast (externe Verbindung zum Heimnetzwerk ist für die Container parallel möglich)
- die VM und die resultierende NFS Verbindung läuft immer nur dann, wenn auch der Host und damit das NFS Share verfügbar ist.
Natürlich gibt es auch Nachteile:
- etwas aufwändigere Erstkonfiguration
- das Betriebssystem der VM muss zusätzlich gepflegt werden
Die Einrichtung der VM war nicht viel anders als unter Proxmox, wobei eine Sache extrem auffiel.
Die Schreib- und Leserate der virtuellen Festplatte war extrem langsam, so langsam das sich Ubuntu Server nicht installieren lies.
Dies schien ein bekanntes Problem unter TrueNAS Scale zu sein, was schon seit einiger Zeit nicht behoben ist.
Witzigerweise ist dies aber kein Bug oder Softwarefehler, vielmehr ist es eine falsche Default Einstellung im VM Wizard von TrueNAS.
Dort wird standardmäßig eine AHCI Emulation ausgewählt, welche extrem langsam ist.
Einfaches umstellen auf VirtIO behebt das Problem sofort!
Die Installation von Ubuntu Server braucht keiner weiteren Erklärung, davon gibt's genug im Netz.
Das einzige was es zu beachten gilt ist, das man noch die Netzwerkbrücke (welche man vorher unter TrueNAS eingerichtet hat, beschrieben im verlinkten Guide) als weitere Netzwerkkarte hinzufügt, sodass man im Gast zum Schluss zwei Netzwerkkarten, einmal nach draußen und einmal für internen Verkehr einrichtet.
Anbei habe ich mal eine einfache Grafik erstellt, welche den aktuellen Softwareaufbau verdeutlicht: