Usa discos persistentes con varios lectores


En esta página, se explica cómo agregar un disco persistente al clúster con el modo de acceso ReadOnlyMany. Este modo permite que varios Pods en diferentes nodos activen el disco para leerlo.

Para obtener más información sobre este modo, consulta modos de acceso de volumen persistente.

Requisitos

Formatea y propaga un disco persistente de origen

Para usar un disco persistente en modo de solo lectura, debes propagar un disco persistente de origen con datos; luego, debes clonar el volumen o usar una instantánea de volumen para mover los datos a un nuevo PersistentVolume de ReadOnlyMany.

  1. Crea un PersistentVolume mediante un disco persistente existente o el aprovisionamiento dinámico.

  2. Formatea el disco y propágalo con datos. Para formatear el disco, haz referencia al disco como un PersistentVolume de ReadWriteOnce en un Pod. GKE formatea automáticamente el disco subyacente y permite que el Pod escriba datos en el disco. Cuando el Pod se inicie, asegúrate de que escriba los datos que deseas en el disco.

Crea un PersistentVolume ReadOnlyMany

Puedes crear un PersistentVolume ReadOnlyMany con uno de los siguientes métodos:

  • Una instantánea de volumen de un PersistentVolume de origen que propagas con datos.
  • Un clon de volumen de un PersistentVolume de origen que propagas con datos.
  • Un disco persistente preexistente que ya se propagó con datos.

Instantánea de volumen

  1. Crear una instantánea de volumen del PersistentVolume de orgien.

  2. Guarda el siguiente manifiesto de PersistentVolumeClaim como snapshot-pvc.yaml:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      namespace: PVC_NAMESPACE
      name: PVC_NAME
    spec:
      dataSource:
        apiGroup: snapshot.storage.k8s.io
        kind: VolumeSnapshot
        name: SNAPSHOT_NAME
      accessModes:
        - ReadOnlyMany
      storageClassName: premium-rwo
      resources:
        requests:
          storage: STORAGE_SIZE
    

    Reemplaza lo siguiente:

    • PVC_NAMESPACE: El espacio de nombres de la PersistentVolumeClaim nueva.
    • PVC_NAME: el nombre de la PersistentVolumeClaim nueva.
    • SNAPSHOT_NAME: El nombre de tu objeto VolumeSnapshot.
    • STORAGE_SIZE: La cantidad de almacenamiento que se solicitará. Debe ser la misma que la cantidad solicitada en la PersistentVolumeClaim de origen.
  3. Aplica el manifiesto al clúster:

    kubectl apply -f snapshot-pvc.yaml
    

Esto crea una PersistentVolumeClaim nueva llamada PVC_NAME en el clúster, que GKE usa de forma dinámica para aprovisionar un PersistentVolume nuevo que contiene los datos de la instantánea del disco persistente de origen.

Clonación de volúmenes

Antes de usar la clonación de volumen, asegúrate de familiarizarte con las limitaciones de este enfoque.

  1. Guarda el siguiente manifiesto como cloning-pvc.yaml:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      namespace: PVC_NAMESPACE
      name: PVC_NAME
    spec:
      dataSource:
        name: SOURCE_PVC
        kind: PersistentVolumeClaim
      accessModes:
        - ReadOnlyMany
      storageClassName: STORAGE_CLASS_NAME
      resources:
        requests:
          storage: STORAGE_SIZE
    

    Reemplaza lo siguiente:

    • PVC_NAMESPACE: El espacio de nombres de la PersistentVolumeClaim nueva.
    • PVC_NAME: el nombre de la PersistentVolumeClaim nueva.
    • SOURCE_PVC: El nombre del PersistentVolumeClaim de origen propagado con datos.
    • STORAGE_CLASS_NAME: La clase de almacenamiento para la PersistentVolumeClaim nueva. Debe ser la misma que la clase de almacenamiento de la PersistentVolumeClaim de origen.
    • STORAGE_SIZE: La cantidad de almacenamiento para la PersistentVolumeClaim nueva. Debe ser la misma cantidad que solicita la PersistentVolumeClaim de origen.
  2. Aplica el manifiesto al clúster:

    kubectl apply -f cloning-pvc.yaml
    

Esto crea una PersistentVolumeClaim llamada PVC_NAME que GKE usa para crear un PersistentVolume nuevo en modo ReadOnlyMany con los datos en el PersistentVolume de origen.

Para obtener más información detallada sobre la clonación de volúmenes, consulta Crea clonaciones de volúmenes persistentes.

Disco persistente preexistente

  1. Guarda el siguiente manifiesto como preexisting-disk-pv-pvc.yaml:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: PV_NAME
    spec:
      storageClassName: "STORAGE_CLASS_NAME"
      capacity:
        storage: DISK_SIZE
      accessModes:
        - ReadOnlyMany
      claimRef:
        namespace: PVC_NAMESPACE
        name: PVC_NAME
      csi:
        driver: pd.csi.storage.gke.io
        volumeHandle: DISK_ID
        fsType: FS_TYPE
        readOnly: true
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      namespace: PVC_NAMESPACE
      name: PVC_NAME
    spec:
      storageClassName: "STORAGE_CLASS_NAME"
      volumeName: PV_NAME
      accessModes:
        - ReadOnlyMany
      resources:
        requests:
          storage: DISK_SIZE
    

    Reemplaza lo siguiente:

    • PV_NAME: el nombre del PersistentVolume nuevo
    • STORAGE_CLASS_NAME: Es el nombre de tu StorageClass nueva.
    • DISK_SIZE: el tamaño de tu disco persistente preexistente. Por ejemplo, 500G.
    • PVC_NAMESPACE: El espacio de nombres de la PersistentVolumeClaim nueva.
    • PVC_NAME: Es el nombre de tu PersistentVolumeClaim nuevo.
    • DISK_ID: el identificador de tu disco persistente preexistente. El formato es projects/{project_id}/zones/{zone_name}/disks/{disk_name} para los discos persistentes zonales o projects/{project_id}/regions/{region_name}/disks/{disk_name} para los discos persistentes regionales.
    • FS_TYPE: Es el tipo de sistema de archivos. Puedes dejarlo como el predeterminado (ext4) o usar xfs. Si tus clústeres usan un grupo de nodos de Windows Server, debes cambiar esto a NTFS.
  2. Aplica el manifiesto al clúster:

    kubectl apply -f preexisting-disk-pv-pvc.yaml
    

Esto crea un PersistentVolumeClaim llamado PVC_NAME y un PersistentVolume llamado PV_NAME en modo ReadOnlyMany.

Para obtener información más detallada sobre cómo usar un disco persistente preexistente, consulta Disco persistente existente.

Usa PersistentVolumeClaim en un Pod

Ahora puedes hacer referencia a la nueva PersistentVolumeClaim en modo de solo lectura en varios Pods en varios nodos al mismo tiempo. No puedes adjuntar discos persistentes en modo ReadWriteOnce a varios nodos al mismo tiempo. Para obtener más información, consulta Comparación entre Deployments y StatefulSets.

En la especificación del Pod, debes especificar readOnly: true en la sección volumeMounts y en la sección volumes, como en el siguiente ejemplo:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: multi-read
  labels:
    app: web-server
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web-server
  template:
    metadata:
      labels:
        app: web-server
    spec:
      containers:
      - name: web-server
        image: nginx
        volumeMounts:
        - mountPath: /test-mnt
          name: my-volume
          readOnly: true
      volumes:
      - name: my-volume
        persistentVolumeClaim:
          claimName: PVC_NAME
          readOnly: true

¿Qué sigue?