Use discos persistentes com vários leitores

Esta página explica como adicionar um disco persistente ao seu cluster através do modo de acesso ReadOnlyMany. Este modo permite que vários pods em diferentes nós montem o disco para leitura.

Para mais informações sobre este modo, consulte os modos de acesso ao volume persistente.

Requisitos

Formate e preencha um disco persistente de origem

Para usar um disco persistente no modo só de leitura, tem de preencher um disco persistente de origem com dados e, em seguida, clonar o volume ou usar uma captura instantânea do volume para mover os dados para um novo PersistentVolume ReadOnlyMany.

  1. Crie um PersistentVolume com um disco persistente existente ou com o aprovisionamento dinâmico.

  2. Formate o disco e preencha-o com dados. Para formatar o disco, faça referência ao disco como um PersistentVolume ReadWriteOnce num pod. O GKE formata automaticamente o disco subjacente e permite que o pod escreva dados no disco. Quando o Pod é iniciado, certifique-se de que escreve os dados que quer no disco.

Crie um ReadOnlyMany PersistentVolume

Pode criar um ReadOnlyMany PersistentVolume através de um dos seguintes métodos:

  • Uma captura instantânea de volume de um PersistentVolume de origem que preenche com dados.
  • Um clone de volume de um PersistentVolume de origem que preenche com dados.
  • Um disco persistente pré-existente que já foi preenchido com dados.

Instantâneo de volume

  1. Crie um instantâneo de volume do PersistentVolume de origem.

  2. Guarde o seguinte manifesto 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
    

    Substitua o seguinte:

    • PVC_NAMESPACE: o espaço de nomes do novo PersistentVolumeClaim.
    • PVC_NAME: o nome do novo PersistentVolumeClaim.
    • SNAPSHOT_NAME:o nome do objeto VolumeSnapshot.
    • STORAGE_SIZE: a quantidade de armazenamento a pedir. Este valor tem de ser igual ao valor pedido no PersistentVolumeClaim de origem.
  3. Aplique o manifesto ao cluster:

    kubectl apply -f snapshot-pvc.yaml
    

Esta ação cria um novo PersistentVolumeClaim denominado PVC_NAME no cluster, que o GKE usa para aprovisionar dinamicamente um novo PersistentVolume que contém os dados da captura de ecrã do disco persistente de origem.

Clonagem de volumes

Antes de usar a clonagem de volume, certifique-se de que se familiariza com as limitações desta abordagem.

  1. Guarde o seguinte manifesto 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
    

    Substitua o seguinte:

    • PVC_NAMESPACE: o espaço de nomes do novo PersistentVolumeClaim.
    • PVC_NAME: o nome do novo PersistentVolumeClaim.
    • SOURCE_PVC: o nome da origem PersistentVolumeClaim preenchido com dados.
    • STORAGE_CLASS_NAME: a classe de armazenamento para o novo PersistentVolumeClaim. Tem de ser igual à classe de armazenamento do PersistentVolumeClaim de origem.
    • STORAGE_SIZE: a quantidade de armazenamento para o novo PersistentVolumeClaim. Tem de ser a mesma quantidade pedida pelo PersistentVolumeClaim de origem.
  2. Aplique o manifesto ao cluster:

    kubectl apply -f cloning-pvc.yaml
    

Esta ação cria um PersistentVolumeClaim denominado PVC_NAME que o GKE usa para criar um novo PersistentVolume no modo ReadOnlyMany com os dados no PersistentVolume de origem.

Para obter informações mais detalhadas sobre a clonagem de volumes, consulte o artigo Crie clones de volumes persistentes.

Disco persistente pré-existente

  1. Guarde o seguinte manifesto 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
    

    Substitua o seguinte:

    • PV_NAME: o nome do seu novo PersistentVolume.
    • STORAGE_CLASS_NAME: o nome da nova StorageClass.
    • DISK_SIZE: o tamanho do disco persistente pré-existente. Por exemplo, 500G.
    • PVC_NAMESPACE: o espaço de nomes do novo PersistentVolumeClaim.
    • PVC_NAME: o nome do novo PersistentVolumeClaim.
    • DISK_ID: o identificador do disco persistente preexistente. O formato é projects/{project_id}/zones/{zone_name}/disks/{disk_name} para discos persistentes zonais ou projects/{project_id}/regions/{region_name}/disks/{disk_name} para discos persistentes regionais.
    • FS_TYPE: o tipo de sistema de ficheiros. Pode deixar esta opção como predefinição (ext4) ou usar xfs. Se os seus clusters usarem um conjunto de nós do Windows Server, tem de alterar esta opção para NTFS.
  2. Aplique o manifesto ao cluster:

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

Isto cria um PersistentVolumeClaim denominado PVC_NAME e um PersistentVolume denominado PV_NAME no modo ReadOnlyMany.

Para obter informações mais detalhadas sobre a utilização de um disco persistente pré-existente, consulte o artigo sobre o disco persistente existente.

Use o PersistentVolumeClaim num pod

Agora, pode fazer referência ao novo PersistentVolumeClaim no modo de leitura em vários pods em vários nós em simultâneo. Não pode anexar discos persistentes no modo ReadWriteOnce a vários nós em simultâneo. Para mais informações, consulte Implementações vs. StatefulSets.

Na especificação do pod, tem de especificar readOnly: true na secção volumeMounts e na secção volumes, como no seguinte exemplo:

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

O que se segue?