Skip to main content

Statefulset

image.png

Un objetoStatefulSet es un recurso de Kubernetes diseñado para gestionar Statefulsetaplicaciones con estado' sigue(stateful), eles mismodecir, patrónaquellas que necesitan mantener datos persistentes o identidad única entre reinicios o réplicas.

Mientras que un ‘Deployment'Deployment peroes ideal para aplicaciones sin estado (stateless), donde los pods son intercambiables, el StatefulSet se usa cuando cada pod necesita:

  • Tener un objetonombre único y predecible.

  • Mantener un almacenamiento persistente que no se pierda al reiniciar el pod.

  • Mantener el orden de estecreación tipoo garantizandoterminació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 ordenpod es eliminado y unicidadrecreado.

  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 dichosdatos Pods.(MySQL, EstoPostgreSQL, permiteMongoDB)

      tener
    • Pods
    • con

      Sistemas estado.de mensajería (Kafka, RabbitMQ)

    • Caches distribuidos (Redis en modo cluster)

Manifiesto de "Statefulset"

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: nginx-statefulset
  labels:
    app: nginxmyapp
spec:
  serviceName: nginx-myapp-service
  replicas: 3
  selector:
    matchLabels:
      app: nginxmyapp
  template:
    metadata:
      labels:
        app: nginxmyapp
    spec:
      containers:
      - name: nginxmyapp-container
        image: nginx:1.7.9httpd:latest
        ports:volumeMounts:
        - containerPort:name: 80data
          mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 5Gi