Lab-Rückblick: weniger blinde Flecken, bessere Rückwege

Vom Sommer bis Anfang Oktober: Alloy statt Promtail, Langzeitmetriken mit Thanos, SLOs mit Pyrra und verschlüsselte Off-site-Backups bei Cloudflare R2. Dazu die weniger glamourösen Änderungen, die ein Lab im Alltag belastbarer machen.
Table of contents

Im letzten größeren Lab-Rückblick stand eine ziemlich lange offene Rechnung: bessere Beobachtbarkeit, Backups über mehrere Schichten und weniger Handarbeit an den Betriebsgrenzen. Seitdem kamen neue Dienste hinzu. Interessanter finde ich aber die Änderungen, die man auf einem Screenshot kaum sieht: Logs fehlen nicht mehr ausgerechnet von der Control Plane, Backups verlassen die Ausfalldomäne des Clusters, und ein stilles Monitoring gilt nicht automatisch als gesund.

Hier die relevanten Veränderungen seit dem Sommer — keine Liste aller Image-Bumps, sondern das, was am Betriebsmodell tatsächlich etwas geändert hat. Stand ist die öffentliche Lab-Konfiguration Anfang Oktober 2026.

Monitoring bekommt ein Gedächtnis#

Promtail ist durch Grafana Alloy ersetzt. Der entscheidende Punkt war dabei nicht der neue Name, sondern das Verhalten beim Neustart. Alloy liest als DaemonSet die Pod-Logs vom Dateisystem; seine Lesepositionen liegen persistent unter /var/lib. Der konfigurierte Pfad muss dafür tatsächlich gemountet sein — ein storagePath allein macht eine Container-Schreibschicht noch nicht dauerhaft.

Die bisherigen Labels bleiben erhalten, damit bestehende Loki-Abfragen weiter passen. Außerdem toleriert das DaemonSet den Control-Plane-Taint. Ohne diese unscheinbare Zeile würden gerade die Logs von API-Server, etcd und Scheduler fehlen.

Loki hat eine explizite Aufbewahrungsgrenze von 31 Tagen und wertet über den Ruler zusätzlich logbasierte Alert-Regeln aus. Das verhindert kein volles Volume unter jeder Last, beendet aber das frühere Prinzip „Chunks sammeln, bis der Datenträger widerspricht“.

Für Metriken kam Thanos hinzu: Der Prometheus-Sidecar lädt Blöcke nach Garage, der Store Gateway erschließt die Historie, und Thanos Query verbindet sie mit den aktuellen Daten. Konfiguriert sind:

AuflösungAufbewahrung
Rohdaten60 Tage
5 Minuten120 Tage
1 Stunde240 Tage

Das sind Aufbewahrungsziele, keine bereits vollständig gefüllten Zeiträume. Und Garage liegt weiterhin im Cluster: Langzeitspeicherung ist hier kein unabhängiges Off-site-Backup.

Von roten Kurven zu überprüfbaren Zielen#

Mit Pyrra sind Service Level Objectives dazugekommen. Statt nur auf einen einzelnen Ausschlag zu reagieren, lässt sich damit fragen: Wie viel unseres Fehlerbudgets haben wir im betrachteten Zeitraum verbraucht?

Der Blog hat beispielsweise ein konfiguriertes Verfügbarkeitsziel von 99,9 Prozent über zwei Wochen, abgeleitet aus Blackbox-Probes. Andere Ziele betrachten API-Fehler oder Upstream-5xx am Gateway. Das sind bewusst unterschiedliche Messgrößen: Eine erfolgreiche Probe beweist etwas anderes als ein niedriger Anteil fehlgeschlagener echter Requests.

Die SLOs sind deshalb keine SLA-Werbung für ein Homelab. Sie zwingen mich, „funktioniert meistens“ durch eine konkrete Aussage zu ersetzen — einschließlich der Frage, was die jeweilige Messung überhaupt sieht.

Dazu kommen zwei externe Lebenszeichen:

  • Der Monitoring-Deadman prüft alle fünf Minuten Prometheus, den absichtlich dauerhaft feuernden Watchdog-Alert und die Readiness des Alertmanagers.
  • Der Backup-Deadman meldet nur dann Erfolg, wenn das erwartete Backup-Inventar vollständig und hinreichend frisch ist.

Die Gegenstelle läuft bei Healthchecks.io außerhalb des Clusters. Wenn hydra ganz ausfällt, muss nicht erst hydra selbst noch eine Nachricht zustellen können. Der Monitoring-Check beweist allerdings nicht die komplette Zustellung bis zum Menschen; insbesondere ist er kein End-to-End-Test des KI-gestützten Alert-Pfads.

Backups verlassen die eigene Ausfalldomäne#

