Backups und Wiederherstellung
Eine Installation von Labtagon AI OS hält ihren Zustand an drei Stellen: Postgres, der Objektspeicher mit den Bytes der Dateien, und die Schlüssel. Eine Wiederherstellung braucht alle drei, aus Zeitpunkten, die zusammenpassen.
Postgres
Abschnitt betitelt „Postgres“Postgres enthält alles außer den Bytes der Dateien: Chats, Tool-Server mit ihren Versionen und Code-Bundles, Freigaben, Einstellungen, Erinnerungen, das Audit-Log und die gespeicherten Anmeldungen und Schlüssel der Tool-Server als age-Chiffrat.
Das Chart legt einen CloudNativePG-Cluster an (postgres.create), richtet dafür aber kein Backup
ein. Richte die Backups von CloudNativePG selbst ein, mit fortlaufender WAL-Archivierung, damit du
auf einen Zeitpunkt zurücksetzen kannst, auf Speicher außerhalb des Clusters.
- Bewahre die Backups mindestens so lange auf wie
storage.graceDays(standardmäßig 90 Tage), oder setz diesen Wert auf deine Aufbewahrung herunter: Ein Objekt, das keine Datei mehr nennt, bleibt so lange im Speicher, damit eine Wiederherstellung von Postgres innerhalb dieser Zeit jede Datei noch findet. - Die Datenbank heißt
ai-osund gehörtai-os; die RessourceDatabasedes Charts behält sie, wenn das Release entfernt wird (databaseReclaimPolicy: retain). - Mit
postgres.create: falsesind dein Postgres und seine Backups deine Sache.
Die Dateien
Abschnitt betitelt „Die Dateien“Die Bytes der Dateien liegen in Garage oder deinem S3, verschlüsselt, bevor sie AI OS verlassen (ADR 0093): Der Bucket, seine Volumes und jede Kopie enthalten nur Chiffrat.
- Garage macht alle 6 Stunden einen Snapshot seiner Metadaten
(
storage.garage.metadataSnapshotInterval) in sein Metadaten-Volume. Mach danach Volume-Snapshots seiner Volumes. - Eine externe Kopie:
storage.offsite.enabled: truelässt rclone nach Zeitplan laufen (standardmäßig17 3 * * *) und kopiert neue Objekte in ein anderes S3. Dort löscht es nichts; ein Bucket, in den man nur schreiben kann und der Objekte sperrt, passt dazu. - Externes S3: Nutze die Versionierung oder Replikation deines Anbieters.
- Mit
storage.mode: postgresliegen die Dateien in Postgres, und sein Backup umfasst sie.
Die Schlüssel, die du nie verlieren darfst
Abschnitt betitelt „Die Schlüssel, die du nie verlieren darfst“| Schlüssel | Wo | Ohne ihn |
|---|---|---|
age-identity (Schlüssel-Secret) |
keys.existingSecret, am besten aus OpenBao |
Keine gespeicherte Anmeldung und kein Schlüssel eines Tool-Servers lässt sich entschlüsseln; Personen müssen sie neu eingeben. |
approval-signing-key, approval-verify-key |
Schlüssel-Secret | Jede signierte Freigabe ist ungültig. Die Schlüssel der LLM-Provider sind mit einem vom Signaturschlüssel abgeleiteten Schlüssel verschlüsselt: Auch sie lassen sich nicht mehr lesen. |
agent-token-key |
Schlüssel-Secret | Die Tokens, die AI OS an Clients ausgegeben hat, lassen sich nicht mehr prüfen. |
egress-ca.crt, egress-ca.key, session-key |
Schlüssel-Secret | Bewahre sie mit den anderen auf; die Hinweise des Charts nennen, wie jeder entsteht. |
Speicherschlüssel storage-key (und previous-keys) |
<release>-storage-key oder storage.encryption.existingSecret |
Keine Datei lässt sich lesen. |
Bewahre sie getrennt vom Datenbank-Backup auf: in OpenBao (keys.externalSecret,
storage.encryption.externalSecret) oder an einem anderen sicheren Ort. Hat das Chart den
Speicherschlüssel selbst angelegt, kopiere das Secret <release>-storage-key gleich nach der
Installation aus dem Cluster. Das Chart behält dieses Secret, wenn das Release entfernt wird.
Wiederherstellen
Abschnitt betitelt „Wiederherstellen“- Postgres auf den gewählten Zeitpunkt, mit der Point-in-Time-Recovery von CloudNativePG.
- Die Objekte: bei Garage seine Volumes, wie sie sind, oder auf jedem Knoten den
Volume-Snapshot nach einem Metadaten-Snapshot (Knoten anhalten, den Snapshot an die Stelle der
Metadaten-Datenbank legen, starten,
garage repair -a --yes tablesausführen); mit einer externen Kopie diese zurück in den Bucket kopieren (rclone copy, nichts gelöscht). - Dieselben Schlüssel, auch den Speicherschlüssel und seine früheren Schlüssel, in ihren Secrets.
- Prüfen, dass jede Datei ein Objekt nennt, das der Speicher hat, und dass Dateien sich öffnen. Objekte, die die wiederhergestellte Datenbank nicht kennt, bleiben für die Karenzzeit und werden dann entfernt.
Ein Garage mit einem Knoten lässt sich nicht einfach in ein HA-Garage zurückspielen: Starte das HA-Garage, kopiere den Bucket hinüber, dann schalte um.
Eigene Volumes der Tool-Server
Abschnitt betitelt „Eigene Volumes der Tool-Server“Ein Tool-Server mit dauerhafter Arbeit hält sie auf einem eigenen Volume (work-<name>) im
Namespace seines Besitzers. Für ein Backup-Werkzeug, das nach Labels auswählt, setzt
instances.workVolumeLabels Labels auf diese Volumes und die Pods, die sie einbinden, zum Beispiel
{ velero/backup: enabled }.