chore(registry): move the serving index to hcloud-volumes #31

Merged
binjovi-bot merged 1 commit from chore/hcloud-volumes into trunk 2026-09-03 20:45:09 +00:00
Owner

The volume holds about 10 MiB in 8 inodes. Blobs and metadata live in the MinIO zot bucket, so there is nothing to migrate and a fresh volume costs nothing.

This does not repeat the 2026-08-31 push outage. That came from replicating this volume through Mayastor, which gave every registry operation two storage paths. An hcloud volume is a single copy, not a replica set.

What it buys is that the volume follows its pod, so zot is no longer pinned to one node and that node can be drained without stopping the registry. That matters directly: pipeline-deploy-kernel already has to exclude zots host from the canary and roll it last, because bootc pulls node-bootc through zot.

sync-scratch deliberately stays on zfs-nvme-128k. It is per-pod scratch that dies with the pod, so it wants local disk and no attach latency. tests/zot-sync-scratch-contract.sh still pins it and still passes.

whenDeleted moves from Delete to Retain, because the immutable volumeClaimTemplate means the StatefulSet must be deleted with --cascade=orphan and Delete would take the claim with it.

bash tests/check.sh passes.

https://claude.ai/code/session_01MdSbMhzabSbpG8TtP9Ur3H

The volume holds about 10 MiB in 8 inodes. Blobs and metadata live in the MinIO `zot` bucket, so there is nothing to migrate and a fresh volume costs nothing. **This does not repeat the 2026-08-31 push outage.** That came from *replicating* this volume through Mayastor, which gave every registry operation two storage paths. An hcloud volume is a single copy, not a replica set. What it buys is that the volume follows its pod, so zot is no longer pinned to one node and that node can be drained without stopping the registry. That matters directly: `pipeline-deploy-kernel` already has to exclude zots host from the canary and roll it last, because bootc pulls node-bootc through zot. `sync-scratch` deliberately stays on `zfs-nvme-128k`. It is per-pod scratch that dies with the pod, so it wants local disk and no attach latency. `tests/zot-sync-scratch-contract.sh` still pins it and still passes. `whenDeleted` moves from `Delete` to `Retain`, because the immutable `volumeClaimTemplate` means the StatefulSet must be deleted with `--cascade=orphan` and `Delete` would take the claim with it. `bash tests/check.sh` passes. https://claude.ai/code/session_01MdSbMhzabSbpG8TtP9Ur3H
chore(registry): move the serving index to hcloud-volumes
All checks were successful
binjovi/ci Binjovi completed the frozen plan
70d1f53155
The volume holds about 10 MiB in 8 inodes. Blobs and metadata live in
the MinIO zot bucket, so there is nothing to migrate and a fresh volume
costs nothing.

This does not repeat the 2026-08-31 push outage. That came from
REPLICATING this volume through Mayastor, which gave every registry
operation two storage paths. An hcloud volume is a single copy, not a
replica set. What it buys is that the volume follows its pod, so zot is
no longer pinned to one node and that node can be drained without
stopping the registry. That matters directly: the kernel roll already
has to exclude zot's host from the canary and roll it last.

sync-scratch stays on zfs-nvme-128k. It is per-pod scratch that dies with
the pod, so it wants local disk and no attach latency.

whenDeleted moves from Delete to Retain: the volumeClaimTemplate is
immutable, so changing the class needs the StatefulSet deleted with
--cascade=orphan, and Delete would let that take the claim with it.

Claude-Session: https://claude.ai/code/session_01MdSbMhzabSbpG8TtP9Ur3H
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!31
No description provided.