Every cluster bootstrap now restores from the latest backup in Garage;
migration becomes a one-off seed that writes to the same paths the live
cluster uses.
DB path (ak-pg, pprl-pg):
- Cluster.bootstrap switched from initdb to recovery, reading the live
Barman ObjectStore via externalClusters.
- migrate-{authentik-db,paperless} pipelines stand up an ephemeral
Postgres, pg_restore the legacy dump into it, purge the Barman path,
then barman-cloud-backup against that instance so the seed matches
the format the live cluster writes.
- Obsolete post-bootstrap restore-job manifests removed.
App PVC path (paperless, audiobookshelf):
- defaultSnapshotMoveData=true on the Velero HelmRelease so CSI snapshot
contents are moved to Garage (survive Ceph loss).
- Daily Velero Schedules for paperless, audiobookshelf, authentik.
- velero-bootstrap-restore Kustomization: Job creates one Restore per
Schedule from latest Backup at rebuild; skips schedules with zero
Backups so first-ever bootstrap is a no-op.
- Transitional *-seed Kustomizations pull legacy tarballs into fresh
PVCs on first bootstrap (sentinel-idempotent). Velero has no
external-producer API so this bridge is unavoidable during migration;
retire once Velero has a verified backup.
Requires Woodpecker secrets garage_cnpg_key_id + garage_cnpg_secret_key
(cnpg-key.creds from /volume1/docker/garage/config/keys/ on nas-1).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>