Un volumen persistente de Kubernetes (PV) es un objeto que permite a los pods acceder a almacenamiento persistente en un dispositivo de almacenamiento, definido a través de un Kubernetes StorageClass. A diferencia de los volúmenes regulares, que son transitorios por naturaleza, los PV son persistentes, soportando casos de uso de aplicaciones con estado. Un PV es un objeto de recurso en un clúster de Kubernetes que sigue existiendo incluso después de que los pods que lo usan hayan sido destruidos.
Los PV deben solicitarse a través de reclamaciones de volumen persistente (PVC), que son solicitudes de almacenamiento. Un PVC es básicamente una solicitud para montar un PV que cumpla ciertos requisitos en un pod. Los PVC no especifican un PV concreto, sino que especifican qué StorageClass necesita el pod. Los administradores pueden definir StorageClasses que indican propiedades de los dispositivos de almacenamiento, como el rendimiento, los niveles de servicio y las políticas de back-end.
Una de las principales ventajas del patrón PVC en Kubernetes es que permite a los desarrolladores solicitar recursos de almacenamiento de forma dinámica, sin ser conscientes de la implementación de los dispositivos de almacenamiento subyacentes.
Contenido relacionado: lee nuestra guía sobre Kubernetes StorageClass
En este artículo:
Para vincular un pod a un PV, el pod debe contener un volumen de montaje y un PVC. Estas declaraciones permiten a los usuarios montar PVs en pods sin conocer los detalles del almacenamiento subyacente.
Hay dos opciones para montar los PV en un pod:
Contenido relacionado: lee nuestra guía sobre almacenamiento compartido de Kubernetes
Este tutorial demuestra cómo funcionan los PV y los PVC. Es un resumen del tutorial completo tutorial disponible en la documentación de Kubernetes.
1. Configuración de un nodo
Configura un clúster de Kubernetes con un solo nodo y asegúrate de que la línea de comandos kubectl tiene conexión con el plano de control. Crea un directorio en el nodo así:
sudo mkdir /mnt/data
Crea un archivo index.html en el directorio.
2. Creación de un volumen persistente
crea un archivo YAML como el siguiente para definir un PV.
Ejecuta este comando para crear el PV en tu nodo:
kubectl apply -f https://k8s.io/examples/pods/storage/pv-volume.yaml
3. Creando una reclamación de volumen persistente y vinculándola a un volumen persistente
Crea un PVC que requiera un PV, sujeto a las siguientes condiciones para que coincida con el PV que creaste antes:
Ejecuta este comando para aplicar el PVC:
kubectl apply -f https://k8s.io/examples/pods/storage/pv-claim.yaml
Cuando creas una reclamación de volumen persistente, el plano de control de Kubernetes encuentra el PV correcto. Si lo encuentra, vincula el PVC al PV.
Verifica el estado de la PV creada previamente ejecutando:
kubectl get pv task-pv-volume
Si la vinculación se realiza correctamente, la salida debería verse así:
4. Creación de un pod y montaje de la reclamación de volumen persistente
Por último, crea un pod que use el PVC. Ejecuta el pod con la imagen NGINX, especificando el PVC que creaste antes en la sección correspondiente de la especificación del pod:
Usa un comando bash para instalar curl en tu pod y ejecuta este comando:
curl http://localhost/
La salida debería mostrar el contenido del archivo index.html creado en el paso 1. Debería mostrar que el nuevo pod puede acceder a los datos en el PV a través del PVC.
El PVC de Kubernetes puede ser complejo de usar, lo que da lugar a errores que pueden ser difíciles de diagnosticar y solucionar. Los errores de PVC suelen estar relacionados con tres grandes categorías: problemas con la creación de PV, problemas con el aprovisionamiento de PV y cambios en las especificaciones de PV o PVC.
Los errores más comunes relacionados con los PVC son FailedAttachVolume, FailedMount y CrashLoopBackOff.
Estos dos errores indican que un pod no pudo montar un PV. La diferencia es que FailedAttachVolume ocurre cuando un volumen no puede separarse de un nodo anterior, y FailedMount ocurre cuando un volumen no puede montarse en la ruta requerida.
Hay numerosas causas posibles de estos dos errores, incluyendo fallo en el nuevo nodo, demasiados discos conectados al nuevo nodo, un error de partición de red y fallo de dispositivos de almacenamiento en el nodo anterior.
Diagnosticar el problema
Para diagnosticar la causa de problemas como FailedAttachVolume y FailedMount, ejecuta el comando describe pod y busca en la sección Events el mensaje que indica un error. El mensaje también debería proporcionar información sobre la causa.
Resolver el problema
Kubernetes no puede solucionar los errores FailedAttachVolume y FailedMount automáticamente, así que tendrás que manejar el problema manualmente:
CrashLoopBackOff indica que un pod se bloqueó, se reinició y se volvió a bloquear repetidamente. En algunos casos, este error ocurre como resultado de PersistentVolumeClaims corruptos.
Diagnosticar el problema
Para identificar si un error de CrashLoopBackOff se debe a un PVC, revisa los registros de la instancia anterior del contenedor que montó el PV, revisa los registros de despliegue y, si es necesario, ejecuta un shell en el contenedor para identificar por qué se está bloqueando.
Resolver el problema
Si CrashLoopBackOff es el resultado de un problema con un PVC, prueba los siguientes pasos:
kubectl get deployment -o jsonpath="{.spec.template.spec.volumes[*].persistentVolumeClaim.claimName}" failed-deployment
exec -it volume-debugger sh
NetApp Cloud Volumes ONTAP, la solución líder de gestión de almacenamiento de clase empresarial, ofrece servicios de gestión de almacenamiento seguros y probados en AWS, Azure y Google Cloud. La capacidad de Cloud Volumes ONTAP puede escalar hasta los petabytes y admite varios casos de uso, como servicios de archivos, bases de datos, DevOps o cualquier otra carga de trabajo empresarial, con un sólido conjunto de funcionalidades que incluyen alta disponibilidad, protección de datos, eficiencias de almacenamiento, integración con Kubernetes y más.
En concreto, Cloud Volumes ONTAP es compatible con el aprovisionamiento y la gestión de Kubernetes Persistent Volume requisitos de las cargas de trabajo en contenedores.
Conoce más sobre cómo Cloud Volumes ONTAP ayuda a enfrentar los retos de las aplicaciones en contenedores en estos Kubernetes Workloads with Cloud Volumes ONTAP Case Studies.