Volúmenes persistentes con discos persistentes

En esta página, se proporciona una descripción general de PersistentVolumes y PersistentVolumeClaims en Kubernetes y su uso con Google Kubernetes Engine. Esta página se centra en el almacenamiento respaldado por los Persistent Disks de Compute Engine.

Descripción general

Los recursos de PersistentVolume se usan para administrar el almacenamiento duradero en un clúster. En GKE, los discos persistentes de Compute Engine suelen respaldar los PersistentVolumes. PersistentVolumes también se puede usar con otros tipos de almacenamiento, como NFS. Consulta la documentación de Kubernetes para obtener una descripción general completa de PersistentVolumes.

A diferencia de los volúmenes, el ciclo de vida de los PersistentVolumes lo administra Kubernetes. PersistentVolumes puede ser aprovisionado de manera dinámica, el usuario no tiene que crear y borrar manualmente el almacenamiento de respaldo.

Los PersistentVolumes son recursos de clúster que existen independientemente de los pods. Esto significa que el disco y los datos representados por un PersistentVolume continúan existiendo a medida que el clúster cambia y los pods se borran y se vuelven a crear. Los recursos de PersistentVolume se pueden aprovisionar de manera dinámica a través de PersistentVolumeClaims, o se pueden crear de forma explícita con un administrador de clústeres.

PersistentVolumeClaim es una solicitud y una reclamación de un recurso PersistentVolume. Los objetos de PersistentVolumeClaim solicitan un tamaño específico, un modo de acceso y un StorageClass para el PersistentVolume. Si existe un PersistentVolume que satisface la solicitud o se puede aprovisionar, PersistentVolumeClaim estará vinculado a ese PersistentVolume.

Los pods usan reclamaciones como volúmenes. El clúster inspecciona la reclamación a fin de encontrar el volumen vinculado y lo activa para el pod.

La portabilidad es otra ventaja de usar PersistentVolumes y PersistentVolumeClaims. Puedes usar fácilmente la misma especificación del pod en diferentes clústeres y entornos porque PersistentVolume es una interfaz para el almacenamiento de respaldo real.

StorageClasses

Las implementaciones de Volume, como gcePersistentDisk, se configuran a través de los recursos StorageClass. GKE crea una clase de almacenamiento predeterminada para ti, la cual usa el tipo de disco persistente estándar. El StorageClass predeterminado se usa cuando un objeto PersistentVolumeClaim no especifica un StorageClass. Puedes reemplazar el StorageClass predeterminado provisto por uno tuyo.

Puedes crear tus propios recursos StorageClass para describir diferentes clases de almacenamiento. Por ejemplo, las clases pueden asignarse a niveles de calidad de servicio o a políticas de copia de seguridad. Este concepto a veces se llama "perfiles" en otros sistemas de almacenamiento.

Aprovisionamiento dinámico de PersistentVolumes

La mayoría de las veces no es necesario configurar directamente los objetos PersistentVolume o crear discos persistentes de Compute Engine. En su lugar, puedes crear un PersistentVolumeClaim y Kubernetes aprovisiona de forma automática un disco persistente para ti.

En el siguiente manifiesto, se describe una solicitud de un disco 30 GiB cuyo modo de acceso permite que un solo nodo lo active en modo de lectura y escritura:

pvc-demo.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: helloweb-disk
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 30Gi
    

Cuando creas esta PersistentVolumeClaim con kubectl apply -f pvc-demo.yaml, Kubernetes crea de forma dinámica un objeto PersistentVolume correspondiente. Si no reemplazaste la clase de almacenamiento predeterminada de GKE, este PersistentVolume está respaldado por un nuevo disco persistente de Compute Engine vacío. Debes usar este disco en un pod mediante el uso de la reclamación como un volumen.

Cuando borras esta reclamación, también se borran el objeto PersistentVolume correspondiente y el disco persistente de Compute Engine aprovisionado.

Si deseas evitar la eliminación de discos persistentes aprovisionados de forma dinámica, establece la política de reclamación del recurso PersistentVolume o su recurso StorageClass en Retain. En este caso, se te cobrará por el disco persistente durante el tiempo que exista, incluso si no hay ningún PersistentVolumeClaim que lo consuma.

