¿Qué es la persistencia de datos en Kubernetes?

5min

¿Sabías que, según datos de Statista, tres de cada cuatro grandes empresas y organizaciones usan la arquitectura de microservicios? No en vano, fue su creciente importancia y la necesidad de facilitar su gestión lo que hizo que se desarrollaran tecnologías como Docker y Kubernetes. Esta orquestación de servicios y recursos en contenedores resulta ligera y ágil. Ahora bien ¿qué sucede cuando se requiere que los datos se conserven?  Es aquí donde la persistencia de datos agrega un importante valor a Kubernetes. 

Índice

Stateless y Stateful

Antes de entrar en materia, conviene familiarizarse con dos conceptos relacionados con cómo se manejan los datos dentro de los contenedores y aplicaciones desplegadas en un clúster de Kubernetes. Son los términos stateless  y stateful.  

Las aplicaciones stateless no dependen de un estado persistente en el nodo o contenedor en el que se ejecutan, así que no almacenan datos localmente en el nodo, sino que recurren a fuentes externas como bases de datos, servicios externos o el propio clúster de Kubernetes. Por su parte, las aplicaciones stateful dependen de algún tipo de almacenamiento persistente en el nodo o en otro lugar o en sistemas de almacenamiento externos asociados a la aplicación.

Y es que la naturaleza inmutable de los contenedores facilita la creación y destrucción de las aplicaciones encapsuladas en estos según se requiera, lo que le suma ligereza y portabilidad, pero también se requiere capacidad de persistencia de datos independiente del ciclo de vida de los contenedores y que agregue la seguridad, integridad y almacenamiento resiliente y garantice el acceso a la información y continuidad del negocio.

 ¿A qué nos referimos con la persistencia de datos en Kubernetes?

La persistencia de datos o el almacenamiento de forma permanente de los datos de manera que puedan ser leídos posteriormente, es parte fundamental de la mayoría de las aplicaciones. En concreto, la persistencia de datos en Kubernetes propicia una ubicación duradera para los datos, evitando su pérdida, aun cuando el pod, nodo o contenedor sufra daños, sea modificado o eliminado. 

El almacenamiento permanente en Kubernetes debe cumplir con 3 requisitos:

  1. No debe estar atado al ciclo de vida del pod.
  2. Debe estar disponible en todos los nodos y pods del clúster de Kubernetes.
  3. Ha de tener alta disponibilidad, independientemente de posibles errores.

Con estas premisas, se descartan los volúmenes efímeros o no persistentes creados a nivel de pod y nodos, en donde el almacenamiento reside siempre y cuando estos elementos no sean eliminados. 

Volúmenes persistentes

Para lograr los objetivos señalados, se utiliza el recurso PersistentVolume (PV), que es una unidad de almacenamiento y funciona como un complemento a los volúmenes de Kubernetes. Con PV los pods utilizan PersistentVolumeClaim (PVC), que les permite solicitar almacenamiento especificando sus características. 

Es este tipo de volumen el que le brinda a Kubernetes las capacidades de almacenamiento persistente que requieren las aplicaciones para mantener el estado de sus objetos y garantizar la persistencia de la información fuera del contenedor, pod o nodo.

¿Cómo funciona la persistencia de datos en Kubernetes?

En primera instancia, para que exista persistencia, se debe manejar un almacenamiento físico real. Anteriormente, los complementos asociados al manejo de los volúmenes estaban inmersos en una estructura de árbol en la distribución de Kubernetes, lo que implicaba un trabajo adicional de configuración. 

Es por ello que se creó una interfaz de almacenamiento de contenedores (CSI), que permite la administración del almacenamiento sin modificaciones en el código fuente de Kubernetes.

El almacenamiento físico puede estar en dispositivos que implementen CSI, utilizado mayormente por los servicios de nube, o puede estar de manera local montado directamente en los nodos, en un sistema de archivos de red (NFS) o en almacenamiento sobre IP (iSCSI). Luego ello será transparente para Kubernetes y los usuarios, quienes lo visualizan como un volumen persistente (PV) ofrecido por la plataforma.

En Kubernetes existen dos tipos de aprovisionamiento que definen cómo se crearan los volúmenes: 

Aprovisionamiento estático

En este caso, el administrador de Kubernetes se encarga de crear el conjunto de volúmenes PV según los requerimientos y los deja disponibles para los pods. Estos últimos podrán acceder a cada uno de ellos según las especificaciones PVC que realicen.

Aprovisionamiento dinámico

El administrador crea un grupo de StorageClass (clases de almacenamiento), que establece la tecnología de almacenamiento a utilizar. 

Luego, el usuario, según la lista de clases, define cuál implementará para su pod y crea la reclamación de volumen (PVC), referenciando a la clase seleccionada. Y en este momento, a través de un aprovisionador, se crea el PV que se enlaza con el PVC realizada por el usuario.

Una vez definido dónde estarán alojados los datos se crea la interfaz de PV, que será expuesta a los pods, quienes accederán al volumen a través de una reclamación de volumen (PVC). De esta manera, el almacenamiento no queda expuesto en cada nodo, sino a través del PVC. Este aprovisionamiento asegura que los datos se mantengan aun cuando el nodo, pod o contenedor sea reiniciado o eliminado.

Fernando Fuentes

Productos relacionados: