Como usar os discos permanentes com vários leitores

Nesta página, explicamos como adicionar um disco permanente ao cluster usando o modo de acesso ReadOnlyMany. Este modo permite que vários pods em diferentes nós ativem o disco para leitura.

Para mais informações sobre esse modo, consulte modos de acesso de volume permanente.

Como formatar o disco permanente

Antes de usar um disco permanente no modo somente leitura, você precisa formatá-lo.

Para formatar o disco permanente:

  1. Crie um disco permanente manualmente ou usando o provisionamento dinâmico.

  2. Formate o disco e preencha-o com dados. Para formatar o disco:

    • Faça referência ao disco como um volume ReadWriteOnce em um pod. Isso leva à formatação automática do disco pelo GKE e permite que o pod preencha previamente o disco com dados. Quando o pod for iniciado, verifique se ele grava dados no disco.
    • Ative o disco manualmente em uma VM e formate-o. Grave os dados no disco que quiser. Para detalhes, consulte formatação do disco permanente.
  3. Desative e remova o disco:

    • Se você referenciou o disco em um pod, exclua-o, espere até que ele seja encerrado e aguarde a remoção automática do nó.
    • Se você montou o disco para uma VM, remova o disco usando gcloud compute instances detach-disk.
  4. Crie pods que acessam o volume como ReadOnlyMany, conforme mostrado na seção a seguir.

Como criar um PersistentVolume e PersistentVolumeClaim

Para ativar um disco previamente preenchido como ReadOnlyMany, crie um PersistentVolume e PersistentVolumeClaim para o disco com os campos accessModes definidos como ReadOnlyMany e o campo gcePersistentDisk readOnly definido como true.

Veja a seguir um exemplo chamado read-only-pd.yaml:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-readonly-pv
spec:
  storageClassName: ""
  capacity:
    storage: 10Gi
  accessModes:
    - ReadOnlyMany
  claimRef:
    namespace: default
    name: my-readonly-pvc
  gcePersistentDisk:
    pdName: my-test-disk
    fsType: ext4
    readOnly: true
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-readonly-pvc
spec:
  # Specify "" as the storageClassName so it matches the PersistentVolume's StorageClass.
  # A nil storageClassName value uses the default StorageClass. For details, see
  # https://kubernetes.io/docs/concepts/storage/persistent-volumes/#class-1
  storageClassName: ""
  accessModes:
    - ReadOnlyMany
  resources:
    requests:
      storage: 10Gi

Para criar o PersistentVolume e o PersistentVolumeClaim, use kubectl apply -f read-only-pd.yaml.

Como usar o PersistentVolumeClaim em um pod

Ao usar esse PersistentVolumeClaim nas cargas de trabalho, você precisa especificar readOnly: true nas seções volumeMounts e volumes da sua especificação de pod, conforme mostrado no exemplo a seguir:

apiVersion: v1
kind: Pod
metadata:
  name: pod-pvc
spec:
  containers:
  - image: k8s.gcr.io/busybox
    name: busybox
    command:
      - "sleep"
      - "3600"
    volumeMounts:
    - mountPath: /test-mnt
      name: my-volume
      readOnly: true
  volumes:
  - name: my-volume
    persistentVolumeClaim:
      claimName: my-readonly-pvc
      readOnly: true

Agora, você pode ter vários pods em nós diferentes, todos conseguindo ativar esse PersistentVolumeClaim no modo somente leitura. Contudo, não é possível anexar discos permanentes no modo de gravação em vários nós ao mesmo tempo. Para mais informações, consulte Implantações vs. StatefulSets.

A seguir