Volúmenes persistentes con Persistent Disk

Esta página 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 el GKE, los discos persistentes de Compute Engine suelen respaldar los PersistentVolumes. Los PersistentVolumes también se pueden usar con otros tipos de almacenamiento como NFS. Consulta la documentación de Kubernetes para obtener una visión general exhaustiva de los PersistentVolumes.

A diferencia de los Volumes, 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 manera 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 activa ese volumen 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 volumen, 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 automáticamente un disco persistente para ti.

El siguiente manifiesto describe una solicitud de un disco de 30 GiB cuyo modo de acceso le permite que un pod lo active al igual que en modo de lectura/escritura:

pvc-demo.yaml

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

Cuando creas este PersistentVolumeClaim con kubectl apply -f pvc-demo.yaml, Kubernetes crea de manera dinámica un objeto PersistentVolume correspondiente. Suponiendo que no reemplazaste la clase de almacenamiento predeterminada de GKE, este PersistentVolume está respaldado por un nuevo disco persistente de Compute Engine vacío. Este disco se usa en un pod con la reclamación como un volumen.

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

Si deseas evitar la eliminación de los discos persistentes aprovisionados de manera dinámica, establece la política de recuperació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 PersistentVolumeClaim que lo consuma.

Modos de acceso

PersistentVolumes admite los siguientes modos de acceso:

  • ReadWriteOnce: El volumen se puede activar como lectura/escritura por un solo nodo.
  • 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 ejemplo de caso práctico es el servicio de contenido estático en múltiples réplicas.

Consulta este artículo a fin de obtener instrucciones sobre cómo crear discos persistentes para varios lectores.

Usa discos persistentes preexistentes como volúmenes persistentes

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 volumen persistente respaldado por un disco persistente preexistente.

Implementaciones vs. StatefulSets

Puedes usar controladores de reclamaciones de volumen persistente o las plantillas de reclamación por 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 reclamación de volúmenes persistentes 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 usando 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 reclamo de volumen persistente, puedes tener aplicaciones que pueden escalarse automáticamente con reclamos de volumen persistentes únicos asociados 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 usando el volumen a la otra zona. Puedes usar discos persistentes regionales a fin de crear soluciones de alta disponibilidad para cargas de trabajo con estado en GKE. Los usuarios deben asegurarse de que tanto la zona principal como 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 manualmente por adelantado por el administrador del clúster.

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

¿Qué sigue?

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

Enviar comentarios sobre...