Entendiendo los Volúmenes Persistentes y Efímeros en Kubernetes. Bloque 4. Tema 4.2 del CKA.


En este artículo vamos a profundizar en cómo Kubernetes maneja el almacenamiento y cómo puedes usar diferentes tipos de volúmenes, tanto persistentes como efímeros, según tus necesidades. Además, aprenderemos a configurar Persistent Volumes (PV) y Persistent Volume Claims (PVC) para administrar el almacenamiento de forma eficiente.

Visión general del almacenamiento en Kubernetes

Kubernetes maneja el almacenamiento utilizando volúmenes, que pueden ser discos o subdirectorios compartidos entre los pods. Estos volúmenes se dividen principalmente en dos tipos:

  • Volúmenes Persistentes (Persistent Volumes): Estos sobreviven a los ciclos de vida del pod, es decir, permanecen disponibles incluso después de que el pod haya sido reiniciado o eliminado. Son esenciales para aplicaciones que requieren almacenamiento de datos permanente, como bases de datos.

  • Volúmenes Efímeros (Ephemeral Volumes): Estos volúmenes solo existen durante la vida del pod y se eliminan cuando el pod es terminado. Son útiles para aplicaciones que no requieren conservar datos entre sesiones, como sistemas de caché temporal o almacenamiento de logs.

Volúmenes Efímeros

Los volúmenes efímeros se declaran dentro de la especificación de un pod, y se conocen como "almacenamiento en línea" (inline storage). Este tipo de almacenamiento se crea cuando se inicializa el pod y se elimina cuando el pod finaliza. Se utiliza comúnmente para almacenamiento temporal, como la caché, los logs, o como espacio de trabajo temporal.

Ejemplo de un volumen efímero con límites de almacenamiento


spec: containers: - name: simple-container resources: requests: memory: "250Mi" cpu: "200m" ephemeral-storage: "128Mi" limits: memory: "1Gi" cpu: "500m" ephemeral-storage: "128Mi"

En este ejemplo, se asignan límites de almacenamiento efímero para el contenedor, junto con límites de memoria y CPU. Esto garantiza que el contenedor no utilice todo el almacenamiento del nodo.

Tipos de Volúmenes Efímeros en Kubernetes

Kubernetes admite varios tipos de volúmenes efímeros que se pueden usar según las necesidades de tu aplicación. A continuación, te mostramos algunos ejemplos de los tipos más comunes:

1. emptyDir

El volumen emptyDir se crea cuando se inicia el pod y se elimina cuando el pod finaliza. Todos los contenedores dentro del pod pueden compartir este volumen, lo que lo hace útil para almacenamiento temporal que puede necesitar ser accesible entre múltiples contenedores dentro de un mismo pod.

spec: volumes: - name: cka-volume emptyDir: {}

2. configMap, downwardAPI y secret

Estos tipos de volúmenes permiten inyectar datos específicos, como configuraciones o secretos, en el contenedor. Por ejemplo, un volumen basado en un configMap proporciona archivos de solo lectura que el contenedor puede utilizar para configurarse.

spec: volumes: - name: cka-volume configMap: name: my-configmap

3. CSI ephemeral volumes

Los volúmenes efímeros de CSI (Container Storage Interface) proporcionan una interfaz para gestionar el almacenamiento efímero o persistente de manera dinámica. Estos volúmenes pueden ser proporcionados por drivers CSI que se conectan a diferentes proveedores de almacenamiento, tanto locales como en la nube.

spec: volumes: - name: cka-volume csi: driver: csi-isilon.dellemc.com volumeAttributes: size: "5Gi"

Volúmenes Persistentes

Los volúmenes persistentes, a diferencia de los efímeros, mantienen los datos a lo largo de la vida útil del pod y pueden ser reutilizados por varios pods. Estos volúmenes se declaran en la especificación del pod, pero también pueden ser aprovisionados de manera estática o dinámica mediante PersistentVolumes (PV).

Tipos de Volúmenes Persistentes en Kubernetes

Kubernetes admite varios tipos de volúmenes persistentes. Algunos de los más comunes son:

1. hostPath

El volumen hostPath monta una ruta del sistema de archivos del nodo directamente en el pod. Este tipo de volumen solo es adecuado para entornos de desarrollo, ya que puede tener vulnerabilidades de seguridad si se usa en producción.


spec: volumes: - name: cka-volume hostPath: path: /var/local/data/web

2. NFS (Network File System)

El volumen NFS permite que múltiples pods accedan al mismo almacenamiento en red de manera concurrente, lo que es ideal para compartir archivos entre ellos.


spec: volumes: - name: cka-volume nfs: server: nfs-server.example.com path: /data readonly: true

Configurando Persistent Volumes (PV) y Persistent Volume Claims (PVC)

Para aprovisionar almacenamiento persistente en Kubernetes, se utilizan los recursos PersistentVolume (PV) y PersistentVolumeClaim (PVC). El PV define el almacenamiento disponible, mientras que el PVC es utilizado por los pods para solicitar acceso a ese almacenamiento.

Ejemplo de un PV basado en hostPath

apiVersion: v1 kind: PersistentVolume metadata: name: cka-pv-hostpath spec: capacity: storage: 3Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain hostPath: path: /pv/data

En este ejemplo, estamos creando un PersistentVolume de 3 GB que se basa en un directorio local en el nodo (/pv/data). Este volumen tiene el modo de acceso ReadWriteOnce, lo que significa que solo puede ser montado por un pod a la vez en un único nodo.

Ejemplo de un PVC asociado al PV anterior

Una vez que el PV está disponible, los pods pueden reclamar este almacenamiento utilizando un PersistentVolumeClaim (PVC).

apiVersion: v1 kind: PersistentVolumeClaim metadata: name: cka-simple-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 3Gi

En este caso, el PVC solicita 3 GB de almacenamiento persistente con el modo de acceso ReadWriteOnce. Kubernetes automáticamente asociará este PVC con un PV disponible que cumpla con las características solicitadas.

Conclusión

El almacenamiento en Kubernetes es extremadamente flexible y puede ser ajustado según las necesidades de tu aplicación, desde volúmenes efímeros para almacenamiento temporal hasta volúmenes persistentes que sobreviven reinicios y fallos de pods. Con el uso adecuado de PersistentVolumes y PersistentVolumeClaims, puedes gestionar de manera eficiente el almacenamiento de tus aplicaciones en un entorno distribuido.

Este artículo ha cubierto los conceptos clave y los ejemplos prácticos de almacenamiento en Kubernetes, ayudando a comprender cómo utilizar volúmenes para gestionar datos de manera eficaz.

Comentarios