docs: Einrichtung der SMB-Volumes im Betriebshandbuch
Docker-Images bauen und veroeffentlichen / build-and-push (push) Successful in 1m50s

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
Nick SzaunigandClaude Opus 5.5 committed 2026-09-27 20:11:20 +02:00
1 parent 24939b58d5
commit a7c11ccbd0
1 file changed
+8 -4
+8 -4
View File
@@ -26,10 +26,14 @@ Der Build braucht Internet für `next/font` (Schriften werden eingebettet), aber
## 2. Einmalig einrichten
1. **Overlay anpassen** (`k8s/overlays/production/`): Image-Namen und Tag, Domain in `kustomization.yaml` (APP_URL) und `ingress.yaml`, `ingressClassName` (`kubectl get ingressclass`), ClusterIssuer (Beispiel `letsencrypt-prod`) und TLS-Secret-Name.
2. **StorageClasses:**
- PostgreSQL bekommt Blockspeicher mit ReadWriteOnce, auf keinen Fall eine SMB-Freigabe (Begründung in `k8s/base/postgres.yaml`).
- Das Medienvolume braucht ReadWriteMany, sonst `replicas: 1`.
- Das Backup-Volume darf NFS oder SMB sein.
2. **Speicher:**
- **PostgreSQL** bekommt Blockspeicher mit ReadWriteOnce (StorageClass im StatefulSet), auf keinen Fall eine SMB-Freigabe (Begründung in `k8s/base/postgres.yaml`).
- **Medien und Sicherungen** liegen auf SMB, über `k8s/overlays/production/smb-volumes.yaml`:
1. csi-driver-smb installieren, Befehl steht im Kopf der Datei.
2. Auf dem NAS die Ordner `modelcamp-media` und `modelcamp-backup` anlegen und `source` in der Datei anpassen.
3. Das SMB-Secret anlegen: `kubectl -n artista create secret generic artista-modelcamp-smb --from-literal=username='…' --from-literal=password='…'`. Empfohlen ist ein eigener NAS-Benutzer, der nur diese Ordner sieht.
- Die PVCs sind statisch an die PVs gebunden. Die Rechte setzen die `mountOptions`: `uid=1001` für die App, `uid=70` für den Backup-Job, der mit `0700` bzw. `0600` geschützt ist, weil die Dumps personenbezogene Daten enthalten. Auf SMB wirkt `fsGroup` nicht.
- Ohne SMB: `smb-volumes.yaml` und die beiden PVC-Patches im Overlay entfernen, dann greift die Default-StorageClass. Das Medienvolume braucht dann ReadWriteMany, sonst `replicas: 1`.
3. **Secret anlegen:** Befehl steht in `k8s/secret.example.yaml`, besser über Sealed Secrets oder den External Secrets Operator.
4. **Anwenden:** `kubectl apply -k k8s/overlays/production`
5. **Migration** (siehe Abschnitt 3), danach das erste Admin-Konto: