Almacenamiento de datos de aplicaciones con PersistentVolumes

KubernetesBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderás a almacenar datos de aplicaciones utilizando PersistentVolumes en Kubernetes.

Los PersistentVolumes (PV) son recursos de Kubernetes que representan una unidad de almacenamiento en red dentro de un clúster. Se utilizan para almacenar datos de aplicaciones de forma independiente al ciclo de vida del contenedor. Esto significa que los datos se conservan incluso si el contenedor se detiene o se traslada a otro nodo.

En este laboratorio, crearás un PersistentVolume y lo usarás para almacenar datos de una aplicación web sencilla. Luego, modificarás la aplicación para que utilice un PersistentVolumeClaim (PVC) con el fin de acceder al PersistentVolume. Finalmente, ajustarás el PVC para solicitar recursos de almacenamiento específicos.

Iniciar el clúster de Minikube

Antes de crear recursos, necesitas un clúster de Kubernetes en funcionamiento. Minikube es un entorno ligero de Kubernetes que se ejecuta en tu máquina local.

  1. Navega a tu directorio de trabajo:

    Abre la terminal y dirígete a la carpeta del proyecto predeterminada:

    cd /home/labex/project
    
  2. Inicia Minikube:

    Inicia Minikube para inicializar un clúster de Kubernetes:

    minikube start
    
    • Este comando configura un clúster de Kubernetes de un solo nodo en tu máquina local.
    • Minikube puede tardar unos minutos en iniciarse, dependiendo del rendimiento de tu sistema.
  3. Verifica que Minikube esté en ejecución:

    Comprueba el estado del clúster de Minikube:

    minikube status
    
    • Busca componentes como kubelet y apiserver marcados como Running.
    • Si el clúster no está en ejecución, vuelve a ejecutar minikube start.

Si encuentras problemas al iniciar Minikube, utiliza minikube delete para restablecer el entorno si es necesario.

Crear un PersistentVolume

En este paso, crearás un PersistentVolume que servirá para almacenar datos. Crea un archivo YAML llamado pv.yaml con el siguiente contenido:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: /mnt/data

Este archivo crea un PersistentVolume con una capacidad de 1Gi y un modo de acceso ReadWriteOnce. El campo hostPath especifica que los datos se almacenarán en la máquina anfitriona en la ruta /mnt/data. El campo persistentVolumeReclaimPolicy se establece en Retain, lo que significa que los datos se conservarán incluso si se elimina el PersistentVolume.

Aplica el PersistentVolume a tu clúster con el siguiente comando:

kubectl apply -f pv.yaml

Desplegar una aplicación web sencilla

En este paso, desplegarás una aplicación web sencilla que almacenará datos en el PersistentVolume que creaste en el paso anterior. Crea un archivo YAML llamado web-app.yaml con el siguiente contenido:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web-app
  template:
    metadata:
      labels:
        app: web-app
    spec:
      containers:
        - name: web-app
          image: nginx
          volumeMounts:
            - name: data
              mountPath: /usr/share/nginx/html/data
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: my-pvc

Este archivo crea un Deployment con una réplica y un contenedor que ejecuta la imagen de nginx. El campo volumeMounts especifica que el contenedor debe montar el PersistentVolume en la ruta /usr/share/nginx/html/data. El campo volumes especifica que el contenedor debe utilizar un PersistentVolumeClaim llamado my-pvc.

Aplica el Deployment a tu clúster con el siguiente comando:

kubectl apply -f web-app.yaml

Crear un PersistentVolumeClaim

En este paso, crearás un PersistentVolumeClaim que se utilizará para solicitar almacenamiento del PersistentVolume que creaste anteriormente. Crea un archivo YAML llamado pvc.yaml con el siguiente contenido:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 500Mi

Este archivo crea un PersistentVolumeClaim con un modo de acceso ReadWriteOnce y una solicitud de 500Mi de almacenamiento del PersistentVolume.

Aplica el PersistentVolumeClaim a tu clúster con el siguiente comando:

kubectl apply -f pvc.yaml

Verificar la persistencia de datos

En este paso, verificarás que los datos se están guardando de forma persistente en el PersistentVolume. Accederás a la aplicación web que se ejecuta en el contenedor y escribirás algunos datos en el PersistentVolume.

Primero, busca el nombre del pod que ejecuta tu aplicación con el siguiente comando:

kubectl get pods -l app=web-app

Deberías ver un único pod ejecutando tu aplicación. Anota el nombre del pod.

A continuación, ejecuta el siguiente comando para abrir una sesión de shell en el contenedor de tu aplicación:

kubectl exec -it pod-name -- /bin/sh

Reemplaza pod-name con el nombre del pod que anotaste anteriormente.

Una vez dentro de la sesión de shell, ejecuta el siguiente comando para añadir un archivo test.txt:

echo "This is a test file." > /usr/share/nginx/html/data/test.txt

Este comando crea un archivo llamado test.txt con el texto "This is a test file." en el directorio de datos del PersistentVolume.

Elimina la aplicación web con el siguiente comando:

kubectl delete deployment web-app

Vuelve a crear la aplicación web con el siguiente comando:

kubectl apply -f web-app.yaml

Verifica que el archivo que creaste en el directorio de datos sigue existiendo con el siguiente comando:

kubectl get pods -l app=web-app
kubectl exec pod-name -- cat /usr/share/nginx/html/data/test.txt

Reemplaza pod-name con el nombre del pod que anotaste anteriormente.

Modificar los recursos de almacenamiento del PVC

En este paso, modificarás el PVC para solicitar recursos de almacenamiento específicos del PersistentVolume. Modifica el archivo pvc.yaml para solicitar 1Gi de almacenamiento en lugar de 500Mi.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

Añade el campo allowVolumeExpansion: true a la StorageClass en la última línea.

kubectl edit storageclass standard

Ejemplo de modificación de almacenamiento de PVC

Aplica el PersistentVolumeClaim actualizado a tu clúster con el siguiente comando:

kubectl delete deployment web-app
kubectl delete pvc my-pvc
kubectl apply -f web-app.yaml
kubectl apply -f pvc.yaml

Resumen

En este laboratorio, aprendiste a almacenar datos de aplicaciones utilizando PersistentVolumes en Kubernetes. Creaste un PersistentVolume, desplegaste una aplicación web sencilla que utilizaba dicho volumen, creaste un PersistentVolumeClaim para solicitar almacenamiento y modificaste el PersistentVolumeClaim para solicitar recursos de almacenamiento específicos. También verificaste que los datos persistían en el PersistentVolume incluso si el contenedor se eliminaba o se trasladaba a otro nodo.