From 12b62bea0001c8b6f59a6171ade7b3e377f34bdd Mon Sep 17 00:00:00 2001 From: Dan V Date: Fri, 27 Mar 2026 22:30:27 +0100 Subject: [PATCH] =?UTF-8?q?storage:=20rename=20ZFS=20datasets=20=E2=80=94?= =?UTF-8?q?=20jellyfin=E2=86=92media,=20immich=E2=86=92photos,=20games=20c?= =?UTF-8?q?hildren=20restructured?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - media-pool/jellyfin renamed to media-pool/media (mountpoint /data/media unchanged) - media-pool/immich renamed to media-pool/photos (mountpoint /data/photos unchanged) - media-pool/minecraft → media-pool/games/minecraft (child of games) - media-pool/factorio → media-pool/games/factorio (child of games) - media-pool/openttd → media-pool/games/openttd (child of games) - Individual game quotas removed; single 1T quota set on media-pool/games - Removed stale legacy /media-pool/jellyfin etc. from HP /etc/exports - Updated pvs.yaml section headers to reflect new ZFS dataset names Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- deployment/storage/ha-pvs/pvs.yaml | 351 +++++++++++++++++++++++++++++ 1 file changed, 351 insertions(+) create mode 100644 deployment/storage/ha-pvs/pvs.yaml diff --git a/deployment/storage/ha-pvs/pvs.yaml b/deployment/storage/ha-pvs/pvs.yaml new file mode 100644 index 0000000..ec4a3f6 --- /dev/null +++ b/deployment/storage/ha-pvs/pvs.yaml @@ -0,0 +1,351 @@ +--- +# HA Persistent Volumes — Dell NFS primary via keepalived VIP 192.168.2.252 +# On Dell failure, VIP moves to HP which serves identical paths via rsync mirror +# All PVs use reclaimPolicy: Retain to protect data + +# ==================== MEDIA (Jellyfin) — ZFS: media-pool/media ==================== +apiVersion: v1 +kind: PersistentVolume +metadata: + name: jellyfin-media-pv +spec: + capacity: + storage: 650Gi + accessModes: [ReadWriteOnce] + persistentVolumeReclaimPolicy: Retain + storageClassName: "" + nfs: + server: 192.168.2.252 + path: /data/media/media + claimRef: + namespace: media + name: jellyfin-media-v2-pvc +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: jellyfin-config-pv +spec: + capacity: + storage: 10Gi + accessModes: [ReadWriteOnce] + persistentVolumeReclaimPolicy: Retain + storageClassName: "" + nfs: + server: 192.168.2.252 + path: /data/media/jellyfin-config + claimRef: + namespace: media + name: jellyfin-config-v2-pvc +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: jellyfin-cache-pv +spec: + capacity: + storage: 10Gi + accessModes: [ReadWriteOnce] + persistentVolumeReclaimPolicy: Retain + storageClassName: "" + nfs: + server: 192.168.2.252 + path: /data/media/jellyfin-cache + claimRef: + namespace: media + name: jellyfin-cache-v2-pvc +--- +# ==================== PHOTOS (Immich) — ZFS: media-pool/photos ==================== +apiVersion: v1 +kind: PersistentVolume +metadata: + name: immich-library-pv +spec: + capacity: + storage: 290Gi + accessModes: [ReadWriteOnce] + persistentVolumeReclaimPolicy: Retain + storageClassName: "" + nfs: + server: 192.168.2.252 + path: /data/photos/immich-library + claimRef: + namespace: media + name: immich-library-v2-pvc +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: immich-db-pv +spec: + capacity: + storage: 20Gi + accessModes: [ReadWriteOnce] + persistentVolumeReclaimPolicy: Retain + storageClassName: "" + nfs: + server: 192.168.2.252 + path: /data/photos/immich-db + claimRef: + namespace: media + name: immich-db-v2-pvc +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: immich-ml-cache-pv +spec: + capacity: + storage: 20Gi + accessModes: [ReadWriteOnce] + persistentVolumeReclaimPolicy: Retain + storageClassName: "" + nfs: + server: 192.168.2.252 + path: /data/photos/immich-ml-cache + claimRef: + namespace: media + name: immich-ml-cache-v2-pvc +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: immich-valkey-pv +spec: + capacity: + storage: 1Gi + accessModes: [ReadWriteOnce] + persistentVolumeReclaimPolicy: Retain + storageClassName: "" + nfs: + server: 192.168.2.252 + path: /data/photos/immich-valkey + claimRef: + namespace: media + name: immich-valkey-v2-pvc +--- +# ==================== STORAGE (OwnCloud) ==================== +apiVersion: v1 +kind: PersistentVolume +metadata: + name: owncloud-files-pv +spec: + capacity: + storage: 190Gi + accessModes: [ReadWriteOnce] + persistentVolumeReclaimPolicy: Retain + storageClassName: "" + nfs: + server: 192.168.2.252 + path: /data/owncloud/owncloud-files + claimRef: + namespace: storage + name: owncloud-files-v2-pvc +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: owncloud-mariadb-pv +spec: + capacity: + storage: 5Gi + accessModes: [ReadWriteOnce] + persistentVolumeReclaimPolicy: Retain + storageClassName: "" + nfs: + server: 192.168.2.252 + path: /data/owncloud/mariadb + claimRef: + namespace: storage + name: owncloud-mariadb-v2-pvc +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: owncloud-redis-pv +spec: + capacity: + storage: 1Gi + accessModes: [ReadWriteOnce] + persistentVolumeReclaimPolicy: Retain + storageClassName: "" + nfs: + server: 192.168.2.252 + path: /data/owncloud/redis + claimRef: + namespace: storage + name: owncloud-redis-v2-pvc +--- +# ==================== GAMES (Minecraft) ==================== +apiVersion: v1 +kind: PersistentVolume +metadata: + name: minecraft-home-pv +spec: + capacity: + storage: 10Gi + accessModes: [ReadWriteOnce] + persistentVolumeReclaimPolicy: Retain + storageClassName: "" + nfs: + server: 192.168.2.252 + path: /data/games/minecraft/home + claimRef: + namespace: games + name: minecraft-home-v2-pvc +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: minecraft-cheats-pv +spec: + capacity: + storage: 10Gi + accessModes: [ReadWriteOnce] + persistentVolumeReclaimPolicy: Retain + storageClassName: "" + nfs: + server: 192.168.2.252 + path: /data/games/minecraft/cheats + claimRef: + namespace: games + name: minecraft-cheats-v2-pvc +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: minecraft-creative-pv +spec: + capacity: + storage: 10Gi + accessModes: [ReadWriteOnce] + persistentVolumeReclaimPolicy: Retain + storageClassName: "" + nfs: + server: 192.168.2.252 + path: /data/games/minecraft/creative + claimRef: + namespace: games + name: minecraft-creative-v2-pvc +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: minecraft-johannes-pv +spec: + capacity: + storage: 10Gi + accessModes: [ReadWriteOnce] + persistentVolumeReclaimPolicy: Retain + storageClassName: "" + nfs: + server: 192.168.2.252 + path: /data/games/minecraft/johannes + claimRef: + namespace: games + name: minecraft-johannes-v2-pvc +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: minecraft-noah-pv +spec: + capacity: + storage: 10Gi + accessModes: [ReadWriteOnce] + persistentVolumeReclaimPolicy: Retain + storageClassName: "" + nfs: + server: 192.168.2.252 + path: /data/games/minecraft/noah + claimRef: + namespace: games + name: minecraft-noah-v2-pvc +--- +# ==================== GAMES (Factorio / OpenTTD) ==================== +apiVersion: v1 +kind: PersistentVolume +metadata: + name: factorio-alone-pv +spec: + capacity: + storage: 5Gi + accessModes: [ReadWriteOnce] + persistentVolumeReclaimPolicy: Retain + storageClassName: "" + nfs: + server: 192.168.2.252 + path: /data/games/factorio/alone + claimRef: + namespace: games + name: factorio-alone-v2-pvc +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: openttd-pv +spec: + capacity: + storage: 2Gi + accessModes: [ReadWriteOnce] + persistentVolumeReclaimPolicy: Retain + storageClassName: "" + nfs: + server: 192.168.2.252 + path: /data/games/openttd/main + claimRef: + namespace: games + name: openttd-v2-pvc +--- +# ==================== INFRASTRUCTURE ==================== +apiVersion: v1 +kind: PersistentVolume +metadata: + name: general-db-pv +spec: + capacity: + storage: 10Gi + accessModes: [ReadWriteOnce] + persistentVolumeReclaimPolicy: Retain + storageClassName: "" + nfs: + server: 192.168.2.252 + path: /data/infra/general-db + claimRef: + namespace: infrastructure + name: general-db-v2-pvc +--- +apiVersion: v1 +kind: PersistentVolume +metadata: + name: speedtest-tracker-pv +spec: + capacity: + storage: 1Gi + accessModes: [ReadWriteOnce] + persistentVolumeReclaimPolicy: Retain + storageClassName: "" + nfs: + server: 192.168.2.252 + path: /data/infra/speedtest + claimRef: + namespace: infrastructure + name: speedtest-tracker-v2-pvc +--- +# ==================== IOT ==================== +apiVersion: v1 +kind: PersistentVolume +metadata: + name: iot-db-pv +spec: + capacity: + storage: 10Gi + accessModes: [ReadWriteOnce] + persistentVolumeReclaimPolicy: Retain + storageClassName: "" + nfs: + server: 192.168.2.252 + path: /data/infra/iot-db + claimRef: + namespace: iot + name: iot-db-v2-pvc