Backup & Restore bei openDesk Edu â der 3-Tier-Ansatz fĂŒr Hochschul-Datenhoheit
Die These: Datenhoheit entscheidet sich nicht beim Login, sondern beim Backup. Wer seine Daten nicht im Ernstfall zurĂŒckbekommt, besitzt sie nicht wirklich â egal wie souverĂ€n die Plattform sonst ist.
Die RealitĂ€t: Eine Hochschulplattform aus ĂŒber 20 Open-Source-Diensten hat sehr unterschiedliche Datenklassen: SchlĂŒssel-Wert-Speicher mit Ausfallfolge in Sekunden, Dateien mit Terabyte-Volumen und experimentelle KI-Sandboxes. Eine einzige Backup-Strategie passt auf keine dieser Klassen.
Unser Ansatz: Statt eines Einheits-Backups betreiben wir ein 3-Tier-Modell â Datenklassen mit eigenem RPO, RTO und eigener Retention, umgesetzt mit dem k8up-Operator auf Kubernetes, ruhend auf Ceph und S3, mit verifizierten Restores und einer ehrlichen Gap-Analyse.
Warum Backup die eigentliche Datenhoheits-Frage ist
Microsoft 365, Google Workspace oder Zoom zu verlassen ist der sichtbare Teil der SouverÀnitÀtswende. Der unsichtbare Teil beginnt dort, wo die Entscheidung aufhört zu glÀnzen: im Rechenzentrum, um 3 Uhr nachts, vor einem defekten Speichercontroller oder einer versehentlich gelöschten Tabelle.
Datenhoheit im juristischen Sinne heiĂt: Der Verantwortliche kann bestimmen, wo Daten liegen und wer Zugriff hat. Datenhoheit im betrieblichen Sinne heiĂt: Der Verantwortliche bekommt seine Daten auch dann zurĂŒck, wenn etwas schiefgeht. AusfĂ€lle sind keine Frage von âob", sondern von âwann" â und genau dafĂŒr baut man ein Backup-System, das mehr ist als ein Perioden-Job, der fröhlich in ein Speicherloch schreibt.
FĂŒr Hochschulen kommt hinzu, dass viele Daten unwiederbringlich sind: PrĂŒfungsleistungen, Forschungsdaten, Qualifikationsarbeiten, E-Mail-VerlĂ€ufe ĂŒber Semester. Ein vergessener Rechencluster baut sich neu; eine verlorene Doktorarbeit nicht. Deshalb gehört die Backup-Strategie neben SSO und Monitoring zu den drei SĂ€ulen eines produktiv betriebenen offenen Campus.
k8up: Backup als GitOps-native Ressource
Statt Cronjobs auf einer VM haben wir Backup bei openDesk Edu als Teil der Kubernetes-Plattform modelliert â mit k8up (v2.13.0), dem Backup-Operator des K8up-Projekts:
apiVersion: k8up.io/v1
kind: Schedule
metadata:
name: backup-live
spec:
backup:
schedule: "15 2 * * *" # Nacht ab 02:15
backend:
repoPasswordSecretRef:
name: backup-credentials
key: password
s3:
endpoint: s3.hrz.uni-marburg.de
bucket: backups
accessKeyIDSecretRef:
name: backup-credentials
key: accessKey
secretAccessKeySecretRef:
name: backup-credentials
key: secretKey
Der Vorteil ist architektonischer Natur: Backups sind deklariert, versioniert und reviewbar â sie liegen als YAML im Git-Repository neben den Services, die sie sichern. Die nĂ€chtliche Sicherung ist damit genauso nachvollziehbar wie der Deployment-Prozess. Restic ĂŒbernimmt dabei die eigentliche Datenspeicherung: dedupliziert, verschlĂŒsselt, mit Snapshots, die ĂŒber Jahre hinweg konsistent bleiben. Der Zielspeicher ist ein S3-Bucket (im Betrieb: s3.hrz.uni-marburg.de), der extern zum Cluster liegt â so ĂŒberlebt das Backup auch einen Totalausfall der Plattform selbst.
Im Produktiveinsatz sichert k8up aktuell 6 RWX-PVCs direkt auf S3 â darunter die geteilten Volumes von Nextcloud, OpenProject und den Groupware-Diensten. Ein Grafana-Backup-Dashboard macht den Zustand der Schedules und Snapshots sichtbar, statt sich auf âgeht schon" zu verlassen.
Das 3-Tier-Modell: RPO, RTO und Retention pro Datenklasse
Der Kern unseres Ansatzes ist die Einsicht, dass âein Backup" fĂŒr eine Plattform dieser GröĂe keine sinnvolle Einheit ist. Die Daten von openDesk Edu unterscheiden sich fundamental in drei Punkten:
- Wie viel Verlust ist akzeptabel? (RPO â Recovery Point Objective)
- Wie schnell muss es wieder laufen? (RTO â Recovery Time Objective)
- Wie lange muss es aufbewahrt werden? (Retention)
Deshalb haben wir ein 3-Tier-Modell definiert:
| Tier | Beispiel-Dienste | RPO | RTO | Retention |
|---|---|---|---|---|
| A â kritisch | Keycloak, PostgreSQL, Redis, MariaDB, MinIO | 1 h | 2 h | 30 Tage |
| B â wichtig | Nextcloud, OX App Suite, OpenProject, ILIAS, Moodle | 1 h | 4 h | 14 Tage |
| C â experimentell | JupyterHub, Ollama, Dask | 24 h | 1 Tag | 7 Tage |
Tier A â das IdentitĂ€ts- und Datenherz
Identity-Provider (Keycloak), Datenbanken (PostgreSQL, MariaDB, Redis) und der Objektspeicher (MinIO) sind das Herz der Plattform. FĂ€llt Keycloak aus, fĂ€llt jede Anmeldung; fĂ€llt die Konfigurationsdatenbank, verlieren die Dienste ihre IdentitĂ€t. Hier gilt: stĂŒndliche Sicherung, schnelle Wiederherstellung, 30 Tage Aufbewahrung â denn gerade bei IdentitĂ€tssystemen will man im Zweifel weit zurĂŒckgreifen können, etwa um fehlerhafte Provisionierungsaktionen rĂŒckgĂ€ngig zu machen.
Tier B â die kollaborative ArbeitsflĂ€che
Nextcloud, OX App Suite, OpenProject, ILIAS und Moodle bilden die eigentliche ArbeitsflĂ€che der Hochschule. Die Wiederherstellung ist aufwendiger als bei einer Datenbank â Dateien mit Terabyte-Volumen lassen sich nicht in zwei Stunden âeinspielen". Mit stĂŒndlichem RPO und 4 Stunden RTO balancieren wir den Aufwand: Kein Arbeitstag geht verloren, die Wiederanlaufzeit bleibt planbar. 14 Tage Retention decken die typischen Fehlerfenster ab (versehentliches Löschen, veralteter Client, fehlerhaftes Update).
Tier C â Raum zum Experimentieren
JupyterHub, Ollama und Dask sind bewusst als Wegwerf-Umgebungen ausgelegt. Was hier verloren geht, ist reproduzierbar â aus Git, aus Nix, aus einer Anleitung. 24-Stunden-RPO heiĂt: Ein verlorener Tag Experimentierdaten ist verkraftbar, wenn er die Infrastruktur vor unnötiger Last bewahrt. Diese Einordnung ist eine bewusste Entscheidung â und sie spart Ressourcen fĂŒr die Tiers, in denen Daten wirklich zĂ€hlen.
Die RWO-Herausforderung: 29 PVCs, die nicht âeinfach so" gesichert werden können
So weit, so ordentlich - und jetzt die ehrliche LĂŒcke. Von den PVCs der Plattform sind aktuell 29 nicht durch k8up gesichert, weil sie RWO (ReadWriteOnce) sind. Ein RWO-Volume ist an einen einzelnen Node gebunden und kann nicht parallel von einem Backup-Pod an einem anderen Ort gemountet werden. Der klassische âda fĂ€hrt man mal ein Volume ranâ-Ansatz scheitert strukturell.
Zwei Wege stehen zur Wahl, und beide sind dokumentiert:
Option A â CSI VolumeSnapshots (bevorzugt). Ceph stellt ĂŒber seinen CSI-Treiber rbd.csi.ceph.com VolumeSnapshots bereit. Damit lassen sich crash-konsistente Snapshots der RWO-Volumes automatisiert erstellen â ohne Mount, ohne Ausfall:
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: csi-rbd-snapclass
annotations:
k8up.io/snapshot-class: "true"
driver: rbd.csi.ceph.com
deletionPolicy: Delete
Option B â Per-Node-Schedules. Wo kein Snapshot-Class existiert, kann jeder RWO-PVC mit einem eigenen k8up-Schedule gesichert werden, der per nodeSelector auf genau den Node zielt, an den das Volume gebunden ist. Mehr Aufwand, dafĂŒr ohne AbhĂ€ngigkeit vom Storage-Backend.
Die Entscheidung zwischen A und B hĂ€ngt an einer einzigen Voraussetzung: Existiert eine VolumeSnapshotClass im Cluster? Falls ja, ist der CSI-Weg die klare Empfehlung â und die 29 PVCs können aus dem Exklusions-Wartungsmodus (k8up.io/exclude: "true") in den geregelten Betrieb.
Restore-Verifikation: Der Test, der Vertrauen schafft
Ein Backup, das nie zurĂŒckgespielt wird, ist eine Meinung. Wir verifizieren Restores im Betrieb â auf der Produktionsplattform Maui wurden 33 Snapshots erfolgreich verifiziert: Datenbanken zurĂŒckgespielt und geprĂŒft, Dateipfade auf VollstĂ€ndigkeit kontrolliert, Dienste nach dem Restore auf Funktion getestet.
Dabei hilft, dass k8up Restores ebenfalls als native Ressourcen modelliert:
apiVersion: k8up.io/v1
kind: Restore
metadata:
name: restore-verify
spec:
restoreMethod:
folder:
claimName: restore-target
backend:
repoPasswordSecretRef:
name: backup-credentials
key: password
s3:
endpoint: s3.hrz.uni-marburg.de
bucket: backups
accessKeyIDSecretRef:
name: backup-credentials
key: accessKey
secretAccessKeySecretRef:
name: backup-credentials
key: secretKey
Die Regel fĂŒr den breiten Betrieb lautet: Jeder Schedule, dessen Wiederherstellung nicht mindestens einmal pro Quartal in einem Testziel getestet wurde, existiert nur auf dem Papier. Snapshots zu zĂ€hlen ist schön, sie erfolgreich zurĂŒckzuspielen ist Beweis genug.
Ausblick: Vom Cluster-Backup zum Disaster-Recovery
Das aktuelle Setup sichert den Cluster â und zwar bewusst extern ans S3-Ziel. Der nĂ€chste Schritt ist die Frage, was passiert, wenn nicht nur ein Dienst, sondern der Standort ausfĂ€llt. Drei Bausteine stehen dafĂŒr auf der Agenda:
- RWO-Abdeckung schlieĂen: CSI-Snapshots fĂŒr die 29 RWO-PVCs (Option A), damit jede Datenklasse des Clusters einen geregelten Pfad hat.
- Georedundanz: Replikation der S3-Buckets in einen zweiten Standort oder ein zweites Rechenzentrum â gegen Brand, Wasser und den einen ungĂŒnstigen Moment.
- Betriebshandbuch: Restore-Runbooks fĂŒr jeden Tier, mit Zielzeiten, Verantwortlichkeiten und einem jĂ€hrlich geĂŒbten DR-Tag, an dem der komplette Cluster auf einem leeren Ziel aufgebaut wird.
FĂŒr Entscheider bei der Ablösung von Microsoft 365 ist der Kern der Botschaft simpel: Was Sie bei M365 ĂŒber VertrĂ€ge erkaufen mĂŒssen, bauen Sie bei openDesk Edu selbst â und es gehört Ihnen. Die Backup-Strategie ist dabei kein Appendix, sondern ein First-Class-Baustein der Plattform: deklariert im Git-Repo, verifiziert im Betrieb, ehrlich dokumentiert.
Fazit
Backup & Restore bei openDesk Edu ist kein Einheitsprodukt, sondern ein abgestuftes System mit klaren Entscheidungen:
- k8up macht Backups zu GitOps-nativen, reviewbaren Ressourcen statt zu vergessenen Cronjobs.
- Restic + S3 liefern deduplizierte, verschlĂŒsselte, externe Snapshots.
- Das 3-Tier-Modell verteilt RPO, RTO und Retention sinnvoll auf IdentitÀt, Kollaboration und Experimentierraum.
- Verifizierte Restores (33 Snapshots) machen aus Papier Praxis.
- Die RWO-LĂŒcke (29 PVCs) ist benannt, mit zwei dokumentierten Lösungswegen versehen â und der nĂ€chste Schritt ist die Umsetzung per CSI-Snapshots.
Datenhoheit ist keine Rechtsfrage, die man abhakt. Sie ist eine Betriebsleistung, die man beweist â und der Beweis ist der erfolgreich zurĂŒckgespielte Snapshot.
Links
- k8up â der Backup-Operator: k8up.io
- Restic â dedupliziertes, verschlĂŒsseltes Backup: restic.net
- Ceph â Storage-Basis des Clusters: ceph.io
- Community of Practice â Backup-Infrastruktur-Session: Codeberg
- openDesk Edu: opendesk-edu.org