e10f0c09c9
## 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
Reviewed-on: #428
Co-authored-by: unkin-agent <unkin-agent@unkin.net>
Co-committed-by: unkin-agent <unkin-agent@unkin.net>
32 lines
955 B
YAML
32 lines
955 B
YAML
---
|
|
# Static PV for the shared MEDIASTORE CephFS subvolume. Same rootPath as
|
|
# arrstack's mediastore PV so the arrs write and cheeztv reads the identical
|
|
# library tree (cheeztv scans /cheeztv/{tvseries,movies}); each namespace gets
|
|
# its own PV (unique name + volumeHandle) pinned by claimRef.
|
|
apiVersion: v1
|
|
kind: PersistentVolume
|
|
metadata:
|
|
name: cheeztv-mediastore
|
|
spec:
|
|
capacity:
|
|
storage: 10Ti
|
|
accessModes:
|
|
- ReadWriteMany
|
|
persistentVolumeReclaimPolicy: Retain
|
|
storageClassName: ""
|
|
volumeMode: Filesystem
|
|
claimRef:
|
|
namespace: cheeztv
|
|
name: cheeztv-mediastore
|
|
csi:
|
|
driver: cephfs.csi.ceph.com
|
|
volumeHandle: cheeztv-mediastore-static
|
|
nodeStageSecretRef:
|
|
name: csi-cephfs-secret
|
|
namespace: csi-cephfs
|
|
volumeAttributes:
|
|
staticVolume: "true"
|
|
clusterID: cephfs_csi_ssd_ec_4_1
|
|
fsName: cephfs
|
|
rootPath: /volumes/csi_ssd_ec_4_1/mediastore/a0152dac-a51b-4b95-ac5e-ecdd99bfe3f1
|