💾 Databases Need Stable Identity
Deployments are for stateless apps. StatefulSets are for stateful apps. Stable network identity, persistent storage, ordered deployment.
📝 StatefulSet Example
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: postgres
spec:
serviceName: postgres
replicas: 3
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:15
env:
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: postgres-secret
key: password
volumeMounts:
- name: data
mountPath: /var/lib/postgresql/data
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
🎯 Key Features
- Stable network identity: pod-0, pod-1, pod-2
- Stable storage: PVC per pod
- Ordered deployment (0, 1, 2)
- Ordered scaling (last in, first out)
- Persistent volume per replica
Use cases:
- Databases (PostgreSQL, MySQL)
- Kafka, ZooKeeper
- Elasticsearch
- Cassandra
- RabbitMQ
Headless service:
apiVersion: v1
kind: Service
metadata:
name: postgres
spec:
clusterIP: None
selector:
app: postgres
ports:
- port: 5432
💡 Commands
- kubectl get statefulset
- kubectl describe statefulset postgres
- kubectl get pods -l app=postgres
- kubectl delete statefulset postgres
- Scale: kubectl scale statefulset postgres –replicas=5
“StatefulSet gave our PostgreSQL stable identity. Pods have persistent storage. Essential for databases in Kubernetes.”
