Ir al contenido principal

Configuración de Aplicaciones con Almacenamiento Persistente en Kubernetes

 El almacenamiento persistente es crucial para las aplicaciones que manejan datos a largo plazo, como bases de datos o sistemas de archivos compartidos. En este artículo, aprenderemos cómo mapear los requisitos de almacenamiento de aplicaciones para utilizar volúmenes persistentes en Kubernetes. Usaremos ejemplos prácticos para entender cómo configurar bases de datos con almacenamiento persistente y sistemas de archivos distribuidos.

Mapeo de los Requisitos de Almacenamiento de Aplicaciones

En Kubernetes, un PersistentVolumeClaim (PVC) es la forma en la que una aplicación solicita almacenamiento persistente. Un PVC especifica características como el tamaño, el modo de acceso y el tipo de almacenamiento, y Kubernetes intentará asignar un PersistentVolume (PV) que cumpla con esas características.

A continuación, veremos cómo mapear los requisitos de almacenamiento de aplicaciones para garantizar un almacenamiento eficiente y confiable en Kubernetes.

Consideraciones para Almacenamiento de Bases de Datos

Las bases de datos suelen requerir almacenamiento persistente con ciertas características específicas:

  • Persistencia de datos: Los datos deben sobrevivir a los reinicios de los Pods.
  • Alta disponibilidad: El almacenamiento debe estar disponible incluso si uno de los Pods o nodos falla.
  • Integridad de los datos: El almacenamiento debe garantizar la consistencia y la protección de los datos.
Ejemplo: Configuración de una base de datos MySQL con PV persistente

Vamos a configurar una base de datos MySQL en Kubernetes que utilizará un volumen persistente para almacenar sus datos.

Declaración del PersistentVolume (PV) y PersistentVolumeClaim (PVC) para MySQL


apiVersion: v1 kind: PersistentVolume metadata: name: mysql-pv-volume labels: type: local spec: storageClassName: cka-manual-mapping capacity: storage: 10Gi accessModes: - ReadWriteOnce hostPath: path: /mnt/data --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pvc labels: database: mysql spec: storageClassName: cka-manual-mapping accessModes: - ReadWriteOnce resources: requests: storage: 10Gi

En este ejemplo, el PV y el PVC están configurados para almacenar 10Gi de datos en el directorio /mnt/data del nodo. Utilizamos la política de acceso ReadWriteOnce (RWO), que permite que un solo Pod monte el volumen en un único nodo a la vez.

Declaración del Deployment de MySQL


apiVersion: apps/v1 kind: Deployment metadata: name: database-mysql labels: database: mysql spec: selector: matchLabels: database: mysql template: metadata: labels: database: mysql spec: containers: - name: mysql image: mysql:5.6 env: - name: MYSQL_ROOT_PASSWORD value: "password" ports: - containerPort: 3306 volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql volumes: - name: mysql-persistent-storage persistentVolumeClaim: claimName: mysql-pvc

Este manifiesto crea un Deployment de MySQL que usa el PVC mysql-pvc para almacenar sus datos en /var/lib/mysql, asegurando la persistencia de los datos.

Aplicación del PV, PVC y Deployment

Primero, aplica los recursos definidos:

$ kubectl apply -f mysql-pv.yaml $ kubectl apply -f mysql-deployment.yaml

Verifica los recursos creados:

$ kubectl get pvc $ kubectl get pv $ kubectl get deploy

Con esta configuración, la base de datos MySQL almacena sus datos en un volumen persistente, asegurando la integridad y la persistencia de los datos.

Consideraciones para Almacenamiento Compartido de Archivos

Para aplicaciones que requieren compartir datos entre múltiples Pods, como sistemas distribuidos, el almacenamiento en red es una solución eficaz. En Kubernetes, los volúmenes NFS (Network File System) permiten a los Pods acceder a un mismo volumen de manera concurrente.

Ejemplo: Configuración de un Sistema de Archivos Compartido con NFS

Para este ejemplo, utilizaremos el NFS subdir external provisioner, que permite aprovisionar dinámicamente volúmenes NFS.

Instalación del Proveedor NFS

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

Este comando instala el proveedor de NFS, especificando el servidor NFS y la ruta exportada.

Verifica la clase de almacenamiento creada:

$ kubectl get sc nfs-client

Declaración del PVC con clase de almacenamiento NFS

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

Este PVC está configurado para acceder al almacenamiento compartido con el modo ReadWriteMany (RWX), lo que permite que múltiples Pods monten el volumen y lean/escriban en él simultáneamente.

Uso del PVC NFS en un Deployment

A continuación, definimos un Deployment que monta el volumen NFS compartido:

apiVersion: apps/v1 kind: Deployment metadata: name: cka-workload-pvc spec: replicas: 2 template: spec: containers: - name: nginx image: nginx volumeMounts: - name: my-volume mountPath: /data volumes: - name: my-volume persistentVolumeClaim: claimName: cka-pvc-nfs-sc

Este Deployment crea dos réplicas de NGINX, ambas montando el mismo volumen NFS en /data.

Aplicación del PVC y el Deployment

Aplica el PVC y el Deployment con los siguientes comandos:


$ kubectl apply -f cka-pvc-nfs-sc.yaml $ kubectl apply -f cka-workload-pvc.yaml

Verifica los recursos creados:

$ kubectl get pvc $ kubectl get deploy $ kubectl get pods -o wide

Con esta configuración, ambos Pods pueden compartir archivos a través del volumen NFS, permitiendo que múltiples instancias de una aplicación accedan a los mismos datos.

Conclusión

Kubernetes facilita la configuración de almacenamiento persistente para una amplia variedad de aplicaciones, desde bases de datos hasta sistemas de archivos compartidos. Utilizando PersistentVolumes (PV) y PersistentVolumeClaims (PVC), podemos asignar y gestionar almacenamiento persistente de manera eficiente. Además, al integrar volúmenes compartidos como NFS, podemos garantizar el acceso concurrente de múltiples Pods a datos críticos.

A través de los ejemplos prácticos, este artículo ha demostrado cómo configurar aplicaciones con diferentes necesidades de almacenamiento persistente en Kubernetes, proporcionando soluciones tanto para bases de datos como para sistemas distribuidos.

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