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.
Navega a tu directorio de trabajo:
Abre la terminal y dirígete a la carpeta del proyecto predeterminada:
cd /home/labex/projectInicia 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.
Verifica que Minikube esté en ejecución:
Comprueba el estado del clúster de Minikube:
minikube status- Busca componentes como
kubeletyapiservermarcados comoRunning. - Si el clúster no está en ejecución, vuelve a ejecutar
minikube start.
- Busca componentes como
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

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.


