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)

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