0Pricing
DevOps Bootcamp · Lección

StatefulSets para aplicaciones con estado

Implemente y administre aplicaciones con estado, como bases de datos, mediante StatefulSets, garantizando identificadores de red estables y almacenamiento persistente.

StatefulSets para aplicaciones con estado es una lección gratuita de DevOps Bootcamp en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de DevOps Bootcamp, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de DevOps Bootcamp incluye 4 lecciones en total.

StatefulSets para aplicaciones con estado

¡Le damos la bienvenida! En esta lección profundizaremos en los StatefulSets, un objeto de Kubernetes diseñado para gestionar aplicaciones con estado.

A diferencia de las aplicaciones sin estado (que se pueden escalar y reemplazar fácilmente), las aplicaciones con estado necesitan una identidad única y almacenamiento persistente para cada instancia. Algunos ejemplos son las bases de datos, las colas de mensajes o las aplicaciones personalizadas que almacenan datos localmente.

¿Por qué Stateful? El desafío

Los Deployments tradicionales son ideales para las aplicaciones sin estado. Si un Pod deja de funcionar, otro lo reemplaza y no importa cuál atienda la solicitud.

Sin embargo, en las aplicaciones con estado, cada réplica suele necesitar una identidad estable y única, así como su propio almacenamiento dedicado. Si un Pod de una base de datos se reinicia, debe volver a conectarse a su volumen de datos específico.

Identidad estable de red y de los Pods

Una característica clave de los StatefulSets es que proporcionan identificadores de red estables y únicos para cada Pod.

  • Los Pods reciben nombres predecibles y ordenados (por ejemplo, web-0, web-1).
  • Conservan sus nombres de host durante los reinicios.
  • Esto permite que otros servicios se conecten de forma fiable a una réplica específica.

Almacenamiento estable y persistente

Los StatefulSets garantizan que cada Pod tenga su propio almacenamiento estable y persistente. Esto se gestiona mediante Persistent Volume Claims (PVCs).

Cuando se crea un Pod de un StatefulSet, se aprovisiona automáticamente un PVC a partir de una definición volumeClaimTemplates. Si el Pod deja de funcionar y se vuelve a crear, se volverá a asociar al mismo PVC y, por tanto, a sus datos originales.

Anatomía de un YAML de StatefulSet

La definición YAML de un StatefulSet es similar a la de un Deployment, pero incluye algunas adiciones esenciales. Contiene:

  • apiVersion, kind, metadata
  • spec.replicas, spec.selector, spec.template (como en los Deployments)
  • spec.serviceName: enlaza con un servicio headless.
  • spec.volumeClaimTemplates: define cómo se crean los PVC para cada Pod.

Servicio headless para identificadores estables

Para que los StatefulSets proporcionen identidades de red estables, necesitan un servicio headless. Un servicio headless no tiene una IP de clúster. En su lugar, devuelve directamente las direcciones IP de los Pods que selecciona.

El StatefulSet utiliza este servicio para registrar entradas DNS para cada uno de sus Pods (por ejemplo, pod-0.my-service.my-namespace.svc.cluster.local).

apiVersion: v1
kind: Service
metadata:
  name: my-app-headless
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None # This makes it a headless service
  selector:
    app: my-app

VolumeClaimTemplates

La sección volumeClaimTemplates es exclusiva de los StatefulSets. Es una plantilla para los Persistent Volume Claims (PVCs) que se crearán para cada réplica.

Cada Pod del StatefulSet (por ejemplo, my-app-0, my-app-1) obtendrá su propio PVC (por ejemplo, data-my-app-0, data-my-app-1) a partir de esta plantilla, lo que garantiza un almacenamiento dedicado.

volumeClaimTemplates:
- metadata:
    name: data # This name is used in Pod's volumeMounts
  spec:
    accessModes: [ "ReadWriteOnce" ]
    storageClassName: standard
    resources:
      requests:
        storage: 1Gi

Ejemplo completo de StatefulSet

Aquí tiene un ejemplo completo de un StatefulSet sencillo para Nginx. Observe el serviceName que enlaza con el servicio headless y la sección volumeClaimTemplates.

Para implementarlo, guárdelo como nginx-statefulset.yaml y ejecute kubectl apply -f nginx-statefulset.yaml.

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "nginx-headless" # Must match headless service name
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: k8s.gcr.io/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www # Mounts the volume from the PVC
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www # This name links to volumeMounts.name
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: standard
      resources:
        requests:
          storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-headless
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx

Nombres y orden de los Pods

Una vez implementado, verá Pods con nombres como web-0, web-1. Estos índices son estables y únicos.

Los StatefulSets imponen un orden estricto en las operaciones de escalado. Los Pods se crean en orden (0, 1, 2...) y se terminan en orden inverso (..., 2, 1, 0).

Este enfoque ordenado es fundamental para que muchos sistemas distribuidos con estado mantengan la coherencia.

Escalado y actualizaciones progresivas

Puede escalar un StatefulSet igual que un Deployment mediante kubectl scale statefulset web --replicas=3.

Las actualizaciones progresivas también funcionan, pero mantienen las mismas garantías de orden: los Pods se actualizan uno a uno, en orden ordinal inverso, de modo que el siguiente Pod no se actualiza hasta que el anterior está listo.

Esta cuidadosa orquestación minimiza las interrupciones en las aplicaciones con estado.

Compruebe sus conocimientos

¿Cuáles de las siguientes son características o requisitos clave de los StatefulSets de Kubernetes?

Repaso: StatefulSets en acción

¡Excelente trabajo! En esta lección hemos explorado los StatefulSets, un potente objeto de Kubernetes para gestionar aplicaciones con estado.

  • Proporcionan identidades de red estables y operaciones ordenadas.
  • Utilizan volumeClaimTemplates para proporcionar almacenamiento dedicado y persistente a cada réplica.
  • Un servicio headless es esencial para sus identificadores de red estables.

Los StatefulSets son fundamentales para ejecutar bases de datos y otras cargas de trabajo críticas con estado de forma fiable en Kubernetes.

Preguntas frecuentes

¿La lección «StatefulSets para aplicaciones con estado» es gratis?

Sí — el texto completo de «StatefulSets para aplicaciones con estado» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de DevOps Bootcamp, actualiza a CoddyKit PRO. El curso de DevOps Bootcamp incluye 4 lecciones en total.

¿Qué aprenderé en «StatefulSets para aplicaciones con estado»?

Implemente y administre aplicaciones con estado, como bases de datos, mediante StatefulSets, garantizando identificadores de red estables y almacenamiento persistente. Practicas DevOps Bootcamp con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar DevOps Bootcamp?

No se requiere experiencia previa. DevOps Bootcamp en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «StatefulSets para aplicaciones con estado»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de DevOps Bootcamp?

Sí. Cada lección de DevOps Bootcamp incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. StatefulSets para aplicaciones con estado
  2. DaemonSets para tareas específicas de nodos
  3. Comprender los Operators de Kubernetes
  4. Definiciones de recursos personalizados (CRD)
← Volver a DevOps Bootcamp