chore(infra): retire self-hosted MinIO — DO Spaces is canonical (supersedes #4)#16
Merged
Merged
Conversation
5 tasks
…rsedes #4) DO Spaces (nyc3.digitaloceanspaces.com, bucket instant-shared) has been the active object-store backend in production since 2026-05-11. The self-hosted MinIO Deployment in instant-data is no longer in the request path for /storage/new — verified via live cluster: OBJECT_STORE_BACKEND=shared-key (alias → do-spaces) OBJECT_STORE_ENDPOINT=nyc3.digitaloceanspaces.com OBJECT_STORE_BUCKET=instant-shared This commit retires the local MinIO manifests and replaces every MINIO_* env injection on production k8s deployments with OBJECT_STORE_* sourced from instant-secrets / instant-infra-secrets. Supersedes PR #4 (2026-05-11), which had drifted from current master after the broad manifest reconciliation work landed. Manifests deleted: - k8s/data/minio.yaml (Deployment + PVC + ClusterIP + NodePort) - k8s/data/minio-bucket-init.yaml (one-shot Job creating instant-shared) - k8s/data/minio-secret.yaml (local-dev MinIO root creds) Env-var injection migrated MINIO_* → OBJECT_STORE_* in: - k8s/app.yaml (instant-api) — removed MINIO_ROOT_USER/PASSWORD optional refs; OBJECT_STORE_* keys already wired via prior storage-abstraction work. - k8s/worker/deployment.yaml (instant-worker) — storage_bytes scanner now reads OBJECT_STORE_* from instant-infra-secrets. - k8s/provisioner/deployment.yaml (instant-provisioner) — storage_bytes scanner block migrated. Also removes the dangling reference to a 'minio-secrets' Secret in the instant-infra namespace that was never defined in-tree (the in-repo Secret lived in instant-data). - k8s/configmap.yaml — removed MINIO_ENDPOINT / MINIO_BUCKET_NAME. - k8s/secrets.yaml (template) — removed MINIO_ROOT_USER/PASSWORD template keys; added OBJECT_STORE_* template keys for DO Spaces. Docs: - k8s/APPLY-CHECKLIST.md — new 'MinIO retirement' section with the post-merge operator cleanup commands (kubectl delete deploy/minio pvc/minio-data svc/{minio,minio-external} job/minio-bucket-init secret/minio-secrets in instant-data). Per CLAUDE.md rule 15 (infra has no auto-apply), the operator runs this manually after merge. Verification: - kubectl apply --dry-run=server -f k8s/{app,configmap,secrets, provisioner/deployment,worker/deployment}.yaml — all clean (no schema errors; pre-existing E2E_TEST_TOKEN hides-previous warning is unrelated to this change). - Live confirmation prod is on DO Spaces: instant-secrets has OBJECT_STORE_BACKEND=shared-key (alias to do-spaces), OBJECT_STORE_ENDPOINT=nyc3.digitaloceanspaces.com. Coverage block: Symptom: Self-hosted MinIO still deployed in instant-data while prod traffic is on DO Spaces Enumeration: rg -n -i 'minio' k8s/ --type yaml Sites found: 8 (3 manifest files + 5 env-injection blocks across app/configmap/worker/provisioner/secrets) Sites touched: 8 (3 deleted + 5 migrated to OBJECT_STORE_*) Coverage test: kubectl apply --dry-run=server clean across all mutated manifests (no resolveError on missing minio- secrets, no env-var redefinition warnings beyond the pre-existing E2E_TEST_TOKEN one) Live verified: Operator runs APPLY-CHECKLIST.md 'MinIO retirement' section commands post-merge; prod request path verified pre-PR via OBJECT_STORE_BACKEND env on live instant-secrets (DO Spaces, nyc3, instant-shared). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
8efe402 to
cf16b4f
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
DO Spaces (
nyc3.digitaloceanspaces.com, bucketinstant-shared) has been theactive object-store backend in production since 2026-05-11. The self-hosted
MinIO Deployment in the
instant-datak8s namespace is no longer in therequest path for
POST /storage/new.Live evidence (pulled before this PR):
This PR retires the local MinIO manifests and replaces every
MINIO_*envinjection on production k8s deployments with
OBJECT_STORE_*sourced frominstant-secrets/instant-infra-secrets.Supersedes PR #4
The original retirement work shipped as PR #4 on 2026-05-11 but stalled past
its 24h merge window (anonymous-storage TTLs) and then went stale after the
broad manifest reconciliation that landed in
1b65d9c k8s: sync app/worker/ provisioner manifests with live prod stateon master. Rather than rebase a3-week-old PR over a now-different base, this PR re-does the work cleanly
against current
master(commit1b65d9c). Close PR #4 in favor of this one.Anonymous-storage TTL caveat from PR #4 is no longer relevant — any MinIO-
backed anonymous tokens minted on 2026-05-11 have long since expired (24h TTL,
9 days ago).
Files deleted
k8s/data/minio.yaml— Deployment, PVC (minio-data, 10Gi), clusterService, and a ClusterIP-mode external Service
k8s/data/minio-bucket-init.yaml— one-shot Job that created theinstant-sharedbucket viamc mb --ignore-existingk8s/data/minio-secret.yaml— local-dev MinIO root creds Secret(
minio-secretsininstant-datanamespace)Manifests still referencing
MINIO_*(cleaned in this PR)k8s/app.yaml(instant-api)MINIO_ROOT_USER/MINIO_ROOT_PASSWORDsecret refs.OBJECT_STORE_*was already wired in the storage-abstraction work; no new env keys needed here.k8s/worker/deployment.yaml(instant-worker)MINIO_*block withOBJECT_STORE_*env refs sourced frominstant-infra-secrets(which already has the keys populated live).k8s/provisioner/deployment.yaml(instant-provisioner)MINIO_*block. Also fixes a dangling reference to aminio-secretsSecret in theinstant-infranamespace that was never defined in-tree (the in-repo Secret lived ininstant-data).k8s/configmap.yamlMINIO_ENDPOINTandMINIO_BUCKET_NAME.k8s/secrets.yaml(template)MINIO_ROOT_USER/MINIO_ROOT_PASSWORDtemplate keys; addedOBJECT_STORE_BACKEND/ENDPOINT/PUBLIC_URL/REGION/ACCESS_KEY/SECRET_KEY/BUCKET/SECUREtemplate keys for DO Spaces.Server-side dry-run (clean)
The
E2E_TEST_TOKENandservice/instant-worker createdlines arepre-existing on master, unrelated to this change.
Post-merge operator action
Per CLAUDE.md rule 15,
infrahas no auto-apply. The newAPPLY-CHECKLIST.md"MinIO retirement" section documents the post-merge cleanup. Summary:
kubectl get deploy,pvc,svc,job,secret -n instant-data -l app=minio kubectl delete -n instant-data deploy/minio pvc/minio-data \ svc/minio svc/minio-external \ job/minio-bucket-init secret/minio-secrets --ignore-not-found kubectl get pods -n instant-data | grep -i minio # should print nothingRollback plan
Revert the merge commit and re-apply the deleted manifests from history:
Storage data isn't lost in either direction — the PVC was on local-path
storage in Rancher Desktop only; DO Spaces holds the actual production
object data and is the active backend.
Coverage block (CLAUDE.md rule 17)
🤖 Generated with Claude Code