Skip to main content

Statefulset

image.png

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

  1. Identidad única por pod:
    Los pods se nombran secuencialmente: mi-app-0, mi-app-1, mi-app-2, etc.

  2. Volúmenes persistentes dedicados:
    Cada pod puede tener su propio PersistentVolumeClaim (PVC) que es estable incluso si el pod es eliminado y recreado.

  3. Orden garantizado:
    Los pods se crean, actualizan o eliminan uno por uno y en orden.

  4. Ú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