Almacenamiento de datos de aplicaciones con PersistentVolumes

KubernetesBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderás a almacenar datos de aplicaciones utilizando PersistentVolumes (Volúmenes Persistentes) en Kubernetes.

Los PersistentVolumes (PVs) son recursos de Kubernetes que representan una pieza de almacenamiento en red dentro de un clúster. Se pueden utilizar para almacenar datos de aplicaciones de manera 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 utilizarás para almacenar datos desde una aplicación web sencilla. A continuación, modificarás la aplicación para que utilice un PersistentVolumeClaim (PVC) con el fin de acceder al PersistentVolume. Por último, modificará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 ejecución. Minikube es un entorno de Kubernetes ligero 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. Iniciar 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. Verificar que Minikube se esté ejecutando:

    Comprueba el estado del clúster de Minikube:

    minikube status
    
    • Busca componentes como kubelet y apiserver que aparezcan como Running.
    • Si el clúster no está en marcha, 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 se podrá utilizar para almacenar datos. Crearas 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 de lectura y escritura por un solo nodo (ReadWriteOnce). El campo hostPath especifica que los datos se almacenarán en la máquina host 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. Crearas 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 al PersistentVolume que creaste en el Paso 1. Crearas 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 los datos

En este paso, verificarás que los datos se están persistiendo 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, encuentra el nombre del pod que ejecuta tu aplicación ejecutando 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 que ejecuta tu aplicación:

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

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

Una vez que estés dentro de la sesión de shell, ejecuta el siguiente comando para agregar 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 todavía existe 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. Modificarás 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

Agrega el campo allowVolumeExpansion: true a la clase de almacenamiento (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 con PersistentVolumes en Kubernetes. Creaste un PersistentVolume, desplegaste una aplicación web sencilla que utilizaba el PersistentVolume, creaste un PersistentVolumeClaim para solicitar almacenamiento al PersistentVolume y modificaste el PersistentVolumeClaim para solicitar recursos de almacenamiento específicos. También verificaste que los datos se mantenían persistentes en el PersistentVolume incluso si el contenedor se detenía o se trasladaba a otro nodo.