StatefulSets
StatefulSets sind für Anwendungen gedacht, die eine stabile Netzwerk-Identität und persistenten Speicher benötigen (z.B. Datenbanken). Im Gegensatz zu Deployments erhalten Pods einen stabilen Namen (postgres-0, postgres-1, …).
postgres-statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: postgres
spec:
replicas: 1
serviceName: postgres
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres-container
image: postgres:18.3-alpine3.23
env:
- name: POSTGRES_PASSWORD
value: secret
ports:
- containerPort: 5432
resources:
limits:
memory: 512Mi
cpu: 500m
requests:
memory: 256Mi
cpu: 250m
postgres-service.yaml
apiVersion: v1
kind: Service
metadata:
name: postgres
spec:
type: ClusterIP
ports:
- protocol: TCP
port: 5432
targetPort: 5432
selector:
app: postgres
Befehle
kubectl apply -f postgres-statefulset.yaml
kubectl apply -f postgres-service.yaml
kubectl get statefulsets
kubectl get pods -o wide
kubectl describe statefulset/postgres
# Zugriff über Port-Forward
kubectl port-forward svc/postgres 5432:5432 --address=0.0.0.0
Stable Identity testen
kubectl delete pod postgres-0
kubectl get pods -o wide # Pod wird mit gleichem Namen neu erstellt
PGAdmin4 mit Postgres verbinden
kubectl port-forward svc/pgadmin4 8080:9090 --address=0.0.0.0
Verbindung in PGAdmin4:
| Feld | Wert |
|---|---|
| Hostname | postgres |
| Port | 5432 |
| Benutzer | postgres |
| Passwort | secret |