Usar discos persistentes con varios lectores

En esta página se explica cómo añadir un disco persistente a un clúster mediante el modo de acceso ReadOnlyMany. Este modo permite que varios pods de diferentes nodos monten el disco para leerlo.

Para obtener más información sobre este modo, consulta los modos de acceso a volúmenes persistentes.

Requisitos

Formatear y rellenar un disco persistente de origen

Para usar un disco persistente en modo de solo lectura, debes rellenar un disco persistente de origen con datos y, a continuación, clonar el volumen o usar una instantánea del volumen para mover los datos a un nuevo objeto PersistentVolume ReadOnlyMany.

  1. Crea un objeto PersistentVolume con un disco persistente o con el aprovisionamiento dinámico.

  2. Formatea el disco y rellénalo con datos. Para formatear el disco, haz referencia al disco como un objeto PersistentVolume ReadWriteOnce en un pod. GKE formatea automáticamente el disco subyacente y permite que el pod escriba datos en el disco. Cuando se inicie el pod, asegúrate de que escriba los datos que quieras en el disco.

Crear un PersistentVolume ReadOnlyMany

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

  • Una captura de volumen de un PersistentVolume de origen que rellena con datos.
  • Un clon de volumen de un PersistentVolume de origen que rellenas con datos.
  • Un disco persistente que ya se ha rellenado con datos.

Captura de volumen

  1. Crea una instantánea de volumen del PersistentVolume de origen.

  2. Guarda el siguiente manifiesto 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
    

    Haz los cambios siguientes:

    • PVC_NAMESPACE: el espacio de nombres del nuevo PersistentVolumeClaim.
    • PVC_NAME: nombre del nuevo PersistentVolumeClaim.
    • SNAPSHOT_NAME:el nombre de tu objeto VolumeSnapshot.
    • STORAGE_SIZE: la cantidad de almacenamiento que se va a solicitar. Debe ser la misma cantidad solicitada en el PersistentVolumeClaim de origen.
  3. Aplica el manifiesto a tu clúster:

    kubectl apply -f snapshot-pvc.yaml
    

De esta forma, se crea un nuevo PersistentVolumeClaim llamado PVC_NAME en tu clúster, que GKE usa para aprovisionar dinámicamente un nuevo PersistentVolume que contiene los datos de la captura del disco persistente de origen.

Clonación de volúmenes

Antes de usar la clonación de volumen, familiarízate con las limitaciones de este método.

  1. Guarda el siguiente archivo de 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
    

    Haz los cambios siguientes:

    • PVC_NAMESPACE: el espacio de nombres del nuevo PersistentVolumeClaim.
    • PVC_NAME: nombre del nuevo PersistentVolumeClaim.
    • SOURCE_PVC: nombre del PersistentVolumeClaim de origen rellenado con datos.
    • STORAGE_CLASS_NAME: la clase de almacenamiento del nuevo PersistentVolumeClaim. Debe ser la misma que la clase de almacenamiento de la PersistentVolumeClaim de origen.
    • STORAGE_SIZE: cantidad de almacenamiento del nuevo PersistentVolumeClaim. Debe ser la misma cantidad solicitada por el PersistentVolumeClaim de origen.
  2. Aplica el manifiesto a tu clúster:

    kubectl apply -f cloning-pvc.yaml
    

De esta forma, se crea un PersistentVolumeClaim llamado PVC_NAME que GKE usa para crear un PersistentVolume en modo ReadOnlyMany con los datos del PersistentVolume de origen.

Para obtener información más detallada sobre la clonación de volúmenes, consulta el artículo Crear clones de volúmenes persistentes.

Disco persistente preexistente

  1. Guarda el siguiente archivo de 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
    

    Haz los cambios siguientes:

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

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

De esta forma, se crea un objeto PersistentVolumeClaim llamado PVC_NAME y un objeto 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 preexistente.

Usar el objeto PersistentVolumeClaim en un pod

Ahora puede hacer referencia al nuevo PersistentVolumeClaim en modo de solo lectura en varios pods de varios nodos al mismo tiempo. No puedes conectar discos persistentes en modo ReadWriteOnce a varios nodos al mismo tiempo. Para obtener más información, consulta Despliegues y StatefulSets.

En la especificación de tu pod, debes especificar readOnly: true en las secciones volumeMounts y 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

Siguientes pasos