Immich is fully migrated off minikube-indri onto k3s-ringtail. All six prerequisite cards plus the goal card converted to historical documentation by removing status/branch/requires Mikado frontmatter. Changelog fragment added at docs/changelog.d/migrate-immich-to-ringtail.infra.md. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2.8 KiB
2.8 KiB
| title | modified | last-reviewed | tags | ||||
|---|---|---|---|---|---|---|---|
| Immich Postgres Cluster on Ringtail | 2026-05-13 | 2026-05-13 |
|
Immich Postgres Cluster on Ringtail
Stand up a fresh immich-pg CNPG Cluster on ringtail, ready to receive
data. No data import yet — that's immich-pg-data-migration.
What to do
- Create
argocd/manifests/databases-ringtail/(or pick another namespace name — verify what other ringtail pg clusters will use; if none yet,databasesis fine). - Port these from the minikube side:
immich-pg.yaml— CNPG Cluster CR. Same image (ghcr.io/tensorchord/cloudnative-vectorchord:17-0.5.0), same extensions, same managedborgmaticrole. Bumpstorage.sizeif the minikube 10 GiB looks tight (check actual usage first).storageClass: local-pathon ringtail (default).external-secret-immich-borgmatic.yaml— same 1Password item, same field, but referencing the ringtailClusterSecretStore(onepassword-blumeopsalready exists per theexternal-secrets-ringtailapp).- Service for in-cluster access (the operator creates
immich-pg-rwetc. automatically; verify the app deployment uses those names). - A Tailscale Service if we want backups to keep working via the same hostname during the transition — see "Borgmatic" below.
- New ArgoCD app
argocd/apps/databases-ringtail.yamlpointing at the new path, destination ringtail.
Verification
- Cluster reaches
Ready. borgmaticrole exists,rolcanlogin=t, and is a member ofpg_read_all_data(viamanaged.roles[].inRoles).- ExternalSecret
immich-pg-borgmaticsyncs from 1Password (Ready: True) and the rendered Secret hasusername=borgmatic. - The
vchord,vector,cube,earthdistanceextensions show installed in thepostgresdatabase (\dxfrompsql -U postgres). They are NOT installed in theimmichdatabase at this point —postInitSQLin CNPG'sinitdbblock runs against thepostgressuperuser database. The Immich app itself creates the extensions in its ownimmichdatabase at startup; do not be alarmed by their absence pre-immich-deploy. Thevchord.solibrary is preloaded viashared_preload_librariesregardless, soCREATE EXTENSIONat app startup just registers it in the right database.
Borgmatic implications
borgmatic.cfg on indri targets immich-pg-tailscale over the
tailnet. During migration both clusters will exist briefly. Decide
upfront: backup the source pg until cutover, then flip borgmatic
to the ringtail Tailscale service. Document the flip in
immich-cutover-and-decommission.
Out of scope
- Importing data. That is immich-pg-data-migration, which may
drive a reset on this card if the migration approach (e.g. CNPG
externalClusterbootstrap) requires changes to this Cluster CR.