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