Almacenamiento de datos de aplicaciones con Volúmenes Persistentes

KubernetesBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderás cómo almacenar datos de aplicaciones con Volúmenes Persistentes (PersistentVolumes) en Kubernetes.

Los Volúmenes Persistentes (PVs, por sus siglas en inglés) son recursos de Kubernetes que representan un fragmento de almacenamiento en red en un clúster. Se pueden utilizar para almacenar datos de aplicaciones de una manera independiente del ciclo de vida del contenedor. Esto significa que los datos se pueden preservar incluso si el contenedor se detiene o se mueve a otro nodo.

En este laboratorio, crearás un Volumen Persistente y lo utilizarás para almacenar datos de una aplicación web sencilla. Luego, modificarás la aplicación para que utilice una Solicitud de Volumen Persistente (PersistentVolumeClaim, PVC) para acceder al Volumen Persistente. Finalmente, modificarás la 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 ligero de Kubernetes que se ejecuta en tu máquina local.

  1. Navegar a tu directorio de trabajo:

    Abre la terminal y navega hasta la carpeta de 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 iniciar, dependiendo del rendimiento de tu sistema.
  3. Verificar que Minikube esté en ejecución:

    Comprueba el estado del clúster de Minikube:

    minikube status
    • Busca componentes como kubelet y apiserver listados como Running (En ejecución).
    • 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 Volumen Persistente

En este paso, crearás un Volumen Persistente (PersistentVolume) que se puede utilizar para almacenar datos. Crearás 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 Volumen Persistente con una capacidad de 1Gi y un modo de acceso de ReadWriteOnce (Lectura y escritura una vez). 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 (Retener), lo que significa que los datos se preservarán incluso si se elimina el Volumen Persistente.

Aplica el Volumen Persistente 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 Volumen Persistente que creaste en el Paso 1. Crearás 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 Despliegue (Deployment) con una réplica y un contenedor que ejecuta la imagen de nginx. El campo volumeMounts especifica que el contenedor debe montar el Volumen Persistente en la ruta /usr/share/nginx/html/data. El campo volumes especifica que el contenedor debe utilizar una Solicitud de Volumen Persistente (PersistentVolumeClaim) llamada my-pvc.

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

kubectl apply -f web-app.yaml

Crear una Solicitud de Volumen Persistente

En este paso, crearás una Solicitud de Volumen Persistente (PersistentVolumeClaim) que se utilizará para solicitar almacenamiento del Volumen Persistente que creaste en el Paso 1. Crearás 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 una Solicitud de Volumen Persistente con un modo de acceso de ReadWriteOnce y una solicitud de 500Mi de almacenamiento del Volumen Persistente.

Aplica la Solicitud de Volumen Persistente 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 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 /bin/sh pod-name --

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

Una vez que estés en 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 aún 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 de la Solicitud de Volumen Persistente (PVC)

En este paso, modificarás la Solicitud de Volumen Persistente (PVC) para solicitar recursos de almacenamiento específicos del Volumen Persistente. 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 un campo allowVolumeExpansion: true a la clase de almacenamiento (storageclass) en la última línea.

kubectl edit storageclass standard
Ejemplo de modificación del almacenamiento de la PVC

Aplica la Solicitud de Volumen Persistente actualizada 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 cómo almacenar datos de aplicaciones con Volúmenes Persistentes (PersistentVolumes) en Kubernetes. Creaste un Volumen Persistente, desplegaste una aplicación web sencilla que utilizó el Volumen Persistente, creaste una Solicitud de Volumen Persistente (PersistentVolumeClaim) para solicitar almacenamiento del Volumen Persistente y modificaste la Solicitud de Volumen Persistente para solicitar recursos de almacenamiento específicos. También verificaste que los datos se estaban almacenando de forma persistente en el Volumen Persistente incluso si el contenedor se terminó o se movió a otro nodo.