La gestión del almacenamiento para las aplicaciones con estado es un aspecto crucial de la orquestació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 este finaliza, las PV proporcionan una manera de gestionar y asignar el almacenamiento persistente a las aplicaciones. Esto garantiza que los datos permanezcan intactos, incluso si los pods que acceden a ellos han finalizado o se han reprogramado.
El uso de volúmenes persistentes proporciona ventajas como:
- Abstracción del almacenamiento: Las PV ocultan los detalles específicos del almacenamiento físico (por ejemplo, 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: Las PV garantizan la persistencia de los datos, incluso en los reinicios o la reprogramación de los pods. Imagine un pod de servidor web que utiliza almacenamiento efímero para almacenar registros temporales. Cuando el pod se reinicia, esos registros se pierden. El almacenamiento persistente, por otro lado, garantiza que los datos, como los datos de las aplicaciones mantenidos por un pod de base de datos, permanezcan intactos.
- Desvincular el almacenamiento de los pods: Esta separación permite una mayor flexibilidad y control de los recursos de almacenamiento. Los pods pueden escalarse o reducirse fácilmente sin afectar al almacenamiento subyacente.
Características clave de los volúmenes persistentes de Kubernetes
Los volúmenes persistentes de Kubernetes ofrecen varias características clave que los hacen potentes y adaptables a las 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 el rendimiento (por ejemplo, SSD frente a HDD), la capacidad, la durabilidad y el coste. Esto permite que los administradores aprovisionen almacenamiento adaptado a los requisitos específicos de las aplicaciones.
Modos de acceso
Los modos de acceso definen el modo en que los pods pueden interactuar con el almacenamiento proporcionado por una PV . Aquí tiene un desglose de los modos comunes:
- ReadWriteOnce (RWO): Solo un pod a la vez puede montar el volumen con permisos de lectura-escritura. Esto garantiza la integridad de los datos para las aplicaciones que requieren un acceso de escritura exclusivo, como una réplica de base de datos primaria.
- SololecturaMuchos (ROX): Varios pods pueden montar el volumen simultáneamente, pero solo en modo de solo lectura. Esto es útil para situaciones en las que las aplicaciones tienen que acceder a datos compartidos sin modificaciones, como un archivo de configuración o un repositorio de registros.
- ReadWriteMany (RWX): Varios pods pueden montar el volumen con permisos de lectura-escritura. Este modo de acceso debe usarse con precaución debido a las posibles incoherencias de datos si varios pods escriben simultáneamente. Es ideal para casos de uso específicos, como cachés compartidas o herramientas de edición colaborativas.
Políticas de reclamación
Las políticas de recuperación establecen el modo en que Kubernetes maneja una PV después de que ya no está vinculada a un pod. Las políticas principales incluyen:
- Conservar: La PV permanece después de que el pod se desvincula, lo que permite la administración manual para un posible uso futuro o migración.
- Reciclaje: Kubernetes recicla la PV . Esto suele implicar borrar cualquier dato existente y hacer que el almacenamiento esté disponible para futuras asignaciones de pods.
- 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 puede no ser posible.
Complementos de volumen
Kubernetes utiliza complementos de volumen para salvar la brecha entre la plataforma y varios proveedores de almacenamiento. Estos complementos permiten que Kubernetes comprenda e interactúe con diversos back-ends de almacenamiento, incluidos el almacenamiento local, las soluciones de almacenamiento conectado en red (NAS), como NFS o iSCSI, y los servicios de almacenamiento específicos de proveedores de la nube, como AWS EBS o GCE Persistent Disk. Esta arquitectura de complemento proporciona una flexibilidad significativa a la hora de elegir e integrar las soluciones de almacenamiento con su clúster de Kubernetes.
Aprovisionamiento de volúmenes persistentes
Kubernetes ofrece dos métodos principales para aprovisionar volúmenes persistentes (PV): aprovisionamiento estático y aprovisionamiento dinámico. Cada enfoque satisface diferentes casos de uso y proporciona ventajas distintas.
Aprovisionamiento estático
En el aprovisionamiento estático, los administradores de clúster crean y configuran manualmente las PV con antelación. Este enfoque proporciona un control detallado de la configuración del almacenamiento y es adecuado para escenarios con requisitos de almacenamiento bien definidos que no cambian con frecuencia. Para aprovisionar una PV estáticamente:
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 específicos del complemento de volumen (por ejemplo, la dirección del servidor para NFS ).
2. Cree el objeto PV usando YAML: Utilice un archivo de manifiesto YAML para definir la configuración PV. Este es un ejemplo de uso del 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 de la PV .
- almacenamiento: Capacidad de almacenamiento deseada (por ejemplo, 10Gi para 10 Gigabytes).
- accessModes : Elija el modo de acceso adecuado en función de los requisitos de su aplicación.
- persistenteVolumeReclaimPolicy: Defina el modo en que Kubernetes debería manejar la PV después de que se haya liberado 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: Utilice el comando kubectl apply -f para crear el objeto PV en su clúster de Kubernetes.
Aprovisionamiento dinámico
El aprovisionamiento dinámico utiliza 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 gestione la creación de PV bajo demanda cuando una reclamación de volumen persistente (PVC) solicita almacenamiento. Para usar el aprovisionamiento dinámico:
1. Defina una clase de almacenamiento: Cree un manifiesto StorageClass YAML que especifique el aprovisionamiento, el tipo de almacenamiento (por ejemplo, SSD, HDD ) y cualquier parámetro adicional que el aprovisionamiento requiera. Aquí tiene 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.
- proveedor: Nombre del plugin de aprovisionamiento de almacenamiento (por ejemplo, kubernetes.io/aws-ebs para AWS EBS ).
- parameters.type: Tipo de almacenamiento dentro del aprovisionamiento (por ejemplo, gp2 para un tipo de volumen SSD de uso general en AWS EBS ).
2. Aplique el manifiesto StorageClass: Utilice kubectl apply -f para crear el objeto StorageClass en su clúster.
Vincular volúmenes persistentes a pods
La vinculación de una PV a un pod permite que las aplicaciones aprovechen el almacenamiento persistente. Esta unión se consigue normalmente a través de una reclamación de volumen persistente (PVC).
Un PVC actúa como una solicitud de almacenamiento presentada por un pod. Especifica los requisitos de almacenamiento que un pod tiene, incluidos:
- Modos de acceso: Define el modo en que el pod puede interactuar con el almacenamiento (por ejemplo, ReadWriteOnce, ReadOnlyMany, ReadWriteMany).
- Capacidad de almacenamiento: La cantidad de almacenamiento deseada para el pod.
- StorageClassName (opcional): Hace referencia a un StorageClass para el aprovisionamiento dinámico.
Aquí tiene 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 gestione sus datos persistentes almacenados en la PV subyacente.
Gestión de los volúmenes persistentes
Es imprescindible gestionar eficazmente sus volúmenes persistentes (PV) para mantener un uso eficiente y escalable del almacenamiento en su clúster de Kubernetes. Algunos aspectos clave de la gestión PV son:
1. Cambiar el tamaño de los volúmenes persistentes
Kubernetes v1.11 introdujo la capacidad de cambiar el tamaño de las PV. Esto le permite ajustar dinámicamente la capacidad de almacenamiento asignada a una PV para satisfacer los crecientes requisitos de almacenamiento de sus aplicaciones.
Para cambiar el tamaño de una PV, actualice la solicitud de almacenamiento del PVC: Edite el PVC que hace referencia a la 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 la PV . El redimensionamiento de una PV suele ser una operación unidireccional (ampliación del almacenamiento). No se admite la reducción del tamaño de una PV debido a las posibles preocupaciones relacionadas con la pérdida de datos.
2. Eliminación de los volúmenes persistentes
Para eliminar una PV, asegúrese de que actualmente no está vinculada a ningún PVC. No puede eliminar una PV que esté usando un PVC para evitar la pérdida de datos. Así es como se borra una PV:
kubectl delete pv pv-example
Sustituya el ejemplo de pv por el nombre real de la PV que desea eliminar.
3. Actualización de los volúmenes persistentes
Si bien la capacidad de almacenamiento central no puede modificarse directamente dentro de un objeto PV, puede actualizar ciertos campos de metadatos de una PV, como etiquetas o anotaciones. Estas etiquetas y anotaciones pueden usarse para organizar, identificar y gestionar mejor sus PV dentro del clúster.
Las mejores prácticas para usar volúmenes persistentes de Kubernetes
Estas son algunas de las mejores prácticas que debe seguir para sacar el máximo partido de 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, use 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 tengan que acceder al almacenamiento sus aplicaciones. Por ejemplo, puede usar RWX para sistemas de archivos compartidos y RWO para bases de datos de instancia única.
- Implemente las políticas de recuperación de manera inteligente: Establezca políticas de recuperación que se ajusten a su estrategia de gestión del ciclo de vida de los datos. Utilice la política de conservación para los datos críticos que requieran una intervención manual antes de su eliminación.
- Supervisión y registro: Utilice herramientas de supervisión y registro para supervisar el uso, el rendimiento y el estado de la PV. Herramientas como Prometheus y Grafana pueden proporcionar información valiosa sobre su infraestructura de almacenamiento.
- Utilice Portworx ® para una gestión avanzada de los datos: Para una gestión de datos avanzada y unas soluciones de almacenamiento persistentes en Kubernetes , considere la posibilidad de usar Portworx de Pure Storage . Portworx ofrece características como la alta disponibilidad, la recuperación de desastres y la realización de copias de seguridad, que están específicamente diseñadas para las aplicaciones contenedorizadas.
Conclusión
Los volúmenes persistentes (PV) de Kubernetes ofrecen un mecanismo fundamental para gestionar el almacenamiento en aplicaciones con estado. Al utilizar las PV, puede garantizar la persistencia de los datos, la alta disponibilidad y el uso eficiente del almacenamiento dentro de su clúster de Kubernetes. Las soluciones como Portworx de Pure Storage proporcionan una manera intuitiva de aprovechar las ventajas de los volúmenes persistentes de Kubernetes. Con características como la alta disponibilidad, la recuperación de desastres y las copias de seguridad que utilizan inteligencia artificial para mejorar la eficiencia, Portworx es la solución de almacenamiento persistente de Kubernetes ideal para las aplicaciones contenedorizadas.