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
- O cluster tem de executar a versão 1.22 ou posterior do GKE.
- O cluster tem de usar o controlador CSI de disco persistente do Compute Engine.
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.
- Crie um PersistentVolume com um disco persistente existente ou com o aprovisionamento dinâmico. 
- 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
- Crie um instantâneo de volume do PersistentVolume de origem. 
- 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.
 
- 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.
- 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 o mesmo valor pedido pelo PersistentVolumeClaim de origem.
 
- 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
- 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 seu 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.
 
- 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 preexistente, consulte o artigo 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?
- Saiba mais sobre a utilização de discos persistentes pré-existentes como PersistentVolumes.
- Saiba mais sobre os discos persistentes do Compute Engine.