Este documento mostra como usar a clonagem de volumes do Kubernetes para clonar volumes persistentes nos seus clusters do Google Kubernetes Engine (GKE).
Vista geral
Um clone é um novo volume independente que é uma duplicado de um volume do Kubernetes existente. Um clone é semelhante a um resumo de volume, uma vez que é uma cópia de um volume num momento específico. No entanto, em vez de criar um objeto de instantâneo a partir do volume de origem, a clonagem de volumes aprovisiona o clone com todos os dados do volume de origem.
Requisitos
Para usar a clonagem de volumes no GKE, tem de cumprir os seguintes requisitos:
- O PersistentVolumeClaim de origem tem de estar no mesmo espaço de nomes que o PersistentVolumeClaim de destino.
- Use um controlador CSI que suporte a clonagem de volumes. O controlador de disco persistente na árvore não suporta a clonagem de volumes.
- A versão 1.4.0 e posterior do controlador CSI do Persistent Disk do Compute Engine suporta a clonagem de volumes e é instalada por predefinição em novos clusters Linux com a versão 1.22 ou posterior do GKE. Também pode ativar o controlador CSI do Persistent Disk do Compute Engine num cluster existente.
Para verificar a versão do controlador CSI do Persistent Disk do Compute Engine, execute o seguinte comando na CLI gcloud:
kubectl describe daemonsets pdcsi-node --namespace=kube-system | grep "gke.gcr.io/gcp-compute-persistent-disk-csi-driver"
Se o resultado mostrar uma versão anterior a 1.4.0
,
atualize manualmente o plano de controlo
para obter a versão mais recente.
Limitações
- Ambos os volumes têm de usar o mesmo modo de volume. Por predefinição, o GKE define o VolumeMode como
ext4
. - Todas as restrições para criar um clone de disco a partir de um disco existente no Compute Engine também se aplicam ao GKE.
- Pode criar um clone de disco regional a partir de um disco zonal, mas deve ter em atenção as restrições desta abordagem.
- A clonagem tem de ser feita numa zona compatível. Use allowedTopologies para restringir a topologia dos volumes aprovisionados a zonas específicas. Em alternativa, pode usar nodeSelectors ou afinidade e antiafinidade para restringir um Pod de modo que a sua execução seja limitada a um nó específico que é executado numa zona compatível.
- Para a clonagem de zona para zona, a zona de clonagem tem de corresponder à zona do disco de origem.
- Para a clonagem de zonal para regional, uma das zonas de réplica do clone tem de corresponder à zona do disco de origem.
Usar a clonagem de volume
Para aprovisionar um clone de volume, adiciona uma referência a um PersistentVolumeClaim existente no mesmo espaço de nomes ao campo dataSource
de um novo PersistentVolumeClaim. O exercício seguinte mostra como aprovisionar
um volume de origem com dados, criar um clone de volume e consumir o clone.
Crie um volume de origem
Para criar um volume de origem, siga as instruções em Usar o controlador CSI de disco persistente do Compute Engine para clusters Linux para criar uma StorageClass, um PersistentVolumeClaim e um pod para consumir o novo volume. Vai usar o PersistentVolumeClaim que criar como origem para o clone do volume.
Adicione um ficheiro de teste ao volume de origem
Adicione um ficheiro de teste ao volume de origem. Pode procurar este ficheiro de teste no clone do volume para verificar se a clonagem foi bem-sucedida.
Crie um ficheiro de teste num pod:
kubectl exec POD_NAME \ -- sh -c 'echo "Hello World!" > /var/lib/www/html/hello.txt'
Substitua
POD_NAME
pelo nome de um Pod que consuma o volume de origem. Por exemplo, se seguiu as instruções em Usar o controlador CSI do disco persistente do Compute Engine para clusters Linux, substituaPOD_NAME
porweb-server
.Verifique se o ficheiro existe:
kubectl exec POD_NAME \ -- sh -c 'cat /var/lib/www/html/hello.txt'
O resultado é semelhante ao seguinte:
Hello World!
Clone o volume de origem
Guarde o seguinte manifesto como
podpvc-clone.yaml
:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc-clone spec: dataSource: name: PVC_NAME kind: PersistentVolumeClaim accessModes: - ReadWriteOnce storageClassName: STORAGE_CLASS_NAME resources: requests: storage: STORAGE
Substitua o seguinte:
PVC_NAME
: o nome do PersistentVolumeClaim que criou em Crie um volume de origem.STORAGE_CLASS_NAME
: o nome da StorageClass a usar, que tem de ser igual à StorageClass do PersistentVolumeClaim de origem.STORAGE
: a quantidade de armazenamento a pedir, que tem de ser, pelo menos, o tamanho do PersistentVolumeClaim de origem.
Aplique o manifesto:
kubectl apply -f podpvc-clone.yaml
Crie um pod que consuma o volume clonado
O exemplo seguinte cria um pod que consome o clone do volume que criou.
Guarde o seguinte manifesto como
web-server-clone.yaml
:apiVersion: v1 kind: Pod metadata: name: web-server-clone spec: containers: - name: web-server-clone image: nginx volumeMounts: - mountPath: /var/lib/www/html name: mypvc volumes: - name: mypvc persistentVolumeClaim: claimName: podpvc-clone readOnly: false
Aplique o manifesto:
kubectl apply -f web-server-clone.yaml
Verifique se o ficheiro de teste existe:
kubectl exec web-server-clone \ -- sh -c 'cat /var/lib/www/html/hello.txt'
O resultado é semelhante ao seguinte:
Hello World!
Limpar
Para evitar incorrer em cobranças na sua Google Cloud conta pelos recursos usados nesta página, siga estes passos.
Elimine os
Pod
objetos:kubectl delete pod POD_NAME web-server-clone
Elimine os
PersistentVolumeClaim
objetos:kubectl delete pvc podpvc podpvc-clone