Velero keeps at-rest encryption — Kopia encrypts client-side, independent of the bucket.
Notes
Garage creds/secrets left in place → one-git revert rollback per app.
All four kustomizations kubectl kustomize clean.
Velero re-seed: first backup re-uploads ~300 GB to the new bucket (one-time, background, ~13h at 50 Mbps).
After merge
I'll validate each: authentik/immich base backup Completed to Hetzner; velero BSL Available + a backup Completed. Then the finish line — drop the Garage scrape/alerts so nas-1 can go nightly-off.
## Stage 2: broaden the Hetzner backup cutover
Applies the pattern **validated end-to-end on paperless** (PR #23/#24 — WAL archive + base backup + scratch restore all green) to the remaining backups.
### CNPG — authentik (`ak-pg`) + immich (`im-pg`)
- ObjectStore → `s3://renner-uno-k8s-cnpg/<srv>` @ `fsn1`
- creds `barman-cloud-creds` → `hetzner-s3-creds` (secrets already in repo from PR #23; now wired into the kustomizations)
- **drop `encryption: AES256`** — Hetzner offers only SSE-C, which barman-cloud can't use ([#646](https://github.com/cloudnative-pg/plugin-barman-cloud/issues/646)). At-rest encryption unavailable; transit TLS, bucket private.
### Velero
- BSL → `renner-uno-k8s-velero` @ `fsn1`, **virtual-hosted** (`s3ForcePathStyle: "false"`), `region: fsn1`, `checksumAlgorithm: ""` (required on Hetzner's Ceph RGW)
- credentials → `cloud-credentials-hetzner`
- **Velero keeps at-rest encryption** — Kopia encrypts client-side, independent of the bucket.
### Notes
- Garage creds/secrets left in place → one-`git revert` rollback per app.
- All four kustomizations `kubectl kustomize` clean.
- Velero re-seed: first backup re-uploads ~300 GB to the new bucket (one-time, background, ~13h at 50 Mbps).
### After merge
I'll validate each: authentik/immich base backup `Completed` to Hetzner; velero BSL `Available` + a backup `Completed`. Then the finish line — drop the Garage scrape/alerts so nas-1 can go nightly-off.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Stage 2 of the offsite backup migration, applying the pattern validated
end-to-end on paperless (WAL archive + base backup + scratch restore).
CNPG (authentik ak-pg, immich im-pg):
- repoint ObjectStore -> s3://renner-uno-k8s-cnpg/<srv> @ fsn1
- creds barman-cloud-creds -> hetzner-s3-creds (wired into kustomizations)
- drop encryption: AES256 (Hetzner has no barman-usable SSE; see #646)
Velero:
- BSL -> renner-uno-k8s-velero @ fsn1, virtual-hosted (s3ForcePathStyle
false), region fsn1, checksumAlgorithm "" (required on Hetzner)
- credentials -> cloud-credentials-hetzner
- Kopia encrypts client-side, so velero keeps at-rest encryption.
Garage creds/secrets left in place for one-revert rollback. After this
deploys + validates, the Garage Prometheus scrape/alerts can be dropped
and nas-1 freed for nightly shutdown.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Stage 2: broaden the Hetzner backup cutover
Applies the pattern validated end-to-end on paperless (PR #23/#24 — WAL archive + base backup + scratch restore all green) to the remaining backups.
CNPG — authentik (
ak-pg) + immich (im-pg)s3://renner-uno-k8s-cnpg/<srv>@fsn1barman-cloud-creds→hetzner-s3-creds(secrets already in repo from PR #23; now wired into the kustomizations)encryption: AES256— Hetzner offers only SSE-C, which barman-cloud can't use (#646). At-rest encryption unavailable; transit TLS, bucket private.Velero
renner-uno-k8s-velero@fsn1, virtual-hosted (s3ForcePathStyle: "false"),region: fsn1,checksumAlgorithm: ""(required on Hetzner's Ceph RGW)cloud-credentials-hetznerNotes
git revertrollback per app.kubectl kustomizeclean.After merge
I'll validate each: authentik/immich base backup
Completedto Hetzner; velero BSLAvailable+ a backupCompleted. Then the finish line — drop the Garage scrape/alerts so nas-1 can go nightly-off.🤖 Generated with Claude Code