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
| Feature | Deployments | StatefulSets |
|---|---|---|
| Pod Naming | Random hashes (e.g. api-78f9b-x2k9) | Sticky ordinal names (e.g. db-0, db-1, db-2) |
| Storage | Shared PVC or ephemeral storage | Dedicated PV per pod replica via volumeClaimTemplates |
| Best For | Stateless Web Apps, APIs, Microservices | Database 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: 50GiNext Up
Learn DaemonSets & Jobs: log collectors, node monitoring agents, one-off tasks, and CronJobs.
Next Lesson: DaemonSets & CronJobs →