Crie clones de volumes persistentes

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:

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.

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

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

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

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

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

  1. Elimine os Pod objetos:

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

    kubectl delete pvc podpvc podpvc-clone