StatefulSets & Databases

Unlike Deployments (which manage stateless pods with interchangeable random names), a StatefulSet manages stateful applications requiring unique network identities and dedicated persistent volumes.

1. Deployments vs StatefulSets

FeatureDeploymentsStatefulSets
Pod NamingRandom hashes (e.g. api-78f9b-x2k9)Sticky ordinal names (e.g. db-0, db-1, db-2)
StorageShared PVC or ephemeral storageDedicated PV per pod replica via volumeClaimTemplates
Best ForStateless Web Apps, APIs, MicroservicesDatabase Clusters (PostgreSQL, MongoDB, Kafka, ElasticSearch)

2. Production StatefulSet Manifest Template

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  serviceName: "mysql-headless"
  replicas: 3
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - name: mysql
          image: mysql:8.0
          ports:
            - containerPort: 3306
  volumeClaimTemplates:
    - metadata:
        name: data
      spec:
        accessModes: [ "ReadWriteOnce" ]
        resources:
          requests:
            storage: 50Gi

Next Up

Learn DaemonSets & Jobs: log collectors, node monitoring agents, one-off tasks, and CronJobs.

Next Lesson: DaemonSets & CronJobs →