Die wichtigste Änderung an der Datensicherung ist Cloudflare R2 als primäres Off-site-Ziel. BorgBase bleibt während der Migration parallel aktiv. Die Daten werden vor dem Upload verschlüsselt; je nach Sicherungsweg übernimmt das restic oder rclone crypt.

Dabei gibt es nicht „das eine Cluster-Backup“, sondern getrennte Verantwortlichkeiten:

ZustandSicherungsweg
Anwendungsdateien auf PVCsVolSync und restic
Control-Plane-Zustandgeplante Talos-etcd-Snapshots, anschließend extern gesichert
PostgreSQL auf dem Barman-PfadBasis-Backups und WAL nach Garage, verschlüsselte Kopie nach R2
Ausgewählte passive Kubernetes-MetadatenVelero, anschließend verschlüsselte Kopie nach R2

Velero ist absichtlich kein zweiter Deployment-Controller. Seine Allowlist umfasst passive Metadaten, nicht pauschal Workloads, Secrets, Flux- oder Datenbank-Controller. Ein Restore soll nicht versehentlich eine Datenbank starten, bevor ihr Datenbestand bereitsteht.

Auch die Grenzen bleiben sichtbar: Nicht jede PostgreSQL-Instanz ist bereits auf den Off-site-Barman-Pfad umgezogen. Lokale Ceph-Snapshots sind nützlich, ersetzen aber keine unabhängige Kopie. Und „Job erfolgreich“ ist erst der Anfang: Repository vollständig prüfen, in ein separates PVC wiederherstellen, Inhalt und Nutzbarkeit kontrollieren. Diese Restore-Disziplin bleibt wichtiger als der Name des Storage-Anbieters.

Updates: die interessanten Stellen waren die Nebenwirkungen#

Talos, Kubernetes, Rook/Ceph und die Gateway-Komponenten wurden weitergezogen. Spannender als ihre Versionsnummern waren drei konkrete Lehren:

  • Ein PodDisruptionBudget macht aus einer einzelnen Datenbank keine HA-Datenbank. Bei Singleton-Instanzen kann es einen geplanten Drain blockieren, ohne eine zweite Instanz herbeizuzaubern. Die betroffenen CNPG-Konfigurationen verzichten deshalb darauf.
  • Right-Sizing ist Arbeit, nicht nur ein Dashboard. Aus den VPA-/Goldilocks-Empfehlungen wurden echte Änderungen an Ceph- und CI-Ressourcen. Der Build-Betrieb darf den Storage-Unterbau nicht nebenbei verhungern lassen.
  • Ein Rollback hat Datenkompatibilität als Voraussetzung. Bei Pocket ID zeigte sich das sehr direkt: Ein älteres Image vertrug das bereits neuere Datenbankschema nicht. „Vorherigen Tag eintragen“ ist kein universeller Rückweg.

Außerdem wurden Vault und die verbliebenen Mastodon-Manifeste aus dem Repo entfernt. Stillgelegte Infrastruktur auch deklarativ abzuräumen ist Teil der Wartung, nicht nur kosmetisches Aufräumen.

Kommunikation wird ein eigener Dienst, nicht nur ein Login#

Matrix bekam Element Web und einen Element-Call-Unterbau mit LiveKit und Token-Dienst. Dazu gehören NetworkPolicies und eigene Metriken; funktionierender Chat beweist schließlich noch keinen funktionierenden Medienpfad.

Pocket ID ist als OIDC-Login an Synapse angebunden. Der Übergang ist ausdrücklich gestuft: SSO zusätzlich zum bestehenden Passwortpfad, nicht eine beiläufig behauptete vollständige Abschaffung aller Passwörter.

Drei größere Themen bekommen ihren eigenen Platz#

Drei Änderungen würden diesen Rückblick sprengen:

  • tailnet-operator : deklarative Verbindungen statt verteilter Proxy- und Policy-Handarbeit.
  • Paperless-ngx : ein Dokumentenarchiv mit kontrollierten Importwegen und überprüfbarer KI-Klassifikation.
  • ZeroClaw : Alert-Triage mit lesendem Clusterzugriff statt eines Bots mit Reparaturvollmacht.

Der gemeinsame Nenner ist nicht mehr Automatik um jeden Preis. Es sind klarere Zuständigkeiten und überprüfbare Rückwege: Wer misst? Wer entscheidet? Wer darf schreiben? Und was bleibt übrig, wenn der bequeme Normalpfad ausfällt?

Die zugrunde liegenden Manifeste und Runbooks stehen im öffentlichen Lab-Repository , insbesondere in docs/BACKUP.md und den Monitoring-Anwendungen. Die alte Rechnung ist nicht vollständig beglichen. Aber mehrere ihrer Posten sind jetzt messbar — und damit endlich vernünftig bearbeitbar.