Project Rebel Homebase: Teil 2 – Das Skelett der Rebellion
Teil 2 von Project Rebel Homebase: der Hardware-Unterbau. Keine (oder wenig) Theorie, keine VMs, keine wohligen Cloud-Illusionen – hier geht es um echtes Metall, echte Hitze und die Grundlage, auf der der Cluster später denken lernt.
Oder: Wie man aus Plastik, Silizium und einem Funken Sturheit eine Infrastruktur baut.
Im ersten Teil ging es um das „Warum“: digitale Souveränität, Bastelfreude, das Bedürfnis, Dinge zu verstehen, statt sie nur zu konsumieren. Aber irgendwann muss man die philosophischen Leitplanken verlassen und anfangen zu schrauben.
Philosophie kann man schließlich nicht anpingen.
Heute geht es um das Skelett der Rebel Homebase – die physische Basis, auf der später alles ruht. Keine Simulation. Keine VM-Kuschelwelt. Hardware. Hitze. Kabel. Realität.
Warum überhaupt physische Nodes?
Die Frage kommt unweigerlich:
„Warum sechs Geräte, wenn du doch einen großen Proxmox-Server hast? Mach doch einfach Docker oder ein paar VMs.“
Weil VMs nicht umfallen. Weil VMs nicht drosseln, wenn es warm wird. Weil VMs keine Ports verlieren, keine Stromversorgung teilen und keine echten Netzwerklatenzen haben.
Kurz:
VMs sind nett. Aber sie sind nicht ehrlich.
Ich will wissen, wie ein verteiltes System fühlt. Nicht nur, wie es laut Dokumentation funktionieren sollte.
Und warum ein solch großes Geschütz wie Kubernetes?
Ein kurzer Exkurs auf den Inhalt einer nächsten Folge:
Um das Konzept meines Clusters zu verstehen, müssen wir die drei Evolutionsstufen der Server-Architektur sauber trennen. Viele werfen Docker und Kubernetes in einen Topf. Das ist aber nur halb richtig.
- Virtualisierung (Das Hochhaus): Das ist der klassische Weg ("Old School"). Man hat einen riesigen Server mit Proxmox, KVM oder ähnlich und teilt ihn in viele virtuelle Maschinen (VMs) auf. Jede VM ist wie ein komplett eigenständiges Haus mit dicken Wänden, eigenem Heizsystem und eigener Verwaltung (volles Betriebssystem mit Kernel). Das ist sicher, isoliert alles perfekt, ist aber schwerfällig. Man verschwendet Unmengen an Ressourcen nur dafür, das Haus am Laufen zu halten, bevor man überhaupt Möbel reinstellt.
- Docker (Die WG-Zimmer): Hier wird es effizienter. Docker-Container teilen sich das Fundament (den Kernel des Host-Betriebssystems) – wie Bewohner in einer WG, die sich Küche und Bad teilen. Jeder hat sein eigenes Zimmer (die Applikation), aber man braucht nicht für jeden Bewohner ein eigenes Haus bauen. Das Problem: Docker ist ein Solist. Wenn ich Docker auf einem Raspberry Pi starte, läuft der Container auf genau diesem Pi. Fällt der Pi aus, ist der Container tot. Wenn ich 6 Pis habe, muss ich mich manuell um 6 einzelne Docker-Instanzen kümmern. Ich bin der Hausmeister für jedes einzelne Zimmer.
- Kubernetes (Die Hotel-Management-Software): Hier kommt der entscheidende Sprung. Kubernetes (K8s/K3s) ist keine Konkurrenz zu Docker, sondern der Chef. In meinem Cluster rede ich nicht mehr mit "Pi Nummer 1" oder "Pi Nummer 4". Ich rede mit dem Cluster. Ich sage: "Starte diese Anwendung 3 mal." Kubernetes entscheidet dann selbstständig: "Okay, Pi 2 hat gerade Langeweile, da packe ich eine Instanz hin. Pi 5 hat noch Platz, da kommt die zweite hin." Der Clou: Wenn ich das Kabel von Pi 2 ziehe und er ausfällt, merkt Kubernetes das sofort: "Mist, eine Instanz fehlt." Und startet sie vollautomatisch auf Pi 6 neu.
Das bedeutet für das Verständnis: Die "Päckchen", die meine Software enthalten, sind weiterhin Docker-Container. Wir nutzen Docker (oder kompatible Formate), um die Software zu verpacken. Aber Kubernetes ist der intelligente Logistik-Manager, der entscheidet, auf welchem LKW (Server) das Päckchen transportiert wird. Docker ist der Standard für das Was, Kubernetes ist die Intelligenz für das Wo und Wie.
Die Anatomie der Maschine
Der Cluster sieht zwar so aus, als hätte ein imperialer Stormtrooper ein Datacenter verschluckt, aber unter der Oberfläche folgt alles einer klaren Hierarchie - und zwar die des rebellischen Bad Batches :-).
Der Ubiquiti-PoE-Switch – das Herzstück
Ganz unten im Rack sitzt ein Ubiquiti-Switch, ein UniFi Pro XG 8 PoE, der zwei Aufgaben hat:
- Daten liefern
- Strom liefern (PoE)
Er hängt über eine 10-Gigabit-Glasfaser direkt am Router – und ist damit die Hauptschlagader zur Außenwelt.
Von hier aus gehen sechs Netzwerkkabel zu den Compute-Nodes. Ein Kabel, zwei Funktionen: Energie + Konnektivität. Minimalistisch. Robust. Elegant.

