Crea clonaciones de volúmenes persistentes


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

Descripción general

Una clonación es un volumen independiente nuevo que es un duplicado de un volumen de Kubernetes existente. Una clonación es similar a una instantánea de volumen, ya que es una copia de un volumen en un momento específico. Sin embargo, en lugar de crear un objeto de instantánea a partir del volumen fuente, la clonación de volumen aprovisiona la clonación con todos los datos del volumen de origen.

Requisitos

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

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

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

Si el resultado muestra una versión anterior a 1.4.0, actualiza tu plano de control de forma manual para obtener la última versión.

Limitaciones

  • Ambos volúmenes deben usar el mismo modo de volumen. De forma predeterminada, GKE establece VolumeMode en ext4.
  • Todas las restricciones para crear un clon de un disco desde un disco existente en Compute Engine también se aplican a GKE.
  • Puedes crear una clonación de un disco regional a partir un disco zonal, pero debes tener en cuenta las restricciones de este enfoque.
  • 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. Como alternativa, se pueden usar nodeSelectors o Afinidad y antiafinidad para restringir un Pod a fin de que se restrinja para que se ejecute en un nodo en particular que se ejecuta en una zona compatible.
    • En la clonación zonal a zonal, la zona de clonación debe coincidir con la zona del disco de origen.
    • Para las clonaciones zonales a regionales, una de las zonas de réplica del clon debe coincidir con la zona del disco de origen.

Usa la clonación de volúmenes

Para aprovisionar una clonación de volúmenes, agrega una referencia a una PersistentVolumeClaim existente en el mismo espacio de nombres al campo dataSource de una PersistentVolumeClaim nueva. En el siguiente ejercicio, se muestra cómo aprovisionar un volumen de origen con datos, crear una clonación de volúmenes y consumir la clonación.

Crea un volumen de origen

Para crear un volumen de origen, sigue las instrucciones que se indican en Usa el controlador de CSI de disco persistente de Compute Engine para clústeres de Linux para crear una StorageClass, una PersistentVolumeClaim y un Pod para consumir el nuevo volumen. Usarás la PersistentVolumeClaim que crees como fuente para la clonación de volumen.

Agrega un archivo de prueba al volumen de origen

Agrega un archivo de prueba al volumen de origen. Puedes buscar este archivo de prueba en la clonación de volúmenes 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'
    

    Reemplaza POD_NAME por el nombre de un Pod que consume el volumen de origen. Por ejemplo, si seguiste las instrucciones en Usa el controlador de CSI del disco persistente de Compute Engine para clústeres de Linux, reemplaza POD_NAME por web-server.

  2. Verifica que el archivo exista:

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

    El resultado es similar a este:

    Hello World!
    

Clona el volumen de origen

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

    Reemplaza lo siguiente:

    • PVC_NAME: El nombre de la PersistentVolumeClaim que creaste en Crea un volumen de origen.
    • STORAGE_CLASS_NAME: El nombre de la StorageClass que se usará, que debe ser la misma que la StorageClass de la PersistentVolumeClaim de origen.
    • STORAGE: La cantidad de almacenamiento que se debe solicitar, que debe ser al menos el tamaño del PersistentVolumeClaim de origen.
  2. Aplica el 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 la clonación de volúmenes que creaste.

  1. Guarda el siguiente 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 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 es similar a este:

    Hello World!
    

Limpia

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en esta página.

  1. Borra los objetos Pod:

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

    kubectl delete pvc podpvc podpvc-clone