feat(registry): serve the container registry from RustFS #57

Merged
binjovi-bot merged 1 commit from sean/zot-rustfs into trunk 2026-09-10 03:48:22 +00:00 AGit
Owner

The zot bucket (170 GiB, 21,618 objects) is mirrored to RustFS and the bulk gate is green. Both ExternalSecrets read rustfs-zot-s3-credentials, regionendpoint is http://rustfs.rustfs.svc.cluster.local:9000, the init container waits on /health/ready, and create-bucket is gone (Binjovi owns the bucket). tests/zot-object-store.sh pins the ClusterIP with an explicit port and refuses the headless name. https://claude.ai/code/session_01KZoQin34jeyt6nDGqvJA76

The zot bucket (170 GiB, 21,618 objects) is mirrored to RustFS and the bulk gate is green. Both ExternalSecrets read rustfs-zot-s3-credentials, regionendpoint is http://rustfs.rustfs.svc.cluster.local:9000, the init container waits on /health/ready, and create-bucket is gone (Binjovi owns the bucket). tests/zot-object-store.sh pins the ClusterIP with an explicit port and refuses the headless name. https://claude.ai/code/session_01KZoQin34jeyt6nDGqvJA76
feat(registry): serve the container registry from RustFS
All checks were successful
binjovi/ci Binjovi completed the frozen plan
2a203760e8
Stage 4, consumer side. Held until the zot bucket mirror reaches zero; the
manifest, the credential and the guard move together because three of the
four fail silently apart.

The storage driver's regionendpoint, the readiness wait, and both credential
ExternalSecrets move to RustFS: the stable ClusterIP with an explicit :9000,
because RustFS has no port-80 listener and rustfs-headless hands out individual
server addresses that a node roll takes away mid-upload (HTTP 499, twice on
2026-09-02, with zot being the registry every node pulls from during that same
roll). The readiness wait polls /health/ready, which is what RustFS's own
probe uses.

create-bucket is removed rather than repointed. sean/binjovi-plans declares
the zot bucket and Binjovi's converge creates it; zot's scoped key has no
s3:CreateBucket, so `mc mb --ignore-existing` CrashLoops on Access Denied
instead of skipping, measured on loki on 2026-09-09.

tests/zot-minio-service.sh becomes tests/zot-object-store.sh. It pinned the
MinIO Service and counted three occurrences of it, which any correct repoint
had to fail; the rules it protected survive -- never a headless Service, an
explicit port, the credential from the same chain as the endpoint -- and it
gains the create-bucket refusal. Five negative controls, each confirmed red.

The controls restore the manifest from a copy taken before mutating, never
from git. The first draft used `git checkout` and, run against this very
uncommitted working tree, silently reverted the repoint it was there to
guard. A control that can destroy the change under review is worse than none.

Claude-Session: https://claude.ai/code/session_01KZoQin34jeyt6nDGqvJA76
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
sean/zot!57
No description provided.