En esta última sección del bloque 4, abordaremos aspectos avanzados del almacenamiento en Kubernetes, como la expansión dinámica de volúmenes y el uso de Container Storage Interface (CSI) para aprovisionar almacenamiento en la nube o en infraestructura local. También discutiremos la provisión dinámica y el uso de almacenamiento compartido con NFS (Network File System).
Expansión Dinámica de Volúmenes en Kubernetes
La expansión dinámica de volúmenes permite modificar el tamaño de un volumen persistente sin la necesidad de eliminarlo o desasociarlo de un pod. Esto es muy útil cuando una aplicación necesita más almacenamiento de manera repentina, ya que puedes aumentar la capacidad sin interrumpir su funcionamiento.
Ejemplo: Definir una StorageClass con Expansión Dinámica
Para habilitar la expansión dinámica de volúmenes, necesitas definir una StorageClass con la capacidad de expansión habilitada. Aquí tienes un ejemplo de cómo hacerlo:
En este ejemplo:
allowVolumeExpansion: truehabilita la capacidad de expandir volúmenes dinámicamente.provisionerespecifica el proveedor de almacenamiento (en este caso, AWS EBS).
Una vez aplicada esta StorageClass, puedes crear volúmenes persistentes que se puedan expandir:
Expansión de un PVC
Si necesitas expandir un volumen, puedes hacerlo editando el PersistentVolumeClaim (PVC). Supongamos que tienes el siguiente PVC:
Para aumentar el tamaño del volumen, simplemente utiliza el comando kubectl patch:
Con este comando, expandimos el volumen de 10Gi a 20Gi en caliente, sin detener los Pods que usan este volumen.
Uso de Drivers CSI en Kubernetes
El Container Storage Interface (CSI) es un estándar que permite a Kubernetes interactuar con diferentes soluciones de almacenamiento, tanto en la nube como en infraestructura local. Los drivers CSI ofrecen flexibilidad y permiten la integración con proveedores de almacenamiento como AWS, Google Cloud, Azure y soluciones locales como Ceph o NFS.
Ejemplo: Uso de un Driver CSI
Supongamos que queremos usar Google Persistent Disks (GPD) como backend de almacenamiento en Google Kubernetes Engine (GKE). El siguiente manifiesto define un PersistentVolume que utiliza el driver CSI para GPD:
En este ejemplo:
driver: pd.csi.storage.gke.ioespecifica el driver CSI para Google Persistent Disks.volumeHandlehace referencia al ID del disco que se va a utilizar.
Este enfoque es similar cuando trabajas con otros proveedores de almacenamiento en la nube, como AWS EBS o Azure Disks.
Provisión Dinámica de Almacenamiento
Kubernetes también admite la provisión dinámica de volúmenes, lo que significa que los volúmenes se crean automáticamente cuando un pod los necesita. Esto elimina la necesidad de que el administrador de clústeres cree volúmenes de antemano.
Ejemplo: Provisión Dinámica usando AWS EBS
Imaginemos que queremos utilizar AWS EBS para la provisión dinámica de almacenamiento. El primer paso es crear una StorageClass que use AWS EBS:
Luego, podemos crear un PersistentVolumeClaim (PVC) que use esta clase de almacenamiento:
Al crear este PVC, Kubernetes automáticamente creará un PersistentVolume en AWS EBS y lo asignará al pod que lo necesite, sin intervención manual.
Almacenamiento Compartido: Uso de NFS
Para aplicaciones que requieren acceso concurrente a archivos desde múltiples Pods, el Network File System (NFS) es una opción popular. NFS permite compartir archivos en red, permitiendo que varios Pods accedan a un volumen de forma simultánea.
Ejemplo: Configuración de NFS en Kubernetes
Para configurar NFS en Kubernetes, definimos un PersistentVolume (PV) que apunte a un servidor NFS externo:
En este ejemplo:
serverapunta a la dirección IP del servidor NFS.pathdefine la ruta del directorio compartido en el servidor.
Luego, creamos un PersistentVolumeClaim (PVC) para que los Pods puedan usar este volumen compartido:
Este PVC permite a múltiples Pods acceder al volumen NFS en modo ReadWriteMany (RWX), lo que facilita el uso compartido de archivos.
Implementación de NFS usando Helm
Para facilitar la gestión de volúmenes NFS en Kubernetes, puedes usar el nfs-subdir-external-provisioner, que automatiza la creación de directorios en un servidor NFS.
Instala el provisioner usando Helm:
Una vez instalado, puedes definir un PVC que use este StorageClass:
Este enfoque permite la creación automática de directorios en el servidor NFS cuando se crea un nuevo PVC, simplificando la gestión de almacenamiento compartido en Kubernetes.
Conclusión
Hemos explorado cómo Kubernetes facilita la gestión avanzada de almacenamiento a través de características como la expansión dinámica de volúmenes y el uso de drivers CSI. Estas herramientas permiten escalar y manejar el almacenamiento de manera eficiente, sin interrumpir los servicios en producción.
Además, la provisión dinámica elimina la necesidad de crear volúmenes manualmente, y el uso de NFS permite compartir almacenamiento entre múltiples Pods, lo que es crucial para aplicaciones distribuidas. Con estos conceptos, ahora tienes una comprensión más profunda de cómo gestionar el almacenamiento en Kubernetes, asegurando que tus aplicaciones tengan acceso a los recursos que necesitan para funcionar de manera óptima.

Comentarios
Publicar un comentario