Crear clones de volúmenes persistentes

En este documento se explica cómo usar la clonación de volúmenes de Kubernetes para clonar volúmenes persistentes en tus clústeres de Google Kubernetes Engine (GKE).

Información general

Un clon es un volumen nuevo e independiente que es un duplicado de un volumen de Kubernetes. Un clon es similar a una captura de volumen, ya que es una copia de un volumen en un momento específico. Sin embargo, en lugar de crear un objeto de copia de seguridad a partir del volumen de origen, la clonación de volúmenes proporciona al clon todos los datos del volumen de origen.

Requisitos

Para usar la clonación de volúmenes en GKE, debes cumplir los siguientes requisitos:

  • El PersistentVolumeClaim de origen debe estar en el mismo espacio de nombres que el PersistentVolumeClaim de destino.
  • Usa un controlador de CSI que admita la clonación de volúmenes. El controlador de disco persistente en el árbol no admite la clonación de volúmenes.

Para verificar la versión del controlador de CSI para Persistent Disk en Compute Engine, ejecuta el siguiente comando en la CLI de gcloud:

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

Si la salida muestra una versión anterior a 1.4.0, actualiza manualmente tu plano de control para obtener la versión más reciente.

Limitaciones

  • Ambos volúmenes deben usar el mismo modo de volumen. De forma predeterminada, GKE asigna el valor ext4 a VolumeMode.
  • Todas las restricciones para crear un clon de un disco a partir de un disco ya creado en Compute Engine también se aplican a GKE.
  • Puedes crear un clon de disco regional a partir de un disco zonal, pero debes tener en cuenta las restricciones de este método.
  • La clonación debe realizarse en una zona compatible. Usa allowedTopologies para restringir la topología de los volúmenes aprovisionados a zonas específicas. También se pueden usar nodeSelectors o afinidades y antiafinidades para restringir un pod de forma que solo se pueda ejecutar en un nodo concreto que se ejecute en una zona compatible.
    • En el caso de la clonación de una zona a otra, la zona del clon debe coincidir con la zona del disco de origen.
    • En el caso de la clonación de zonal a regional, una de las zonas de réplica del clon debe coincidir con la zona del disco de origen.

Usar la clonación de volúmenes

Para aprovisionar un clon de volumen, añade una referencia a un PersistentVolumeClaim en el mismo espacio de nombres al campo dataSource de un nuevo PersistentVolumeClaim. En el siguiente ejercicio se muestra cómo aprovisionar un volumen de origen con datos, crear un clon de volumen y usar el clon.

Crear un volumen de origen

Para crear un volumen de origen, sigue las instrucciones de la sección Usar el controlador de CSI para Persistent Disk en Compute Engine con clústeres de Linux para crear una StorageClass, una PersistentVolumeClaim y un Pod que consuma el nuevo volumen. Usarás el PersistentVolumeClaim que crees como origen del clon del volumen.

Añade un archivo de prueba al volumen de origen.

Añade un archivo de prueba al volumen de origen. Puedes buscar este archivo de prueba en el clon del volumen para verificar que la clonación se ha realizado correctamente.

  1. Crea un archivo de prueba en un Pod:

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

    Sustituye POD_NAME por el nombre de un pod que consuma el volumen de origen. Por ejemplo, si has seguido las instrucciones de Usar el controlador de CSI para Persistent Disk en Compute Engine en clústeres de Linux, sustituye POD_NAME por web-server.

  2. Comprueba que el archivo exista:

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

    El resultado debería ser similar al siguiente:

    Hello World!
    

Clonar el volumen de origen

  1. Guarda el siguiente archivo de manifiesto 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
    

    Haz los cambios siguientes:

    • PVC_NAME: nombre del PersistentVolumeClaim de origen que has creado en Crear un volumen de origen.
    • STORAGE_CLASS_NAME: el nombre de la StorageClass que se va a usar, que debe ser el mismo que el de la PersistentVolumeClaim de origen.
    • STORAGE: cantidad de almacenamiento que se va a solicitar, que debe ser al menos el tamaño de la PersistentVolumeClaim de origen.
  2. Aplica el archivo de manifiesto:

    kubectl apply -f podpvc-clone.yaml
    

Crea un pod que consuma el volumen clonado.

En el siguiente ejemplo se crea un pod que consume el clon del volumen que ha creado.

  1. Guarda el siguiente archivo de manifiesto 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. Aplica el archivo de manifiesto:

    kubectl apply -f web-server-clone.yaml
    
  3. Verifica que el archivo de prueba exista:

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

    El resultado debería ser similar al siguiente:

    Hello World!
    

Limpieza

Para evitar que se apliquen cargos en tu cuenta de Trusted Cloud by S3NS por los recursos utilizados en esta página, sigue estos pasos.

  1. Elimina los Pod objetos:

    kubectl delete pod POD_NAME web-server-clone
    
  2. Elimina los PersistentVolumeClaim objetos:

    kubectl delete pvc podpvc podpvc-clone