Ir al contenido principal

Expansión Dinámica de Volúmenes y Drivers de Almacenamiento en Kubernetes.

  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:

apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: expandable-storage-class provisioner: kubernetes.io/aws-ebs allowVolumeExpansion: true parameters: type: gp2

En este ejemplo:

  • allowVolumeExpansion: true habilita la capacidad de expandir volúmenes dinámicamente.
  • provisioner especifica el proveedor de almacenamiento (en este caso, AWS EBS).

Una vez aplicada esta StorageClass, puedes crear volúmenes persistentes que se puedan expandir:


kubectl apply -f expandable-storage-class.yaml
Expansión de un PVC

Si necesitas expandir un volumen, puedes hacerlo editando el PersistentVolumeClaim (PVC). Supongamos que tienes el siguiente PVC:

apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-expandable spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: expandable-storage-class

Para aumentar el tamaño del volumen, simplemente utiliza el comando kubectl patch:

kubectl patch pvc pvc-expandable -p '{"spec": {"resources": {"requests": {"storage": "20Gi"}}}}'

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:

apiVersion: v1 kind: PersistentVolume metadata: name: csi-pv-example spec: capacity: storage: 50Gi accessModes: - ReadWriteOnce csi: driver: pd.csi.storage.gke.io volumeHandle: projects/project-id/zones/zone/disks/disk-name fsType: ext4

En este ejemplo:

  • driver: pd.csi.storage.gke.io especifica el driver CSI para Google Persistent Disks.
  • volumeHandle hace 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:

apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ebs-storage provisioner: kubernetes.io/aws-ebs parameters: type: gp2

Luego, podemos crear un PersistentVolumeClaim (PVC) que use esta clase de almacenamiento:

apiVersion: v1 kind: PersistentVolumeClaim metadata: name: dynamic-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi storageClassName: ebs-storage

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:

apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteMany nfs: server: 10.0.0.1 path: "/shared/data"

En este ejemplo:

  • server apunta a la dirección IP del servidor NFS.
  • path define la ruta del directorio compartido en el servidor.

Luego, creamos un PersistentVolumeClaim (PVC) para que los Pods puedan usar este volumen compartido:

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

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:

helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \ --set nfs.server=x.x.x.x --set nfs.path=/exported/path

Una vez instalado, puedes definir un PVC que use este StorageClass:

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

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

Entradas populares de este blog

Autenticación y Autorización (Kubernetes).

La autenticación en Kubernetes es un aspecto crítico para la seguridad y control de acceso dentro de un clúster. Kubernetes proporciona varios mecanismos de autenticación para usuarios y cuentas de servicio, que deben pasar a través del API Server para realizar cualquier operación. En este artículo, revisaremos cómo funciona la autenticación y cómo puedes usar herramientas como kubectl y curl para interactuar de manera segura con el clúster. En primer lugar, ¿Qué es la autenticación y la autorización? •     Autenticación:  Es el proceso de verificar quién es un usuario. Responde a la pregunta "¿Quién eres?". •     Autorización: El proceso de determinar qué acciones puede realizar un usuario autenticado. Responde a la pregunta "¿Qué puedes hacer?". Primer paso: Autenticación. La autenticación en Kubernetes es el proceso mediante el cual el sistema verifica la identidad de los usuarios y cuentas de servicio que intentan acceder al clúster.  ...

Tip 1. Exámen CKA. Economiza y optimiza tu tiempo; Usa --help con el paginador Less en la ayuda.

📘 Domina los comandos --help y el uso de less en el examen CKA Durante el examen CKA (Certified Kubernetes Administrator) , uno de los recursos más potentes y completamente permitidos es el uso del --help en los comandos de Kubernetes. Además, puedes combinarlo con el paginador less para buscar y navegar fácilmente entre opciones. ✅ ¿Está permitido usar --help ? Sí, está 100% permitido . Puedes usar el --help de cualquier comando disponible en el entorno del examen: kubectl --help kubeadm init --help kubelet --help kubectl explain pod.spec.containers Estos comandos muestran la ayuda y las opciones disponibles directamente desde el sistema, sin necesidad de ir a la documentación. 🔍 ¿Cómo usar less para buscar rápidamente? Cuando la salida del comando es larga, puedes usar | less para verla de forma paginada y navegar más cómodamente. kubeadm init --help | less Una vez dentro de less , puedes buscar cualquier texto escribiendo /texto . Por ejemplo: /pod-networ...

TLS Bootstrapping en Kubernetes: Qué es, cómo funciona y por qué importa en el examen CKA

                                                       Uno de los conceptos que a menudo pasan desapercibidos en la administración de Kubernetes —pero que resultan clave tanto en entornos reales como en el examen CKA— es el TLS Bootstrapping . En este artículo entenderás qué es, cómo funciona, qué lo diferencia del kubeadm join tradicional y cómo puede aparecer en el examen. ¿Qué es TLS Bootstrapping? TLS Bootstrapping es el proceso por el cual el kubelet , el agente que corre en cada nodo, obtiene automáticamente un certificado TLS firmado por el clúster para autenticarse con el kube-apiserver . En otras palabras: permite que un nuevo nodo se una de forma segura al clúster sin necesidad de copiar manualmente los certificados. ¿Por qué es necesario? Cuando añades un nuevo nodo worker, su kubelet necesita autentic...