Modos de acceso

PersistentVolumes admite los siguientes modos de acceso:

  • ReadWriteOnce: un solo nodo puede activar el volumen como de lectura y escritura.
  • ReadOnlyMany: El volumen se puede activar de solo lectura por muchos nodos.
  • ReadWriteMany: El volumen se puede activar como lectura/escritura por muchos nodos. Los PersistentVolumes respaldados por los discos persistentes de Compute Engine no admiten este modo de acceso.

Usa los discos persistentes de Compute Engine como ReadOnlyMany

ReadWriteOnce es el caso práctico más común de discos persistentes y funciona como modo de acceso predeterminado para la mayoría de las aplicaciones. Los discos persistentes de Compute Engine también admiten el modo ReadOnlyMany para que muchas aplicaciones o muchas réplicas de la misma aplicación puedan consumir el mismo disco al mismo tiempo. Un caso práctico de ejemplo es la entrega de contenido estático en varias réplicas.

Consulta este artículo a fin de obtener instrucciones para crear discos persistentes destinados a varios lectores.

Usa discos persistentes preexistentes como PersistentVolumes

Los volúmenes persistentes aprovisionados de manera dinámica están vacíos cuando se crean. Si tienes un disco persistente de Compute Engine existente propagado con datos, puedes ingresarlo en tu clúster creando manualmente el recurso de volumen persistente adecuado. El disco persistente debe estar en la misma zona que los nodos del clúster.

Consulta este ejemplo de cómo crear un Persistent Volume respaldado por un disco persistente preexistente.

Comparación entre implementaciones y StatefulSets

Puedes usar reclamaciones de volumen persistente o plantillas de reclamaciones de volumen en controladores de nivel superior, como implementaciones o StatefulSets, respectivamente.

Las implementaciones están diseñadas para las aplicaciones sin estado y, por lo tanto, todas las réplicas de una implementación comparten la misma PersistentVolumeClaim. Dado que los pods de réplica creados serán idénticos entre sí, solo los volúmenes con modos ReadOnlyMany o ReadWriteMany pueden funcionar en esta configuración.

Incluso las implementaciones con una réplica que usan un volumen de ReadWriteOnce no son recomendables. Esto se debe a que la estrategia de implementación predeterminada creará un segundo pod antes de bajar el primer pod en una recreación. La implementación puede fallar en un punto muerto, ya que el segundo pod no puede iniciarse porque el volumen de ReadWriteOnce ya está en uso, y el primer pod no se borrará porque el segundo pod aún no se ha iniciado. En su lugar, usa un StatefulSet con volúmenes de ReadWriteOnce.

Los StatefulSets son el método recomendado para implementar aplicaciones con estado que requieran un volumen único por réplica. Cuando usas StatefulSets con plantillas de reclamación de volumen persistente, puedes tener aplicaciones que pueden escalarse verticalmente de forma automática con reclamaciones de volumen persistentes exclusivas asociadas a cada pod de réplica.

Discos persistentes regionales

Los discos persistentes regionales replican los datos entre dos zonas en la misma región y se pueden usar de manera similar a los discos persistentes regulares. En el caso de una interrupción zonal, Kubernetes puede conmutar por error las cargas de trabajo mediante el uso del volumen en la otra zona. Puedes usar discos persistentes regionales a fin de crear soluciones con alta disponibilidad para cargas de trabajo con estado en GKE. Los usuarios deben asegurarse de que la zona principal y la de conmutación por error estén configuradas con suficiente capacidad de recursos para ejecutar la carga de trabajo.

Los discos persistentes SSD regionales son una opción para aplicaciones como las bases de datos que requieren alta disponibilidad y alto rendimiento. Para obtener más detalles, consulta la Comparación de rendimiento de almacenamiento en bloque.

Al igual que con los discos persistentes regulares, los discos persistentes regionales se pueden aprovisionar de manera dinámica según sea necesario o también, los puede aprovisionar el administrador del clúster de forma manual por adelantado.

A fin de obtener más información sobre cómo agregar discos persistentes regionales, consulta estas instrucciones para aprovisionar discos persistentes regionales.

Pasos siguientes

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Kubernetes Engine