Crea cloni di volumi permanenti

Questo documento mostra come utilizzare la clonazione dei volumi Kubernetes per clonare volumi permanenti nei cluster Google Kubernetes Engine (GKE).

Panoramica

Un clone è un nuovo volume indipendente che è un duplicato di un volume Kubernetes esistente. Un clone è simile a uno snapshot del volume in quanto è una copia di un volume in un momento specifico. Tuttavia, anziché creare un oggetto snapshot dal volume di origine, la clonazione del volume esegue il provisioning del clone con tutti i dati del volume di origine.

Requisiti

Per utilizzare la clonazione dei volumi su GKE, devi soddisfare i seguenti requisiti:

Per verificare la versione del driver CSI del disco permanente di Compute Engine, esegui il seguente comando nell'interfaccia alla gcloud CLI:

kubectl describe daemonsets pdcsi-node --namespace=kube-system | grep "gke.gcr.io/gcp-compute-persistent-disk-csi-driver"

Se l'output mostra una versione precedente alla 1.4.0, esegui manualmente l'upgrade del piano di controllo per ottenere la versione più recente.

Limitazioni

  • Entrambi i volumi devono utilizzare la stessa modalità di volume. Per impostazione predefinita, GKE imposta VolumeMode su ext4.
  • Tutte le limitazioni per la creazione di un clone del disco da un disco esistente su Compute Engine si applicano anche a GKE.
  • Puoi creare un clone del disco a livello di regione da un disco a livello di zona, ma devi essere a conoscenza delle limitazioni di questo approccio.
  • La clonazione deve essere eseguita in una zona compatibile. Utilizza allowedTopologies per limitare la topologia dei volumi di cui è stato eseguito il provisioning a zone specifiche. In alternativa, puoi utilizzare nodeSelectors o affinità e anti-affinità per vincolare un pod in modo che sia limitato all'esecuzione su un nodo specifico in una zona compatibile.
    • Per la clonazione da zona a zona, la zona del clone deve corrispondere alla zona del disco di origine.
    • Per la clonazione da zona a regione, una delle zone di replica del clone deve corrispondere alla zona del disco di origine.

Utilizzo della clonazione dei volumi

Per eseguire il provisioning di un clone del volume, aggiungi un riferimento a un oggetto PersistentVolumeClaim esistente nello stesso spazio dei nomi al campo dataSource di un nuovo oggetto PersistentVolumeClaim. Il seguente esercizio mostra come eseguire il provisioning di un volume di origine con i dati, creare un clone del volume e utilizzare il clone.

Creare un volume di origine

Per creare un volume di origine, segui le istruzioni riportate in Utilizzo del driver CSI del disco permanente di Compute Engine per i cluster Linux per creare un oggetto StorageClass, un oggetto PersistentVolumeClaim e un pod per utilizzare il nuovo volume. Utilizzerai l'oggetto PersistentVolumeClaim che crei come origine per il clone del volume.

Aggiungere un file di test al volume di origine

Aggiungi un file di test al volume di origine. Puoi cercare questo file di test nel clone del volume per verificare che la clonazione sia andata a buon fine.

  1. Crea un file di test in un pod:

    kubectl exec POD_NAME \
        -- sh -c 'echo "Hello World!" > /var/lib/www/html/hello.txt'
    

    Sostituisci POD_NAME con il nome di un pod che utilizza il volume di origine. Ad esempio, se hai seguito le istruzioni riportate in Utilizzo del driver CSI del disco permanente di Compute Engine per i cluster Linux, sostituisci POD_NAME con web-server.

  2. Verifica che il file esista:

    kubectl exec POD_NAME \
        -- sh -c 'cat /var/lib/www/html/hello.txt'
    

    L'output è simile al seguente:

    Hello World!
    

Clonare il volume di origine

  1. Salva il seguente manifest come 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
    

    Sostituisci quanto segue:

    • PVC_NAME: il nome dell'oggetto PersistentVolumeClaim di origine che hai creato in Creare un volume di origine.
    • STORAGE_CLASS_NAME: il nome dell'oggetto StorageClass da utilizzare, che deve essere lo stesso dell'oggetto StorageClass dell'oggetto PersistentVolumeClaim di origine.
    • STORAGE: la quantità di spazio di archiviazione da richiedere, che deve essere almeno la dimensione dell'oggetto PersistentVolumeClaim di origine.
  2. Applica il manifest:

    kubectl apply -f podpvc-clone.yaml
    

Creare un pod che utilizza il volume clonato

L'esempio seguente crea un pod che utilizza il clone del volume che hai creato.

  1. Salva il seguente manifest come 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. Applica il manifest:

    kubectl apply -f web-server-clone.yaml
    
  3. Verifica che il file di test esista:

    kubectl exec web-server-clone \
        -- sh -c 'cat /var/lib/www/html/hello.txt'
    

    L'output è simile al seguente:

    Hello World!
    

Libera spazio

Per evitare che al tuo Google Cloud account vengano addebitati costi relativi alle risorse utilizzate in questa pagina, segui questi passaggi.

  1. Elimina gli oggetti Pod:

    kubectl delete pod POD_NAME web-server-clone
    
  2. Elimina gli oggetti PersistentVolumeClaim:

    kubectl delete pvc podpvc podpvc-clone