Criar clones de volumes permanentes


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:

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.

  1. 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, substitua POD_NAME por web-server.

  2. 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

  1. 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.
  2. 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.

  1. 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
    
  2. Aplique o manifesto:

    kubectl apply -f web-server-clone.yaml
    
  3. 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.

  1. Excluir os objetos Pod:

    kubectl delete pod POD_NAME web-server-clone
    
  2. Excluir os objetos PersistentVolumeClaim:

    kubectl delete pvc podpvc podpvc-clone