Este documento mostra como usar a clonagem de volume do Kubernetes para clonar volumes permanentes nos clusters do Google Kubernetes Engine (GKE).
Visão geral
Um clone é um novo volume independente que é uma cópia de um volume atual do Kubernetes. Um clone é semelhante a um snapshot de volume porque é uma cópia de um volume em um momento específico. No entanto, em vez de criar um objeto de snapshot a partir do volume de origem, a clonagem de volume provisiona o clone com todos os dados do volume de origem.
Requisitos
Para usar clones de volume no GKE, você precisa atender aos seguintes requisitos:
- O PersistentVolumeClaim precisa estar no mesmo namespace que o PersistentVolumeClaim.
- Usar um driver CSI compatível com clonagem de volume. O driver de disco permanente na árvore
não é compatível com a clonagem de volume.
- A versão 1.4.0 do driver CSI de disco permanente do Compute Engine e versões mais recentes oferece suporte à clonagem de volume e é instalada por padrão em novos clusters do Linux que executam o GKE versão 1.22 ou posterior. Também é possível ativar o driver CSI de disco permanente do Compute Engine em um cluster atual.
Para verificar a versão do driver CSI de disco permanente 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 a saída mostrar uma versão anterior a 1.4.0
,
faça upgrade do plano de controle manualmente
para ter a versão mais recente.
Limitações
- Os dois volumes precisam usar o mesmo modo de volume. Por padrão, o GKE define o VolumeMode como
ext4
. - Todas as restrições para criar um clone de disco de um disco atual no Compute Engine também se aplicam ao GKE.
- É possível criar um clone de disco regional a partir de um disco zonal, mas lembre-se das restrições dessa abordagem.
- A clonagem precisa ser feita em uma zona compatível. Use allowedTopologies para restringir a topologia dos volumes provisionados a zonas específicas. Como alternativa, os nodeSelectors ou Afinidade e antiafinidade podem ser usados para restringir um pod para que ele fique restrito a uma execução em um nó específico em uma zona compatível.
- Para clonagem de zona para zona, a zona do clone precisa corresponder à zona do disco de origem.
- Para clonagem zonal em regional, uma das zonas de réplica do clone precisa corresponder à zona do disco de origem.
Como usar a clonagem de volume
Para provisionar um clone de volume, adicione uma referência a um PersistentVolumeClaim existente no mesmo namespace ao campo dataSource
de um novo PersistentVolumeClaim. O exercício a seguir mostra como provisionar
um volume de origem com dados, criar um clone de volume e consumir o clone.
Criar um volume de origem
Para criar um volume de origem, siga as instruções em Como usar o driver CSI do disco permanente do Compute Engine para clusters Linux para criar um StorageClass, um PersistentVolumeClaim e um pod para consumir o{101 }novo volume. Você usará o PersistentVolumeClaim criado como a origem do clone de volume.
Adicionar um arquivo de teste ao volume de origem
Adicionar um arquivo de teste ao volume de origem Procure esse arquivo de teste no clone de volume para verificar se a clonagem foi bem-sucedida.
Crie um arquivo de teste em um 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 consome o volume de origem. Por exemplo, se você tiver seguido as instruções em Como usar o driver CSI do disco permanente do Compute Engine para clusters do Linux, substituaPOD_NAME
porweb-server
.Verifique se o arquivo existe.
kubectl exec POD_NAME \ -- sh -c 'cat /var/lib/www/html/hello.txt'
A saída será assim:
Hello World!
Clonar o volume de origem
Salve 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:
PVC_NAME
: o nome do PersistentVolumeClaim de origem que você criou em Criar um volume de origem.STORAGE_CLASS_NAME
: o nome do StorageClass a ser usado, que precisa ser igual ao StorageClass da PersistentVolumeClaim.STORAGE
: a quantidade de armazenamento a ser solicitada, que precisa ser pelo menos do tamanho do PersistentVolumeClaim da origem.
Aplique o manifesto:
kubectl apply -f podpvc-clone.yaml
Criar um pod que consuma o volume clonado
No exemplo a seguir, criamos um pod que consome o clone de volume que você criou.
Salve 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 arquivo de teste existe:
kubectl exec web-server-clone \ -- sh -c 'cat /var/lib/www/html/hello.txt'
A saída será assim:
Hello World!
Limpar
Para evitar cobranças na conta do Google Cloud pelos recursos usados nesta página, siga estas etapas.
Excluir os objetos
Pod
:kubectl delete pod POD_NAME web-server-clone
Excluir os objetos
PersistentVolumeClaim
:kubectl delete pvc podpvc podpvc-clone