Statefulset

Un StatefulSet es un recurso de Kubernetes diseñado para gestionar aplicaciones con estado (stateful), es decir, aquellas que necesitan mantener datos persistentes o identidad única entre reinicios o réplicas.
Mientras que un Deployment es ideal para aplicaciones sin estado (stateless), donde los pods son intercambiables, el StatefulSet se usa cuando cada pod necesita:
-
Tener un nombre único y predecible.
-
Mantener un almacenamiento persistente que no se pierda al reiniciar el pod.
-
Mantener el orden de creación o terminación (muy útil para clústeres de bases de datos, por ejemplo).
🔔 Características principales
-
Identidad única por pod:
Los pods se nombran secuencialmente:mi-app-0,mi-app-1,mi-app-2, etc. -
Volúmenes persistentes dedicados:
Cada pod puede tener su propio PersistentVolumeClaim (PVC) que es estable incluso si el pod es eliminado y recreado. -
Orden garantizado:
Los pods se crean, actualizan o eliminan uno por uno y en orden. -
Útil para aplicaciones que requieren estado, como:
-
Bases de datos (MySQL, PostgreSQL, MongoDB)
-
Sistemas de mensajería (Kafka, RabbitMQ)
-
Caches distribuidos (Redis en modo cluster)
-
Casos de uso
| Deployment (Stateless) | StatefulSet (Stateful) |
|---|---|
| Aplicaciones sin estado | Aplicaciones con estado |
| Pods intercambiables | Pods con identidad fija |
| No necesita almacenamiento persistente | Requiere volúmenes persistentes |
Manifiesto de "Statefulset"
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: myapp
spec:
serviceName: myapp-service
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: httpd:latest
volumeMounts:
- name: data
mountPath: /data
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 5Gi