La administración del almacenamiento para aplicaciones con estado es un aspecto crucial de la organización de contenedores. El volumen persistente de Kubernetes (PV ) es una característica fundamental que aborda esta necesidad al proporcionar un mecanismo para administrar los recursos de almacenamiento independientemente del ciclo de vida de los pods individuales. En este artículo, profundizaremos en el concepto de volumen persistente de Kubernetes, sus características y las mejores prácticas para usarlo de manera efectiva en sus clústeres de Kubernetes.
¿Qué es el volumen persistente de Kubernetes?
Un volumen persistente de Kubernetes (PV) es un recurso de almacenamiento en un clúster de Kubernetes que abstrae la tecnología de almacenamiento subyacente. A diferencia del almacenamiento temporal, que está vinculado al ciclo de vida de un pod y desaparece cuando el pod se termina, los PV proporcionan una forma de administrar y asignar almacenamiento persistente a las aplicaciones. Esto garantiza que los datos permanezcan intactos incluso si los pods que acceden a ellos se terminan o reprograman.
El uso de volúmenes persistentes proporciona beneficios como los siguientes:
- Abstracción del almacenamiento: Los PV ocultan los detalles específicos del almacenamiento físico (p. ej., discos locales, SAN, almacenamiento en la nube) de los pods. Los usuarios pueden solicitar almacenamiento sin necesidad de conocer los detalles específicos de la implementación.
- Persistencia: Los PV garantizan la persistencia de los datos incluso en los reinicios o la reprogramación del pod. Imagine un pod de servidor web que utiliza almacenamiento efímero para almacenar registros temporales. Cuando el pod se reinicia, esos registros se pierden. Por otro lado, el almacenamiento persistente garantiza que los datos, como los datos de aplicaciones mantenidos por un pod de base de datos, permanezcan intactos.
- Desacople el almacenamiento de los pods: Esta separación permite una mayor flexibilidad y control sobre los recursos de almacenamiento. Los pods se pueden escalar fácilmente hacia arriba o hacia abajo sin afectar el almacenamiento subyacente.
Características clave de los volúmenes persistentes de Kubernetes
Los volúmenes persistentes de Kubernetes ofrecen varias funciones clave que los hacen potentes y adaptables para diversas necesidades de almacenamiento:
Clases de almacenamiento
Las clases de almacenamiento actúan como plantillas que definen diferentes niveles o categorías de almacenamiento disponibles en un clúster. Pueden especificar características como rendimiento (p. ej., SSD frente a HDD), capacidad, durabilidad y costo. Esto permite a los administradores aprovisionar almacenamiento adaptado a los requisitos específicos de las aplicaciones.
Modos de acceso
Los modos de acceso definen cómo los pods pueden interactuar con el almacenamiento proporcionado por un PV. Aquí hay un desglose de los modos comunes:
- ReadWriteOnce (RWO): Solo un pod a la vez puede montar el volumen con permisos de lectura y escritura. Esto garantiza la integridad de los datos para las aplicaciones que requieren acceso de escritura exclusivo, como una réplica de base de datos primaria.
- Solo lecturaMuchos (ROX): Múltiples pods pueden montar el volumen simultáneamente, pero solo en modo de solo lectura. Esto es útil para situaciones en las que las aplicaciones necesitan acceder a datos compartidos sin modificaciones, como un archivo de configuración o un repositorio de registros.
- ReadWriteMany (RWX): Múltiples pods pueden montar el volumen con permisos de lectura y escritura. Este modo de acceso debe utilizarse con precaución debido a posibles inconsistencias de datos si varios pods escriben simultáneamente. Es ideal para casos de uso específicos, como cachés compartidos o herramientas de edición colaborativa.
Políticas de recuperación
Las políticas de recuperación dictan cómo Kubernetes maneja un PV después de que ya no está vinculado a un pod. Las políticas principales incluyen:
- Conservar: La PV permanece después de que el pod se desenlaza, lo que permite la administración manual para un posible uso futuro o migración.
- Reciclar: Kubernetes recicla el PV . Por lo general, esto implica borrar los datos existentes y poner el almacenamiento a disposición para futuras asignaciones de pod.
- Eliminar: El objeto PV y su recurso de almacenamiento subyacente se eliminan por completo. Utilícelo con precaución, ya que la recuperación de datos podría no ser posible.
Complementos de volumen
Kubernetes aprovecha los complementos de volumen para cerrar la brecha entre la plataforma y varios proveedores de almacenamiento. Estos complementos permiten que Kubernetes comprenda e interactúe con diversos backends de almacenamiento, incluido el almacenamiento local, las soluciones de almacenamiento conectado a la red (NAS ), como NFS o iSCSI, y los servicios de almacenamiento específicos del proveedor de la nube, como AWS EBS o GCE Persistent Disk. Esta arquitectura de complemento proporciona una flexibilidad significativa para elegir e integrar soluciones de almacenamiento con su clúster de Kubernetes.
Aprovisionamiento de volúmenes persistentes
Kubernetes ofrece dos métodos principales para el aprovisionamiento de volúmenes persistentes (PV): aprovisionamiento estático y aprovisionamiento dinámico. Cada enfoque se adapta a diferentes casos de uso y proporciona ventajas distintivas.
Aprovisionamiento estático
En el aprovisionamiento estático, los administradores de clústeres crean y configuran de forma manual los PV de antemano. Este enfoque proporciona un control detallado sobre la configuración del almacenamiento y es adecuado para escenarios con requisitos de almacenamiento bien definidos que no cambian con frecuencia. Para aprovisionar un PV de forma estática:
1. Defina los detalles del almacenamiento: Determine la capacidad de almacenamiento, los modos de acceso (ReadWriteOnce, ReadOnlyMany, ReadWriteMany), la política de recuperación (Retener, Reciclar, Eliminar) y los detalles del complemento de volumen (p. ej., dirección del servidor para NFS ).
2. Cree el objeto PV usando YAML: Use un archivo de manifiesto YAML para definir la configuración de PV. Este es un ejemplo que utiliza el almacenamiento NFS:
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv-nfs
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
nfs:
path: /path/to/nfs/share
server: nfs-server.example.com
- nombre: Nombre único para PV .
- almacenamiento: Capacidad de almacenamiento deseada (p. ej., 10Gi para 10 Gigabytes).
- AccessModes: Elija el modo de acceso adecuado según los requisitos de su aplicación.
- persistenteVolumeReclaimPolítica: Defina cómo Kubernetes debe manejar el PV después de que se libera de un pod.
- nfs.path: Ruta al recurso compartido NFS en el servidor NFS.
- nfs.server: Dirección IP o nombre de host del servidor NFS.
3. Aplique el manifiesto YAML: Use el comando kubectl apply -f para crear el objeto PV en su clúster de Kubernetes.
Aprovisionamiento dinámico
El aprovisionamiento dinámico aprovecha StorageClasses para automatizar la creación de PV. Los administradores definen las clases de almacenamiento que especifican las características de almacenamiento deseadas y permiten que Kubernetes maneje la creación de PV según demanda cuando un persistenteVolumeClaim (PVC) solicita almacenamiento. Para usar el aprovisionamiento dinámico:
1. Defina una clase de almacenamiento: Cree un manifiesto de StorageClass YAML que especifique el aprovisionador, el tipo de almacenamiento (p. ej., SSD, HDD) y cualquier parámetro adicional requerido por el aprovisionador. Este es un ejemplo de AWS EBS:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard-ebs
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
- nombre: Nombre único para StorageClass.
- aprovisionador: Nombre del complemento del aprovisionador de almacenamiento (p. ej., kubernetes.io/aws-ebs para AWS EBS).
- parámetros.tipo: Tipo de almacenamiento dentro del aprovisionador (p. ej., gp2 para un tipo de volumen de SSD de uso general en AWS EBS).
2. Aplique el manifiesto de StorageClass: Use kubectl apply -f para crear el objeto StorageClass en su clúster.
Unión de volúmenes persistentes a pods
La vinculación de un PV a un pod permite que las aplicaciones aprovechen el almacenamiento persistente. Por lo general, esta unión se logra a través de PersistentVolumeClaim (PVC).
Un PVC actúa como una solicitud de almacenamiento presentada por un pod. Especifica los requisitos de almacenamiento que tiene un pod, incluidos los siguientes:
- Modos de acceso: Define cómo el pod puede interactuar con el almacenamiento (p. ej., ReadWriteOnce, ReadOnlyMuy, ReadWriteMuy).
- Capacidad de almacenamiento: La cantidad de almacenamiento deseada para el pod.
- StorageClassName (opcional): Hace referencia a StorageClass para el aprovisionamiento dinámico.
Este es un ejemplo de un pod llamado “ejemplo de pod” que utiliza un PVC llamado “ejemplo de PVC”:
apiVersion: v1
kind: Pod
metadata:
name: pod-example
spec:
containers:
- name: app
image: nginx
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: pvc-storage
volumes:
- name: pvc-storage
persistentVolumeClaim:
claimName: pvc-example
En este ejemplo, el pod monta el PVC llamado "pvc-ejemplo" en la ruta "/usr/share/nginx/html" dentro del contenedor. Esto permite que el pod acceda y administre sus datos persistentes almacenados en la PV subyacente.
Administración de volúmenes persistentes
Es imperativo administrar sus volúmenes persistentes (PV) de manera eficaz para mantener una utilización de almacenamiento eficiente y escalable en su clúster de Kubernetes. Algunos aspectos clave de la administración de PV incluyen:
1. Cómo cambiar el tamaño de los volúmenes persistentes
Kubernetes v1.11 introdujo la capacidad de cambiar el tamaño de los PV. Esto le permite ajustar dinámicamente la capacidad de almacenamiento asignada a un PV, para satisfacer los crecientes requisitos de almacenamiento de sus aplicaciones.
Para cambiar el tamaño de un PV, actualice la solicitud de almacenamiento del PVC: Edite el PVC que hace referencia al PV y modifique el valor de almacenamiento dentro de la sección resources.requests de la especificación YAML del PVC. Por ejemplo, para aumentar el tamaño de un PVC llamado “ejemplo de PVC” a 20Gi, actualice el manifiesto YAML:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-example
spec:
resources:
requests:
storage: 20Gi
Una vez que actualiza la solicitud de almacenamiento del PVC, Kubernetes intenta cambiar el tamaño del almacenamiento subyacente aprovisionado para el PV. Cambiar el tamaño de un PV es generalmente una operación unidireccional (expansión del almacenamiento). No se admite la reducción del tamaño de un PV debido a posibles inquietudes sobre la pérdida de datos.
2. Eliminación de volúmenes persistentes
Para eliminar un PV, asegúrese de que no esté vinculado actualmente a ningún PVC. No puede eliminar una PV en uso por un PVC para evitar la pérdida de datos. Aquí le mostramos cómo eliminar un PV:
kubectl delete pv pv-example
Reemplace el pv-ejemplo con el nombre real del PV que desea eliminar.
3. Actualización de volúmenes persistentes
Si bien la capacidad de almacenamiento central no se puede modificar directamente dentro de un objeto de PV, puede actualizar ciertos campos de metadatos de un PV, como etiquetas o anotaciones. Estas etiquetas y anotaciones se pueden usar para organizar, identificar y administrar mejor sus PV dentro del clúster.
Mejores prácticas para usar volúmenes persistentes de Kubernetes
Las siguientes son algunas de las mejores prácticas que debe seguir para aprovechar al máximo los volúmenes persistentes de Kubernetes:
- Seleccione las clases de almacenamiento adecuadas: Elija clases de almacenamiento que se ajusten a los requisitos de rendimiento y durabilidad de sus aplicaciones. Por ejemplo, utilice el almacenamiento respaldado por SSD para aplicaciones de alto rendimiento y el almacenamiento respaldado por HDD para fines de archivo.
- Configure los modos de acceso correctamente: Seleccione el modo de acceso adecuado para su PV en función de cómo sus aplicaciones necesitan acceder al almacenamiento. Por ejemplo, puede usar RWX para sistemas de archivos compartidos y RWO para bases de datos de una sola instancia.
- Implemente las políticas de recuperación de manera inteligente: Establezca políticas de recuperación que coincidan con su estrategia de administración del ciclo de vida de los datos. Use la política de retención para datos críticos que requieren intervención manual antes de su eliminación.
- Monitoreo y registro: Utilice herramientas de monitoreo y registro para monitorear el uso, el rendimiento y la salud de PV. Herramientas como Prometheus y Grafana pueden proporcionar información valiosa sobre su infraestructura de almacenamiento.
- Use Portworx ® para la administración avanzada de datos: Para soluciones avanzadas de administración de datos y almacenamiento persistente en Kubernetes, considere usar Portworx de Pure Storage. Portworx ofrece características como alta disponibilidad, recuperación ante desastres y copia de seguridad que están diseñadas específicamente para aplicaciones en contenedores.
Conclusiones
Los volúmenes persistentes (PV) de Kubernetes ofrecen un mecanismo fundamental para administrar el almacenamiento en aplicaciones con estado. Al aprovechar los PV, puede garantizar la persistencia de los datos, la alta disponibilidad y la utilización eficiente del almacenamiento dentro de su clúster de Kubernetes. Soluciones como Portworx de Pure Storage ofrecen una forma intuitiva de aprovechar los beneficios de los volúmenes persistentes de Kubernetes. Con características como alta disponibilidad, recuperación ante desastres y copia de seguridad que utiliza inteligencia artificial para mejorar la eficiencia, Portworx es la solución de almacenamiento persistente de Kubernetes ideal para aplicaciones en contenedores.