Skip to main content

StatefulSets

A StatefulSet manages stateful applications that require stable identities and persistent storage.

  • Pods are created in order (0, 1, 2, ...) and terminated in reverse order
  • Each Pod gets a stable hostname: <statefulset-name>-<ordinal> (e.g. web-0, web-1)
  • Each Pod can have its own PersistentVolumeClaim that persists across rescheduling
  • Requires a Headless Service for network identity

Exampleโ€‹

apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "web"
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:1.25
volumeMounts:
- name: data
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 1Gi

Use Casesโ€‹

  • Databases (MySQL, PostgreSQL, MongoDB)
  • Distributed systems that require stable network identifiers (Kafka, ZooKeeper, etcd)
  • Applications that require ordered deployment, scaling, and deletion

StatefulSet vs Deploymentโ€‹

FeatureStatefulSetDeployment
Pod identityStable, persistentRandom, interchangeable
StoragePer-Pod PVC (persists)Shared or ephemeral
OrderingOrdered create/deleteParallel
NetworkStable hostname per PodRandom hostname