Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 2m17s
Auf Wunsch des Betreibers auf das Noetige reduziert: StatefulSet PostgreSQL, Services, Ingress, App-Deployment, zwei SMB-PersistentVolumes (Postgres-Daten, Medien). Beibehalten nach Absprache: Worker-CronJob (Folgeraten, Reservierungsfreigabe, Mail-Wiederholung), ConfigMap und die NetworkPolicies (Sicherheitsbefund Rate-Limit-Umgehung). - Migration als initContainer im App-Deployment statt eigenem Job - Entfernt: Backup-CronJob/-Volume (NAS sichert die Freigabe), Migrations-CronJob, PodDisruptionBudget, HTTP-Redirect-Ingress und Middleware, Namespace-Objekt (einmalig von Hand anzulegen) - PostgreSQL auf SMB als bewusste, dokumentierte Ausnahme mit hard, cache=strict, SMB 3.1.1 + seal, uid 70 / 0700 Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
90 lines
3.3 KiB
YAML
90 lines
3.3 KiB
YAML
# 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" (//<nas>/<freigabe>/<ordner>) je Volume. Die Ordner
|
|
# muessen auf der Freigabe bereits existieren; der Postgres-Ordner leer.
|
|
#
|
|
# Beide Verbindungen verschluesselt (SMB 3.1.1 + seal); das NAS muss
|
|
# SMB-Verschluesselung erlauben. fsGroup wirkt auf SMB nicht: Besitz und
|
|
# Rechte setzen uid/gid/dir_mode/file_mode. reclaimPolicy Retain: Loeschen
|
|
# von PVC/PV laesst die Dateien auf dem NAS.
|
|
# Keine eigene Sicherung im Cluster: die Freigabe wird auf dem NAS gesichert.
|
|
|
|
# --- PostgreSQL-Datenverzeichnis ------------------------------------------------
|
|
# BEWUSSTE AUSNAHME (Entscheidung des Betreibers): Datenbank auf SMB.
|
|
# Risiko: SMB garantiert Sperren/fsync nicht in jedem Fall wie ein lokales
|
|
# Dateisystem; bei Netzwerk- oder NAS-Ausfall waehrend Schreibvorgaengen kann
|
|
# die Datenbank beschaedigt werden. Die Optionen unten minimieren das:
|
|
# hard E/A wartet bei Netzstoerung statt Fehler an PostgreSQL zu
|
|
# melden (kein "soft"-Abbruch mitten im Schreiben)
|
|
# cache=strict strikte Cache-Kohaerenz, fsync geht bis zum Server
|
|
# nobrl keine Byte-Range-Locks (PostgreSQL braucht sie nicht)
|
|
# uid/gid 70, 0700/0600 PostgreSQL verlangt ein privates Datenverzeichnis
|
|
# Sicherung: nur NAS-Snapshots, die atomar sind (Btrfs/ZFS-Snapshot der ganzen
|
|
# Freigabe), sind fuer ein laufendes Datenverzeichnis konsistent. Einfaches
|
|
# Dateikopieren waehrend des Betriebs ergibt KEINE brauchbare Sicherung.
|
|
apiVersion: v1
|
|
kind: PersistentVolume
|
|
metadata:
|
|
name: artista-modelcamp-postgres-smb
|
|
spec:
|
|
capacity:
|
|
storage: 10Gi
|
|
accessModes: ["ReadWriteOnce"]
|
|
persistentVolumeReclaimPolicy: Retain
|
|
storageClassName: ""
|
|
mountOptions:
|
|
- vers=3.1.1
|
|
- seal
|
|
- hard
|
|
- cache=strict
|
|
- uid=70
|
|
- gid=70
|
|
- dir_mode=0700
|
|
- file_mode=0600
|
|
- mfsymlinks
|
|
- nobrl
|
|
csi:
|
|
driver: smb.csi.k8s.io
|
|
volumeHandle: artista-modelcamp-postgres-smb
|
|
volumeAttributes:
|
|
source: //nas.example.lan/artista/modelcamp-postgres
|
|
nodeStageSecretRef:
|
|
name: artista-modelcamp-smb
|
|
namespace: artista
|
|
---
|
|
# --- Medien (Bilder/Videos) ------------------------------------------------------
|
|
# Die App liest nur. 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.1.1
|
|
- seal
|
|
- uid=1001 # Containerbenutzer "nextjs" (Dockerfile)
|
|
- gid=1001
|
|
- dir_mode=0550 # App liest nur; Schreiben ausschliesslich ueber das NAS
|
|
- file_mode=0440
|
|
- mfsymlinks
|
|
- nobrl
|
|
csi:
|
|
driver: smb.csi.k8s.io
|
|
volumeHandle: artista-modelcamp-media-smb
|
|
volumeAttributes:
|
|
source: //nas.example.lan/artista/modelcamp-media
|
|
nodeStageSecretRef:
|
|
name: artista-modelcamp-smb
|
|
namespace: artista
|