Descubriendo StatefulSets en Kubernetes

La clave para desplegar aplicaciones con estado de forma ordenada, persistente y confiable

ABAP

Víctor Armendáriz

8/12/20252 min leer

Cuando se trabaja con aplicaciones en Kubernetes, es común utilizar Deployments y ReplicaSets para gestionar cargas de trabajo sin estado. Sin embargo, estas soluciones no son adecuadas para aplicaciones que requieren mantener información a lo largo del tiempo, como bases de datos o sistemas de mensajería. Aquí es donde entran en juego los StatefulSets.

¿Qué es un StatefulSet?

Un StatefulSet es un recurso de Kubernetes diseñado para gestionar aplicaciones con estado. A diferencia de los ReplicaSets, que tratan a los pods como intercambiables, los StatefulSets proporcionan a cada pod una identidad persistente y única, lo cual es crucial para aplicaciones que requieren almacenamiento duradero, orden en el inicio y apagado, y conexiones estables.

¿Cuándo usar StatefulSets?

Según la documentación oficial de Kubernetes, es recomendable usar StatefulSets cuando la aplicación requiere:

  • Identificadores de red estables y únicos (como nombres de host constantes).

  • Almacenamiento persistente estable, que conserve datos aunque el pod se reinicie o se reemplace.

  • Despliegues y escalados ordenados, donde los pods se creen o eliminen uno a la vez, siguiendo un orden específico.

  • Actualizaciones automatizadas controladas, que respeten el orden y permitan una transición fluida entre versiones.

Estas características hacen de los StatefulSets una solución robusta para servicios críticos que no pueden tolerar la volatilidad asociada con los pods sin estado.

¿Cómo funciona un StatefulSet?

Los pods creados por un StatefulSet siguen un patrón de nombres predecible (por ejemplo, mi-aplicacion-0, mi-aplicacion-1, etc.), lo que permite una identificación constante. El controlador crea los pods de manera secuencial, comenzando con el índice más bajo. El siguiente pod no se crea hasta que el anterior esté en estado “Ready”.

Esto asegura que cada instancia del pod tenga tiempo para inicializarse correctamente antes de continuar con la siguiente. Además, se pueden asociar volúmenes persistentes únicos a cada pod, lo que permite mantener los datos incluso después de que un pod se elimine o reinicie.

Servicios sin encabezado para StatefulSets

Para que los pods de un StatefulSet puedan ser accedidos de forma directa y predecible, se utiliza un servicio sin encabezado (headless service). En este tipo de servicio, se establece el valor clusterIP: None, lo cual indica que no debe asignarse una IP al servicio, permitiendo que las solicitudes se enruten directamente a los nombres DNS de los pods (como mi-aplicacion-0.mi-servicio).

Esto difiere de los servicios estándar usados con ReplicaSets, que balancean tráfico de forma anónima a cualquier pod disponible, sin importar su identidad.

Diferencias clave con ReplicaSets

  • Los ReplicaSets tratan a los pods como intercambiables; los StatefulSets otorgan identidad única y persistente.

  • Los ReplicaSets crean pods de forma simultánea; los StatefulSets lo hacen secuencialmente.

  • En los StatefulSets, los pods mantienen almacenamiento persistente vinculado; en los ReplicaSets, el almacenamiento es efímero.

  • Los StatefulSets permiten hostnames estables; los ReplicaSets asignan nombres aleatorios con hashes.

Ing. Victor Manuel Armendariz Jaramillo

Consultor ABAP

El Ing. Víctor Manuel Armendáriz Jaramillo es consultor y desarrollador ABAP con más de 3 años de experiencia, especializado en adaptar y optimizar soluciones empresariales en SAP ECC, SAP S/4HANA y Fiori.