2.4 KiB
Binary Cache PVC Consolidation Design
Goal
Replace 8 per-service binary-cache PVCs + S3 round-trip with a single shared PVC written by CI via kubectl cp.
Current Architecture
CI compile → rclone upload to MinIO S3 → 8 service pods each with initContainer + rclone S3 download + per-service 1Gi PVC cache → run binary.
Problems: 8 initContainers, 8 PVCs, 8 S3 downloads, rclone CA cert management in every pod, PVC migration headaches on node pool changes.
Proposed Architecture
CI compile → kubectl cp to temporary writer pod → single shared foxhunt-binaries PVC (2Gi) → all services mount read-only.
Shared PVC
- Name:
foxhunt-binaries - Size: 2Gi (8 binaries × ~200MB stripped = ~1.6GB)
- Access: ReadWriteOnce (
scw-bssd) — all services on same foxhunt node can mount RO - Location: foxhunt node pool
Deploy Flow
- CI compiles all 8 service binaries on ci-compile-cpu (unchanged)
- CI creates temporary
binary-writerpod on foxhunt node with PVC mounted RW - CI runs
kubectl cp build-out/services/ foxhunt/binary-writer:/binaries/ - CI deletes writer pod
- CI runs
kubectl rollout restartfor all service deployments - Services start, read binary directly from
/binaries/mount — no initContainer
Per-Service YAML Changes
Remove: initContainer (fetch-binary), binary-cache volume, minio-ca volume, binaries emptyDir
Add: foxhunt-binaries PVC volume mounted at /binaries/ readOnly
CI Pipeline Changes
Remove: rclone S3 upload of service binaries, MANIFEST.json Add: kubectl run writer pod → kubectl cp → kubectl delete pod Keep: rclone upload for training binaries + models (different nodes, GPU pipeline)
Training Pipeline
Unchanged. Training jobs run on GPU nodes (L40S), not foxhunt. They continue using S3 for binary fetch and model upload.
Rollback
Copy older binaries via kubectl cp, then rollout restart. CI artifacts preserve binaries by commit SHA if needed.
Cleanup
- Delete 8 per-service PVCs (
binary-cache-*) - Delete
infra/k8s/storage/binary-cache-pvcs.yaml - Remove S3 service binary upload from
.gitlab-ci.yml - Remove minio-credentials and minio-ca-cert references from service pods
Cost Impact
- Remove: 8 × 1Gi PVCs (€0.16/mo)
- Add: 1 × 2Gi PVC (€0.04/mo)
- Net: -€0.12/mo (negligible, but complexity reduction is significant)