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

Ubicación, Estructura y Manejo básico de certificados.

                                                     Kubernetes utiliza certificados TLS (X.509) para cifrar la comunicación entre sus componentes y autenticar identidades (usuarios, nodos, API Server, etc.). Estos certificados son generados y gestionados automáticamente cuando se instala un clúster con kubeadm . En este artículo, veremos dónde se almacenan los certificados , cuál es su estructura y cómo inspeccionarlos fácilmente, una habilidad muy útil para el examen CKA. Cuando creas un clúster con kubeadm , los certificados se generan por defecto en el directorio: /etc/ kubernetes /pki/ Puedes ver su contenido con: ls -l /etc/kubernetes/pki/ También hay certificados en: /etc/kubernetes/ (ahí verás admin.conf , kubelet.conf , etc., que incluyen certificados embebidos, como veremos más abajo). 🧱 Estructura de los ce...

🔁 Renovación y Rotación de Certificados en Kubernetes (kubeadm certs)

  🎯 Introducción En un clúster de Kubernetes, la mayoría de los certificados generados por kubeadm tienen una validez de un año . Para evitar interrupciones en los componentes críticos, es fundamental revisar periódicamente su vigencia y saber cómo renovarlos correctamente. En este artículo aprenderás: Cómo comprobar la expiración de los certificados Cómo renovarlos automáticamente con kubeadm Cómo simular una renovación manual con openssl Cómo aplicar los cambios reiniciando los componentes afectados 🕵️‍♂️ Comprobación del estado de los certificados Kubernetes ofrece una herramienta integrada para revisar los certificados del clúster: kubeadm certs check-expiration Este comando muestra información clave: Fecha de expiración Tipo de certificado Ruta en el sistema 📌 Salida de ejemplo: CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY apiserver Jan 06 , 2026 19 :56 UTC 330d ...

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...