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_SIZESubstitua o seguinte:
PVC_NAMESPACE: o espaço de nomes do novo PersistentVolumeClaim.PVC_NAME: o nome do novo PersistentVolumeClaim.SNAPSHOT_NAME:o nome do objetoVolumeSnapshot.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_SIZESubstitua 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_SIZESubstitua 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 ouprojects/{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 usarxfs. Se os seus clusters usarem um conjunto de nós do Windows Server, tem de alterar esta opção paraNTFS.
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.