[Ehrlich gesagt ist dieser Switch komplett überdimensioniert. Er kann 10 GB 2x über Glasfaser und 8x über Cat-Kabel. Ich habe ihn verwendet weil er da war - und sowohl mein PC als auch mein Server 10 Gbit können. Für diesen speziellen Usecase hier reicht jeder beliebige PoE-taugliche Gigabit-Switch. Diese liegen preislich auch etwa bei einem Drittel vom Pro XG 8.]
Die Compute-Nodes – die Klingen der Rebellion
Das Rückgrat des Clusters bilden sechs Raspberry-Pi-Compute-Module:
- 4× Raspberry Pi 5 CM (16 GB RAM + 16 GB eMMC)
- 2× Raspberry Pi 4 CM (4 GB RAM)
Jeder Node hat zusätzlich eine eigene 256-GB-NVMe-SSD.
(SD-Karten kommen mir dafür nicht ins Haus. Wir betreiben Infrastruktur, nicht Heimtierbedarf.)
Die Compute Blades von Uptime Industries
Diese Dinger sind die eigentliche Magie des Aufbaus:
- PoE: Ein Kabel reicht.
- NVMe-Slot: Geschwindigkeit statt Gebastel.
- Saubere Stromversorgung über PoE: Keine 6 Netzteile auf der Steckdosenleiste.
- Modularität: CM4 und CM5 werden einfach aufgesteckt wie Bausteine.


Sie sitzen in individuell gedruckten Schlitten, jeweils zwei Blades teilen sich eine Lüftungseinheit, sodass aktiver Airflow durchs Rack entsteht. Ohne diesen Airflow würden die CM5 unter Last nach exakt zwei Minuten in die Knie gehen. Ich habe es ausprobiert. Es war nicht schön.


Aber zum Thema "schön": Habe ich erwähnt, dass es sich bei den Compute Blades um exzellent dokumentierte Hardware aus einem Crowdfunding-Projekt die inzwischen Datacenter-Klasse erreicht hat handelt?
Das Gehäuse: Wenn Materialkunde auf Realität trifft
Ich muss in meinem recht kleinen Arbeitszimmer klarkommen. Ein 19“-Rack wäre zu groß gewesen. Der W.A.F. (Women Acceptance Factor) wäre damit auch nur schlecht gegeben, ich habs probiert. 10“-Racks findet man nur in der Nische, ausserdem macht "Selberbauen" also: 3D-Drucker anwerfen.
Ich habe das hervorragendes Community-Design Lab Rax 10" von Michael Clements genutzt und auf meinem Bambu Lab X1C ausgedruckt.
PLA? Ein Fehler, den man nur einmal macht
PLA sieht ausgezeichnet aus. PLA hat ein tolles Druckverhalten.
PLA schmilzt ab 55–60 °C.
Ein Cluster produziert Hitze. In einem Rack staut sich Hitze. Allein der PoE-Switch hat normale Betriebstemperaturen (ohne Last) von bis zu 65 Grad. Mein erstes Rack ist unter Last sanft dahin geflossen wie ein zu lange in der Sonne gelassener Wachs-Drache.
Die Lösung:
- PETG – temperaturstabil, robust, ideal
- Schwarz und Weiß – für den Stormtrooper-Look (schaut fancy aus, nicht wahr?)
- Layerhöhe 0.24 – stark genug für strukturelle Bauteile

