Persistent Volume Claims
Persistent Volume Claims (PVCs) reservieren persistenten Speicher für Pods. Der Speicher überlebt das Löschen eines Pods.
postgres-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres
spec:
accessModes:
- ReadWriteOncePod
storageClassName: local-path # in k3s standardmäßig vorhanden
resources:
requests:
storage: 1Gi
StatefulSet mit PVC
# Auszug aus postgres-statefulset-with-pvc.yaml
spec:
containers:
- name: postgres-container
image: postgres:18.3-alpine3.23
env:
- name: POSTGRES_PASSWORD
value: secret
ports:
- containerPort: 5432
volumeMounts:
- name: data
mountPath: /var/lib/postgresql/
volumes:
- name: data
persistentVolumeClaim:
claimName: postgres
Befehle
kubectl apply -f postgres-pvc.yaml
kubectl get pvc
kubectl describe pvc/postgres
kubectl delete statefulset postgres
kubectl apply -f postgres-statefulset-with-pvc.yaml
kubectl get pvc
kubectl get pv
kubectl describe pv [pv-id]
kubectl get pv [pv-id] -o json | jq .spec.local.path
ls -lah [path-aus-obigem-befehl]
Persistenz testen
kubectl exec -it pod/postgres-0 -- bash
psql -U postgres
CREATE TABLE person (name VARCHAR(255));
INSERT INTO person (name) VALUES ('Christian Trutz');
SELECT * FROM person;
\q
exit
kubectl delete pod postgres-0
kubectl get pods -o wide # Pod wird neu erstellt
kubectl exec -it pod/postgres-0 -- bash
psql -U postgres
SELECT * FROM person; # Daten sind noch vorhanden
Access Modes
| Modus | Beschreibung |
|---|---|
ReadWriteOnce |
Nur ein Node kann lesen/schreiben |
ReadOnlyMany |
Mehrere Nodes können lesen |
ReadWriteMany |
Mehrere Nodes können lesen/schreiben |
ReadWriteOncePod |
Nur ein Pod kann lesen/schreiben |