Utilizzo di dischi permanenti con più lettori


In questa pagina viene spiegato come aggiungere un disco permanente al cluster utilizzando la modalità di accesso ReadOnlyMany. Questa modalità consente a più pod su nodi diversi di montare il disco per la lettura.

Per ulteriori informazioni su questa modalità, consulta l'articolo sulle modalità di accesso al volume permanenti.

Requisiti

Formatta e compila un disco permanente di origine

Per utilizzare un disco permanente in modalità di sola lettura, devi completare un disco permanente di origine con i dati, quindi clonare il volume o utilizzare uno snapshot del volume per spostare i dati in un nuovo oggetto ReadOnly Many PersistentVolume.

  1. Crea un PersistentVolume utilizzando un disco permanente esistente o il provisioning dinamico.

  2. Formatta il disco e compilalo con i dati. Per formattare il disco, fai riferimento al disco come ReadWriteOnce PersistentVolume in un pod. GKE formatta automaticamente il disco sottostante e consente al pod di scrivere dati sul disco. All'avvio del pod, assicurati che scriva i dati che vuoi sul disco.

Crea un PersistentVolume ReadOnlyMany

Puoi creare un PersistentVolume ReadOnlyMany utilizzando uno dei seguenti metodi:

  • Uno snapshot del volume di un PersistentVolume di origine che viene compilato con i dati.
  • Un clone di volume di un PersistentVolume di origine che viene completato con i dati.
  • Un disco permanente preesistente già compilato con dati.

Snapshot volume

  1. Crea uno snapshot del volume del PersistentVolume di origine.

  2. Salva il seguente manifest di PersistentVolumeClaim come 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
    

    Sostituisci quanto segue:

    • PVC_NAMESPACE: lo spazio dei nomi del nuovo PersistentVolumeClaim.
    • PVC_NAME: il nome del nuovo PersistentVolumeClaim.
    • SNAPSHOT_NAME:il nome dell'oggetto VolumeSnapshot.
    • STORAGE_SIZE: la quantità di spazio di archiviazione da richiedere. Deve essere uguale alla quantità richiesta nell'oggetto PersistentVolumeClaim di origine.
  3. Applica il manifest al tuo cluster:

    kubectl apply -f snapshot-pvc.yaml
    

Nel cluster viene creato un nuovo oggetto PersistentVolumeClaim denominato PVC_NAME, che GKE utilizza per eseguire il provisioning dinamico di un nuovo oggetto PersistentVolume contenente i dati provenienti dallo snapshot del disco permanente di origine.

Clonazione del volume

Prima di utilizzare la clonazione dei volumi, assicurati di conoscere le limitazioni di questo approccio.

  1. Salva il seguente manifest con il nome 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
    

    Sostituisci quanto segue:

    • PVC_NAMESPACE: lo spazio dei nomi del nuovo PersistentVolumeClaim.
    • PVC_NAME: il nome del nuovo PersistentVolumeClaim.
    • SOURCE_PVC: il nome dell'oggetto PersistentVolumeClaim di origine compilato con i dati.
    • STORAGE_CLASS_NAME: la classe di archiviazione per il nuovo PersistentVolumeClaim. Deve essere uguale alla classe di archiviazione dell'oggetto PersistentVolumeClaim di origine.
    • STORAGE_SIZE: la quantità di spazio di archiviazione per il nuovo PersistentVolumeClaim. Deve essere la stessa quantità richiesta dall'oggetto PersistentVolumeClaim di origine.
  2. Applica il manifest al tuo cluster:

    kubectl apply -f cloning-pvc.yaml
    

Questo crea un PersistentVolumeClaim denominato PVC_NAME che GKE utilizza per creare un nuovo PersistentVolume in modalità ReadOnlyMany con i dati nell'oggetto PersistentVolume di origine.

Per informazioni più dettagliate sulla clonazione dei volumi, consulta Creare cloni di volumi permanenti.

Disco permanente preesistente

  1. Salva il seguente manifest con il nome 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
    

    Sostituisci quanto segue:

    • PV_NAME: il nome del nuovo PersistentVolume.
    • STORAGE_CLASS_NAME: il nome del tuo nuovo oggetto StorageClass.
    • DISK_SIZE: le dimensioni del disco permanente preesistente. Ad esempio, 500G.
    • PVC_NAMESPACE: lo spazio dei nomi del nuovo PersistentVolumeClaim.
    • PVC_NAME: il nome del nuovo PersistentVolumeClaim.
    • DISK_ID: l'identificatore del disco permanente preesistente. Il formato è projects/{project_id}/zones/{zone_name}/disks/{disk_name} per i dischi permanenti a livello di zona o projects/{project_id}/regions/{region_name}/disks/{disk_name} per i dischi permanenti a livello di regione.
    • FS_TYPE: il tipo di file system. Puoi lasciare questa opzione impostata come predefinita (ext4) o utilizzare xfs. Se i cluster utilizzano un pool di nodi Windows Server, devi modificare questo valore in NTFS.
  2. Applica il manifest al tuo cluster:

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

Questo crea un PersistentVolumeClaim denominato PVC_NAME e un PersistentVolume denominato PV_NAME in modalità ReadOnlyMany.

Per informazioni più dettagliate sull'utilizzo di un disco permanente preesistente, consulta la pagina relativa al disco permanente esistente.

Utilizzare l'oggetto PersistentVolumeClaim in un pod

Ora puoi fare riferimento al nuovo PersistentVolumeClaim in modalità di sola lettura in più pod su più nodi contemporaneamente. Non puoi collegare dischi permanenti in modalità ReadWriteOnce a più nodi contemporaneamente. Per ulteriori informazioni, consulta la sezione Confronto tra deployment e oggetti StatefulSet.

Nella specifica del pod, devi specificare readOnly: true nella sezione volumeMounts e nella sezione volumes, come nel seguente esempio:

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

Passaggi successivi