Designentscheide

Warum es so gebaut ist.

Für jeden Teil des Labs gab es eine einfachere oder beliebtere Alternative. Das sind die Entscheide, die es geprägt haben, wogegen sie getroffen wurden und was sie kosten. Jeder ist im Repository des Labs festgehalten, bevor etwas gebaut wird.

  1. 01Hardware

    Backups statt Replikate

    Gewählt
    ZFS auf dem Host, mit einem Mirror für Unersetzliches und Backups, die das Haus verlassen.
    Statt
    Ceph oder Longhorn, repliziert über die Nodes.
    Warum
    Auf einem Server landet jedes Replikat auf denselben Disks. Das verdreifacht die Schreiblast und bringt keine Sicherheit, weil der Ausfall, den es abfangen soll, alle Kopien gleichzeitig trifft.
    Der Preis
    Ein totes Disk-Paar heisst Restore, kein Failover. Der Restore wird getestet, damit das nur lästig bleibt.
  2. 02Hardware

    Bewusst keine Redundanz für Medien

    Gewählt
    Eine grosse einzelne Disk für Filme und Serien, getrennt von allem anderen.
    Statt
    Auch die Mediathek zu spiegeln.
    Warum
    Medien lassen sich neu beschaffen, Fotos und Dokumente nicht. Eine zweite grosse Disk würde den Teil schützen, auf den es am wenigsten ankommt.
    Der Preis
    Stirbt diese Disk, muss die Mediathek von Hand neu aufgebaut werden. Nichts Unersetzliches liegt darauf.
  3. 03Virtualisierung

    Der Manager läuft nie auf dem, was er verwaltet

    Gewählt
    Sidero Omni in einer eigenen VM neben dem Cluster, mit einem Login, der nicht vom Cluster abhängt.
    Statt
    Den Manager im Cluster zu betreiben oder sich über den Identity Provider des Clusters bei ihm anzumelden.
    Warum
    Den Cluster wiederherzustellen darf nie den Cluster voraussetzen. Wenn alle Nodes down sind, muss das Werkzeug, das sie neu aufbaut, trotzdem starten und mich trotzdem hereinlassen.
    Der Preis
    Eine Maschine mehr, die aktuell gehalten werden muss, und ein Login mehr, um den man sich kümmern muss.
  4. 04Virtualisierung

    Disks für Pods über einen engen Schlüssel

    Gewählt
    Proxmox CSI, das nur ein eingeschränktes Token hält, mit dem es Disks anlegen und anhängen kann.
    Statt
    Einen Storage-Treiber, der sich per SSH als root auf dem Host anmeldet.
    Warum
    Der Cluster steht zum Internet hin. Ein Einbruch dort soll keinen root-Zugang zum Server darunter mitbringen.
    Der Preis
    Keine Volume-Snapshots in Kubernetes. Volumes werden stattdessen als verschlüsselte Backups hinauskopiert.
  5. 05Cluster

    Kubernetes, obwohl Compose reichen würde

    Gewählt
    Kubernetes für jede App im Lab.
    Statt
    Docker Compose auf einer einzelnen Maschine.
    Warum
    Compose würde jeden Dienst hier mit einem Bruchteil des Aufwands betreiben. Kubernetes sauber zu betreiben ist der Zweck des Labs, also bekommt es bewusst das schwerere Werkzeug.
    Der Preis
    Mehr bewegliche Teile, als eine Familie braucht. Jedes muss sich seinen Platz auf der Stack-Karte verdienen.
  6. 06Cluster

    Ein Betriebssystem ohne Shell

    Gewählt
    Talos Linux: unveränderlich, per API konfiguriert, ohne SSH und ohne Paketmanager.
    Statt
    k3s oder kubeadm auf einem gewöhnlichen Linux.
    Warum
    Nodes, die zum Internet hin dienen, sollen so wenig wie möglich enthalten. Upgrades werden zum Image-Tausch, und die Konfiguration lebt in einer Datei statt in der Shell-History.
    Der Preis
    Kein schneller Fix per Login. Jede Änderung geht über die Konfiguration, auch um zwei Uhr nachts.
  7. 07Plattform

    Eine Tür, mit Login davor

    Gewählt
    Envoy Gateway mit der Gateway API, das Authentik fragt, bevor eine Anfrage die Apps dahinter erreicht.
    Statt
    ingress-nginx und die eigene Gateway-API-Umsetzung von Cilium.
    Warum
    ingress-nginx ist eingestellt und bekommt keine Sicherheitsupdates mehr. Das Gateway von Cilium hat keinen Anschluss für einen externen Login, das hätte einen eigenen Login pro App bedeutet.
    Der Preis
    Ein schwereres Gateway als nötig. Ein leichteres ist als Ausweichlösung notiert.
  8. 08Plattform

    Secrets kommen nie in Git, auch nicht verschlüsselt

    Gewählt
    Ein gehosteter Tresor ausserhalb des Labs. Der Cluster holt Secrets von dort, Git enthält nur Verweise.
    Statt
    Verschlüsselte Secrets neben den Manifesten im Repository.
    Warum
    Eine verschlüsselte Datei bleibt ein Ziel, und ihr Schlüssel muss irgendwo liegen. Ein Tresor ausserhalb des Labs übersteht einen Totalausfall. Die wenigen Vertrauensanker bleiben im Passwortmanager, weil man sonst das System bräuchte, um das System wiederherzustellen.
    Der Preis
    Eine Abhängigkeit von einem externen Dienst. Laufende Secrets funktionieren weiter, wenn er nicht erreichbar ist; nur Änderungen warten.
  9. 09Plattform

    Ein Backup zählt erst, wenn es wiederhergestellt wurde

    Gewählt
    Ein Restore-Test, der selbstständig ein Backup zurückholt und das Ergebnis prüft. Der Live-Status zeigt, wann er zuletzt bestanden hat.
    Statt
    Darauf zu vertrauen, dass die Backup-Jobs Erfolg melden.
    Warum
    Ein Backup-Job kann monatelang Erfolg melden und dabei etwas schreiben, das sich nicht wiederherstellen lässt. Der einzige Beweis ist ein Restore.
    Der Preis
    Zusätzliche Last und eine Sache mehr, die Alarm schlagen kann.
  10. 10Anwendungen

    Ein VPN statt eines Mesh-Overlays

    Gewählt
    WireGuard auf dem Router als einziger Weg von aussen zur Admin-Seite.
    Statt
    Tailscale, das die meisten Homelab-Anleitungen empfehlen.
    Warum
    Tailscale löst das Problem einer fehlenden öffentlichen Adresse. Dieser Anschluss hat eine, also wäre das Overlay nur ein weiterer Zugang gewesen, den man absichern muss und den jemand anderes betreibt.
    Der Preis
    Die Apps antworten nur auf Webverkehr aus einem Land. Im Ausland verbindet die Familie zuerst den Tunnel. Das ist der grösste Nachteil, und er ist akzeptiert.
  11. 11Anwendungen

    Diese Website lebt getrennt vom Lab

    Gewählt
    Eine statische Seite am Edge. Das Lab schickt ihr einen kleinen signierten Status; nichts greift ins Lab hinein.
    Statt
    Die Seite auf dem Cluster zu hosten, den sie beschreibt.
    Warum
    Eine Statusseite, die mit dem ausfällt, worüber sie berichtet, sagt nichts aus. Hinausschicken heisst ausserdem: kein Weg von aussen hinein für die Seite.
    Der Preis
    Der Status kann ein paar Minuten alt sein. Die Seite sagt, wie alt.

← Zurück zur StoryDie ganze Stack-Karte →