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 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_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.
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 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 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?
- Saiba mais sobre a utilização de discos persistentes pré-existentes como PersistentVolumes.
- Saiba mais sobre os discos persistentes do Compute Engine.