# PersistentVolumes auf einer SMB-Freigabe (csi-driver-smb, smb.csi.k8s.io). # # VORAUSSETZUNG: csi-driver-smb im Cluster installiert, z. B.: # helm repo add csi-driver-smb https://raw.githubusercontent.com/kubernetes-csi/csi-driver-smb/master/charts # helm install csi-driver-smb csi-driver-smb/csi-driver-smb -n kube-system # und das Zugangs-Secret "artista-modelcamp-smb" (k8s/secret.example.yaml). # # ANZUPASSEN: "source" (////) je Volume. Die Ordner # muessen auf der Freigabe bereits existieren. # # BEWUSST NICHT AUF SMB: das PostgreSQL-Datenverzeichnis. SMB bildet # POSIX-Sperren, fsync-Garantien und Dateirechte nicht so ab, wie PostgreSQL # sie fuer Absturzsicherheit braucht (Briefing §13). Die Datenbank bleibt auf # Blockspeicher und wird taeglich per pg_dump auf das Backup-Volume unten # gesichert — damit liegen die Geschaeftsdaten trotzdem auf dem NAS. # # Rechte: fsGroup wirkt auf SMB nicht. Besitz und Rechte setzen deshalb # uid/gid/dir_mode/file_mode in den mountOptions (Muster aus Wabenhain). # Aenderungen an mountOptions greifen erst beim naechsten Einhaengen. # reclaimPolicy Retain: Loeschen von PVC/PV laesst die Dateien auf dem NAS. # --- Medien (Bilder/Videos) ---------------------------------------------------- # Die App liest nur (readOnly-Mount). Neue Bilder legst du direkt ueber die # SMB-Freigabe ab, z. B. vom Windows-Explorer aus. apiVersion: v1 kind: PersistentVolume metadata: name: artista-modelcamp-media-smb spec: capacity: storage: 5Gi accessModes: ["ReadWriteMany"] persistentVolumeReclaimPolicy: Retain storageClassName: "" mountOptions: - vers=3.0 - uid=1001 # Containerbenutzer "nextjs" (Dockerfile) - gid=1001 - dir_mode=0770 - file_mode=0660 - mfsymlinks - nobrl csi: driver: smb.csi.k8s.io # Muss im Cluster eindeutig sein. volumeHandle: artista-modelcamp-media-smb volumeAttributes: source: //nas.example.lan/artista/modelcamp-media nodeStageSecretRef: name: artista-modelcamp-smb namespace: artista --- # --- Datenbank-Sicherungen ------------------------------------------------------ apiVersion: v1 kind: PersistentVolume metadata: name: artista-modelcamp-db-backup-smb spec: capacity: storage: 10Gi accessModes: ["ReadWriteMany"] persistentVolumeReclaimPolicy: Retain storageClassName: "" mountOptions: - vers=3.0 - uid=70 # Benutzer "postgres" im pg_dump-Job (postgres:18-alpine) - gid=70 - dir_mode=0700 # Sicherungen enthalten personenbezogene Daten - file_mode=0600 - mfsymlinks - nobrl csi: driver: smb.csi.k8s.io volumeHandle: artista-modelcamp-db-backup-smb volumeAttributes: source: //nas.example.lan/artista/modelcamp-backup nodeStageSecretRef: name: artista-modelcamp-smb namespace: artista