Gewindeeinsätze – der Unterschied zwischen Bastelprojekt und Infrastruktur
Ich drehe keine Schrauben in Plastik. Nicht einmal bei Legos würde ich das tun.
Stattdessen:
- Ruthex-Gewindeeinsätze
- eingeschmolzen mit Lötkolben (ein verbrannter Finger inklusive)
- dadurch ist industrielle Stabilität und unbegrenzte Demontagen möglich


So etwas entscheidet, ob ein Rack zwei Wochen hält oder fünf Jahre.
Das Storage-Layer – der Außenseiter mit dem Gedächtnis
Ganz oben im Rack, fast unscheinbar, sitzt ein Blade von Zima.
Er ist anders:
- x86 statt ARM
- 2-TB-SATA-SSD statt NVMe
- eigenes Netzteil statt PoE
- und vor allem: Er rechnet nicht. Er speichert.


Der ZimaBlade ist bewusst getrennt vom Kubernetes-Cluster.
Wenn ich die compute-nodes aus Versehen in die Hölle schicke (soll vorkommen habe ich gehört), bleiben meine Daten unangetastet.
Das ZimaBlade ist nicht ganz optimal für den Rack-Einsatz, es hat seinen USB C-Anschluss zur Stromversorgung auf der Vorderseite. Deshalb muss man hier eine "Rückführung" einbauen. Zu sehen direkt neben den beiden SSD-Schlitten. Und ja, die kann man nach vorne rausziehen und wechseln.
NFS – die Versorgungsleitung des Schwarms
Was ist NFS?
Oder: Warum meine Pis glauben, sie hätten eine gemeinsame Festplatte
NFS ist im Grunde der einer der besten und und häufigst kopierten Tricks der Linux -/Unix-Welt:
„Tu einfach so, als würdest du lokal speichern. Aber in Wahrheit liegt alles auf einem Server, der hoffentlich nicht abraucht.“
Mehr ist es nicht. Und genau deshalb liebe ich es.
Was NFS wirklich macht
- Der Server sagt: „Hier, dieses Verzeichnis darfst du benutzen.“
- Der Client sagt: „Cool, ich mounte das. Ab jetzt so tun, als wäre es mein eigenes.“
- Und ab diesem Moment schreibt der Client fröhlich auf etwas, das physisch ganz woanders liegt.
Es ist die Illusion des lokalen Speichers. Nur ohne SD-Karten, Dateimord und sonstige Heimlab-Desaster.
Warum das in meinem Cluster unverzichtbar ist
Kubernetes braucht irgendwo Persistenz, also einen Ort, an dem Daten über den Tod eines Pods hinaus existieren dürfen.
Aber:
Meine Raspberry Pis sind kleine, flüchtige Digital-Nomaden. Sie kommen, gehen und sterben, wenn ich ein Kabel ziehe.
Deshalb:
- Die Pis tun so, als hätten sie eine lokale Platte.
- In Wahrheit landen alle Daten sauber auf dem ZimaBlade.
- Der ZimaBlade nutzt ZFS und Snapshot-Magie, um den ganzen Kram abzusichern.
Das ist Storage as a Service, nur ohne Cloud-Consumption-Rechnung am Monatsende.
Der eigentliche Charme
NFS ist herrlich unspektakulär.
Es ist kein „Next-Gen Distributed Hyper-Meta-Filesystem“.
Es ist kein akademischer Alptraum, schnell umsetzbar.
Es ist das Unix-Pendant zu: „Lass mich einfach arbeiten.“
Und genau deshalb eignet es sich perfekt für mein Cluster:
- simpel
- stabil
- von Kubernetes gut verstanden
- und vor allem: es funktioniert
Fällt ein Pi aus? Egal. Die Daten liegen auf dem Storage-Node und warten geduldig, bis der nächste Worker sie braucht.
Kurz gesagt
NFS ist die logistische Versorgungsleitung meines Schwarms.
Ohne NFS würden meine Compute-Nodes isolierte Inseln sein.
Mit NFS sind sie vernetzte Individuen mit gemeinsamen Gedächtnis.
Und das ist genau das, was man in einem echten Cluster braucht.
Die Pis greifen über NFS auf den ZimaBlade zu, als läge die Platte lokal bei ihnen.
Kubernetes merkt davon nichts. Die Anwendungen merken davon nichts.
Es ist die Illusion lokaler Platten – ohne die Nachteile lokaler Platten.
ZFS – die Versicherungspolice
In Kürze: ZFS prüft ständig, ob meine Daten noch integer sind. Es macht Snapshots, Kompression, Prüfsummen, Self-Healing. Ich kann einen Zustand einfrieren, Mist bauen und zwei Sekunden später zurückspringen.
ZFS: Ein Dateisystem, das nicht nur speichert, sondern mitdenkt
ZFS ist kein normales Dateisystem.
ZFS ist das Dateisystem, das entstand, als die Ingenieure bei Sun Microsystems beschlossen, ein Schweizer Taschenmesser zu bauen.
Während traditionelle Dateisysteme versuchen, einfach nur Dateien irgendwohin zu schreiben, verfolgt ZFS einen anderen Ansatz:
„Ich speichere deine Daten. Aber nur ordentlich, und nur, wenn ich sicher bin, dass sie auch wirklich stimmen.“
Warum ZFS anders ist
🔹 Dateisystem, Volume-Manager und RAID in einem
Andere Systeme brauchen drei Tools: eines zum Formatieren, eines zum Partitionieren, eines zum RAID-Bauen.
ZFS sagt: „Nö. Ich mach das alles selbst.“
Das spart Fehler, Komplexität und graue Haare.
🔹 Datenintegrität first, alles andere später
Jeder einzelne Block wird mit einer Prüfsumme versehen.
Beim Lesen wird geprüft, ob der Inhalt noch korrekt ist.
Wenn nicht?
ZFS repariert still und leise aus der Redundanz.
Kein anderer Mainstream-Stack macht das so konsequent.
🔹 128-Bit-Architektur
Heißt auf Deutsch:
Du wirst das Limit deiner Lebenszeit nicht erreichen, bevor ZFS an seine Kapazitätsgrenzen stößt. (Erinnert ihr euch noch an das Chaos der alten FAT-Versionen? Kurze Namen, dann improvisierte Exxtensions ...)
🔹 Kompression ohne Denken
Einfach einschalten.
ZFS komprimiert alles automatisch, intelligent und transparent.
Oft gewinnst man so tatsächlich 20–50 % Speicherplatz, ohne dass man merkst, dass etwas passiert.
🔹 Snapshots, die schneller sind als der Fehler
Ein ZFS-Snapshot:
- ist praktisch instant
- braucht fast keinen Platz
- ist unveränderlich (perfekt gegen Ransomware & Benutzerfehler)
- kann repliziert werden wie ein Git-Commit
Für Backups ist das Gold wert.
Für Kubernetes: ebenfalls.
🔹 Speicherpools statt Partitionen
ZFS wirft alle Platten in einen Pool und verwaltet sie wie einen großen See statt viele kleine Tümpel.
Der Vorteil: maximale Flexibilität, minimale mentale Belastung.
Warum ich ZFS im Rebel-Cluster nutze
- Weil meine Daten nicht verrotten sollen (Bitrot ist real, und kommt selten allein).
- Weil Snapshots und Replikation kinderleicht sind.
- Weil Kubernetes eine stabile Storage-Grundlage braucht.
- Weil ich keine Lust auf Dateisystem-Drama habe.
ZFS macht den ZimaBlade nicht nur zu einem Speichergerät, sondern zu einem Gedächtnis, das sich selbst überwacht, selbst repariert und sich im Zweifel auf einen früheren Zustand zurückwuppst.
Kurz gesagt:
ZFS gibt mir Ruhe.
Alles andere gibt mir Bauchschmerzen.
Datasets – Ordnung statt Datengrab
Jede Art von Daten bekommt ein eigenes Dataset:
- Cluster-Storage
- Backups
- Logs
- Container-Daten
Damit herrscht Struktur statt Speichersuppe.
Ähm, Dataset?
„Dataset? Ach so, ein Ordner. Oder vielleicht sowas wie eine Partition unter Windows.“
Nein.
Das ist ungefähr so, als würde man einen Airbus A380 mit einem Klappfahrrad vergleichen, weil beides irgendwie Räder und sowas wie einen Rahmen hat.
Was ein Dataset wirklich ist
Ein Dataset ist ein eigenständiges, miniaturisiertes Dateisystem innerhalb deines ZFS-Pools – aber ohne den ganzen Partitionierungs-Wahnsinn, den Windows einem abverlangt. Denk freier.
Du kannst für jedes Dataset eigene Regeln definieren:
- Kompression
- Quotas
- Reservierungen
- Recordsize
- Snapshothäufigkeit
- Zugriffsrechte
- Deduplizierung
- Caching-Verhalten
Es verhält sich wie ein kleiner, intelligenter Speicherbereich, der weiß, was er werden will.
Der Unterschied zu Windows-Partitionen
Unter Windows musst du:
- Platten partitionieren
- Volumes formatieren
- Buchstaben zuweisen (C:, D:, E:, J:, Z:, was auch immer)
- Und wenn du falsch geplant hast. Formatieren, fluchen, neu anfangen.
Eine Partition ist starr. Wie ein Betonblock. Einmal gegossen, kaum flexibel.
Ein Dataset dagegen:
- braucht keine Partition
- wächst dynamisch im Pool
- lässt sich jederzeit konfigurieren
- kann für jeden Zweck anders optimiert werden
- erzeugt Snapshots in Sekunden
- ist völlig unabhängig von der physischen Struktur der Platten
ZFS-Pool = der ganze Teich
Dataset = ein sauber abgegrenzter Bereich darin
Der Unterschied zu einem Verzeichnis
Ein Verzeichnis ist ein Namensschild.
Ein Dataset ist ein Konfigurationsobjekt.
Ein normaler Ordner hat:
- keine eigene Kompression
- keine eigenen Quotas
- keine eigenen Snapshots
- kein eigenes Caching
- keine eigene Blockgröße
- keine eigene Replikationslogik
- keine eigene Deduplizierung
Ein Dataset dagegen ist ein Mini-Dateisystem mit eigener Persönlichkeit.
Beste Analogie:
- Ein Ordner ist ein Karton.
- Ein Dataset ist ein ganzer Raum, den du individuell einrichten kannst.
In Kubernetes-Umgebungen bedeutet das:
/tank/k3s-nfskann schnelle, große Blöcke haben/tank/backupskann ultra-komprimiert laufen/tank/logskann hart begrenzt werden (Quota!), damit nichts aus dem Ruder läuft
Ein Verzeichnis könnte all das nicht.
Warum das im Rebel-Cluster entscheidend ist
Weil ich unterschiedliche Workloads habe, die unterschiedliche Anforderungen haben:
- Kubernetes-Volumes → Performance + Konsistenz
- Backups → Kompression + viele Snapshots
- Medien → großer Blocksize + Kompression
- Logs → kleine Blöcke, begrenzter Platz
Datasets erlauben mir, jede Art von Daten exakt so zu behandeln, wie sie es braucht.
Ohne Datasets würdest ich also:
- Performance verlieren
- Chaos riskieren
- Fehlkonfigurationen multiplizieren
- Snapshots unkontrolliert wachsen lassen
Datasets geben Ordnung, Kontrolle und Flexibilität.
Materialliste (damit man es wirklich nachbauen kann)
3D-Druck:
- PETG (weiß + schwarz) Ich habe mich für Original-Filament von Bambu Labs entschieden, das klappt am unproblemtischsten mit meinem Drucker)
- STL-Dateien für das Lab Rax 10" Case (bei Interesse - man kann das auch bei mir bestellen 😎
- Ruthex-Gewindeeinsätze M2.5 und M3 (bei mir waren es Quarzman - die waren einfach schneller lieferbar)
Compute-Layer:
- 4× Raspberry Pi CM5 (16 GB RAM)
- 2× Raspberry Pi CM4 (4 GB RAM) (warum die beiden CM4er fragt ihr? Ich hatte sie noch "herumliegen". Nehmt einfach mehr 5er. Die haben wesentlich mehr Leistung. Das merkt ihr)
- 6× NVMe-SSDs (256 GB, beliebige Marke)
- 6× Compute Blades von Uptime Industries
- 3x Lüftereinheiten (2× dual-fan module für die Blade-Schlitten)
Storage-Layer:
- ZimaBlade
- 2-TB-SATA-SSD (hier geht quasi jede. What you pay is what you get. nehmt etwas mit größerer TWB)
- USB-C-Netzteil
Netzwerk-Layer:
- Ubiquiti PoE-Switch (8- oder 16-Port, je nach Geschmack)
- 10G SFP+-Uplink zum Router
- hochwertige Netzwerkkabel (CAT6A)
Fazit: Der Körper steht – jetzt fehlt die Seele
Die Hardware ist verschraubt, verkabelt und (anders als PLA) nicht mehr weichkochbar.
Das Skelett der Rebel Homebase steht.
Was jetzt folgt, ist der Übergang von Metall und Plastik zu Software und Verhalten:
- Betriebssysteme
- Netzwerk
- K3s
- Storage-Class
- Backups
- Und der Moment, in dem der Cluster das erste Mal „lebt“
Der nächste Teil wird also weniger Werkstatt – und mehr Gehirnchirurgie.
Wir bringen der Maschine bei, wie man denkt.
Stay tuned.