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