Backup und Restore
Backup und Restore
Die Plattform bietet ein automatisches Backup-System als Kubernetes CronJob. Standardmäßig ist es deaktiviert und muss explizit aktiviert werden.
Backup aktivieren¶
- Helm Value:
backup.enabled: true(über Customer Portal → Updates) - Oder bei Installation:
backup.enabled=truein den Helm Values
Automatisches Backup¶
- Zeitplan: Täglich um 02:00 Uhr
- Aufbewahrung: 7 Backups (ältere werden automatisch gelöscht)
- Speicher: 20 Gi PVC unter
/backups/
Was wird gesichert?¶
| Daten | Methode | Ausgabe |
|---|---|---|
| PostgreSQL (alle DBs) | pg_dumpall --clean --if-exists |
postgres-all.sql |
| MongoDB | mongodump --gzip |
mongodb/-Verzeichnis |
| Qdrant (Vektordaten) | REST Snapshot API | qdrant-{collection}-{snapshot}.snapshot |
| MinIO (Dokumente) | mc mirror |
minio/-Verzeichnis |
Konfigurationsdaten nicht im Backup
Konfigurationsdaten (Secrets, ConfigMaps) werden NICHT durch das Backup gesichert. Diese sind im Helm Chart und den Values definiert.
Backup manuell auslösen¶
# CronJob manuell triggern
kubectl create job --from=cronjob/inovetra-backup manual-backup-$(date +%Y%m%d) -n inovetra-platform
# Status prüfen
kubectl get jobs -n inovetra-platform | grep backup
# Logs des Backup-Jobs
kubectl logs job/manual-backup-$(date +%Y%m%d) -n inovetra-platform
Restore-Prozedur¶
Datenverlust möglich
Ein Restore überschreibt die aktuellen Daten. Vorher Backup des aktuellen Stands erstellen!
PostgreSQL Restore¶
# Temporären Pod mit Backup-PVC starten, um Backup-Dateien zu identifizieren
kubectl run backup-inspect --rm -it --image=postgres:18-alpine \
--overrides='{"spec":{"containers":[{"name":"backup-inspect","image":"postgres:18-alpine","command":["sh"],"volumeMounts":[{"name":"backup","mountPath":"/backups"}]}],"volumes":[{"name":"backup","persistentVolumeClaim":{"claimName":"inovetra-backup"}}]}}' \
-n inovetra-platform -- ls -la /backups/
# Restore über temporären Pod ausführen
kubectl run pg-restore --rm -it --image=postgres:18-alpine \
--overrides='{"spec":{"containers":[{"name":"pg-restore","image":"postgres:18-alpine","command":["sh"],"volumeMounts":[{"name":"backup","mountPath":"/backups"}]}],"volumes":[{"name":"backup","persistentVolumeClaim":{"claimName":"inovetra-backup"}}]}}' \
-n inovetra-platform -- \
psql -h inovetra-postgres -U inovetra-postgres -f /backups/<datum>/postgres-all.sql
MongoDB Restore¶
# Temporären Pod mit Backup-PVC starten und Restore durchführen
kubectl run mongo-restore --rm -it --image=mongo:7.0 \
--overrides='{"spec":{"containers":[{"name":"mongo-restore","image":"mongo:7.0","command":["sh"],"volumeMounts":[{"name":"backup","mountPath":"/backups"}]}],"volumes":[{"name":"backup","persistentVolumeClaim":{"claimName":"inovetra-backup"}}]}}' \
-n inovetra-platform -- \
mongorestore --host inovetra-mongodb --gzip --drop /backups/<datum>/mongodb/
Qdrant Restore¶
# Port-Forwarding zu Qdrant
kubectl port-forward svc/inovetra-vectordb 6333:6333 -n inovetra-platform
# Snapshot-Datei aus Backup-PVC kopieren
kubectl cp inovetra-platform/<backup-pod>:/backups/<datum>/qdrant-documents-<snapshot>.snapshot ./snapshot.snapshot
# Snapshot hochladen und wiederherstellen (via REST API)
curl -X POST "http://localhost:6333/collections/documents/snapshots/upload" \
-H "Content-Type: multipart/form-data" \
-F "snapshot=@./snapshot.snapshot"
Restore testen¶
Empfehlung: Quartalsweise einen Restore-Test in einer Testumgebung durchführen.
Prüfpunkte nach Restore:
- Alle Pods starten erfolgreich
- Login im Customer Portal funktioniert
- Chat-Verlauf in LibreChat vorhanden
- RAG-Dokumente abrufbar
- Connector-Konfigurationen intakt