Creación y Gestión de Clases de Almacenamiento (Storage Classes) en Kubernetes. Bloque 4. Tema 4.3 del CKA.

 En Kubernetes, además de poder crear volúmenes persistentes de manera estática, también existe la capacidad de aprovisionar dinámicamente volúmenes mediante el uso de StorageClass. Estas clases permiten definir perfiles de almacenamiento, proporcionando un mecanismo flexible y escalable para satisfacer las necesidades específicas de las cargas de trabajo.

¿Qué es una StorageClass?

Una StorageClass en Kubernetes es un recurso que describe cómo debe gestionarse el almacenamiento dinámico en el clúster. Define un conjunto de parámetros que determinan el tipo de almacenamiento, sus características, el aprovisionador que se utilizará y cómo se manejarán los volúmenes cuando ya no sean necesarios. Esto facilita la creación automatizada de volúmenes sin necesidad de intervención manual del administrador.

Ejemplo de StorageClass

A continuación, presentamos un manifiesto YAML para crear una StorageClass en Kubernetes que aprovisiona volúmenes de almacenamiento utilizando Amazon Elastic Block Store (EBS) con el tipo de disco gp3:


apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: cka-sc-aws-gp3 provisioner: kubernetes.io/aws-ebs parameters: type: gp3 reclaimPolicy: Retain volumeBindingMode: Immediate

Explicación del ejemplo:

  • provisioner: Este campo especifica el controlador o proveedor de almacenamiento que se utilizará. En este caso, se utiliza kubernetes.io/aws-ebs, que es el provisioner para Amazon EBS.
  • parameters: Define los parámetros específicos del proveedor. En este ejemplo, se especifica que se utilizará el tipo de almacenamiento gp3.
  • reclaimPolicy: Define qué hacer con el volumen una vez que el PVC (PersistentVolumeClaim) ha sido liberado. En este caso, se retiene (Retain) para evitar eliminar los datos accidentalmente.
  • volumeBindingMode: En este caso, se establece en Immediate, lo cual indica que el volumen será aprovisionado inmediatamente después de la creación del PVC.

Modos de Acceso para Volúmenes

Kubernetes admite varios modos de acceso que determinan cómo pueden montarse los volúmenes:

  1. ReadWriteOnce (RWO): El volumen solo puede ser montado por un pod en un único nodo. Este es el modo de acceso más común y suele utilizarse para discos de almacenamiento en bloque.
  2. ReadWriteMany (RWX): Permite que el volumen sea montado por múltiples pods a la vez en diferentes nodos. Es ideal para sistemas de archivos compartidos como NFS.
  3. ReadOnlyMany (ROX): El volumen puede ser montado por múltiples pods en modo solo lectura. Es útil para casos en los que varias aplicaciones requieren acceso a datos inmutables.

Políticas de Recuperación de un Volumen (Reclaim Policies)

La política de recuperación de un volumen especifica lo que sucede con los datos cuando el volumen ya no es necesario:

  • Retain: El volumen persiste después de ser liberado. Esta política es ideal para mantener los datos de forma manual para su posterior análisis o reutilización.
  • Delete: El volumen y sus datos son eliminados automáticamente cuando ya no se necesita. Esta es una opción común para almacenamiento temporal o datos de pruebas.
  • Recycle: El volumen se limpia y puede ser reutilizado. Sin embargo, esta función ha quedado obsoleta en las versiones más recientes de Kubernetes.

Ejemplo Completo: Creación de una StorageClass y Aprovisionamiento de un Volumen

A continuación, crearemos una StorageClass que utiliza volúmenes de red compartidos (NFS) y aprovisionaremos un PersistentVolumeClaim (PVC) para una aplicación que requiere acceso compartido a un directorio de red.

StorageClass YAML para NFS:

apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nfs-client provisioner: cluster.local/nfs-subdir-external-provisioner parameters: archiveOnDelete: "false" reclaimPolicy: Delete volumeBindingMode: Immediate

PersistentVolumeClaim YAML que usa la StorageClass NFS:

apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nfs-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: nfs-client

En este ejemplo:

  • La StorageClass se define con un provisioner específico para un volumen NFS (nfs-subdir-external-provisioner), con una política de eliminación (Delete) que borra los datos cuando el PVC ya no es necesario.
  • La política de volumeBindingMode se establece en Immediate, lo que significa que el volumen se aprovisiona tan pronto como se crea el PVC.
  • El PersistentVolumeClaim (nfs-pvc) se declara con el modo de acceso ReadWriteMany, lo que permite el acceso concurrente desde múltiples pods.

Conclusión

El uso de StorageClass en Kubernetes permite a los administradores de sistemas y desarrolladores gestionar el almacenamiento de manera más eficiente y escalable. Proporciona la flexibilidad para aprovisionar automáticamente volúmenes basados en las necesidades de las aplicaciones, simplificando la gestión del almacenamiento. Además, los diferentes modos de acceso y políticas de recuperación permiten ajustar la configuración según el caso de uso y los requisitos de persistencia de datos.

Comentarios