arrstack,fafflix,cheeztv: provision shared mediastore CephFS volume #428

Merged
benvin merged 1 commits from benvin/mediastore-provision into main 2026-08-29 21:18:10 +10:00
Member

Why

The media estate is currently split across two 1Ti CephFS subvolumes (media-tv
and media-movies), so a download that lands in one and imports to the other is
a cross-filesystem copy, not a hardlink move. A single 10Ti mediastore
subvolume (already created on cephfs_csi_ssd_ec_4_1) collapses that: one
filesystem holding /{fafflix,cheeztv}/{tvseries,movies} plus
/nzbget/downloads/complete, so every arr import is an atomic same-fs hardlink.

This PR only provisions the volume and seeds its tree. No existing PV, PVC or
workload is touched, and nothing mounts the new claims yet — the cutover of the
arrs and the two jellyfins is a separate change.

How

  • Add static PVs arrstack-mediastore, fafflix-mediastore and
    cheeztv-mediastore, all pointing at the same rootPath
    (/volumes/csi_ssd_ec_4_1/mediastore/a0152dac-…) with unique names and
    volumeHandles pinned by claimRef — the established pattern for the shared
    media subvolumes.
  • Add the matching RWX 10Ti PVCs (mediastore in arrstack,
    fafflix-mediastore, cheeztv-mediastore), annotated
    k8up.io/backup: "false" and statically bound via volumeName +
    storageClassName: "".
  • Add mediastore-bootstrap, a one-shot ArgoCD Sync-hook Job
    (hook-delete-policy: BeforeHookCreation, no sync-wave needed) that mounts
    the arrstack claim and mkdir -ps the directory tree as uid/gid 1000 —
    the uid the arrstack media pods run as. Idempotent, so it self-heals on
    every sync.
  • Wire the new manifests into the arrstack, fafflix and cheeztv bases.

Validation

  • kustomize build clean on apps/overlays/au-syd1/{arrstack,fafflix,cheeztv}
  • kubeconform clean on all three overlays (91 / 29 / 32 resources valid)
  • pre-commit (yamllint, check-yaml, no-plain-secrets) passed
## Why The media estate is currently split across two 1Ti CephFS subvolumes (`media-tv` and `media-movies`), so a download that lands in one and imports to the other is a cross-filesystem copy, not a hardlink move. A single 10Ti `mediastore` subvolume (already created on `cephfs_csi_ssd_ec_4_1`) collapses that: one filesystem holding `/{fafflix,cheeztv}/{tvseries,movies}` plus `/nzbget/downloads/complete`, so every arr import is an atomic same-fs hardlink. This PR only provisions the volume and seeds its tree. No existing PV, PVC or workload is touched, and nothing mounts the new claims yet — the cutover of the arrs and the two jellyfins is a separate change. ## How - Add static PVs `arrstack-mediastore`, `fafflix-mediastore` and `cheeztv-mediastore`, all pointing at the same rootPath (`/volumes/csi_ssd_ec_4_1/mediastore/a0152dac-…`) with unique names and volumeHandles pinned by `claimRef` — the established pattern for the shared media subvolumes. - Add the matching RWX 10Ti PVCs (`mediastore` in arrstack, `fafflix-mediastore`, `cheeztv-mediastore`), annotated `k8up.io/backup: "false"` and statically bound via `volumeName` + `storageClassName: ""`. - Add `mediastore-bootstrap`, a one-shot ArgoCD Sync-hook Job (`hook-delete-policy: BeforeHookCreation`, no sync-wave needed) that mounts the arrstack claim and `mkdir -p`s the directory tree as uid/gid 1000 — the uid the arrstack media pods run as. Idempotent, so it self-heals on every sync. - Wire the new manifests into the arrstack, fafflix and cheeztv bases. ## Validation - `kustomize build` clean on `apps/overlays/au-syd1/{arrstack,fafflix,cheeztv}` - `kubeconform` clean on all three overlays (91 / 29 / 32 resources valid) - pre-commit (yamllint, check-yaml, no-plain-secrets) passed
unkin-agent added 1 commit 2026-08-29 21:07:30 +10:00
arrstack,fafflix,cheeztv: provision shared mediastore CephFS volume
ci/woodpecker/pr/vector-test Pipeline was successful
ci/woodpecker/pr/pre-commit Pipeline was successful
ci/woodpecker/pr/kubeconform Pipeline was successful
86d975c1f1
Adds the static PV/PVC trio for the new 10Ti "mediastore" CephFS subvolume
plus a bootstrap Job that seeds its directory tree. Purely additive: the
existing media-tv/media-movies volumes are untouched.

- add static PVs arrstack-mediastore, fafflix-mediastore, cheeztv-mediastore
  all pinned to the same rootPath on cephfs_csi_ssd_ec_4_1
- add the matching RWX 10Ti PVCs, k8up-excluded, statically bound by
  volumeName + storageClassName ""
- add mediastore-bootstrap, an ArgoCD Sync-hook Job that mkdir -p's
  /{fafflix,cheeztv}/{tvseries,movies} and /nzbget/downloads/complete as
  uid/gid 1000
- wire the new manifests into the arrstack, fafflix and cheeztv bases
benvin merged commit e10f0c09c9 into main 2026-08-29 21:18:10 +10:00
benvin deleted branch benvin/mediastore-provision 2026-08-29 21:18:10 +10:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: unkin/argocd-apps#428