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:
- La PersistentVolumeClaim de origen debe estar en el mismo espacio de nombres que la PersistentVolumeClaim de destino.
- Usa un controlador CSI que admita la clonación de volúmenes. El controlador de disco persistente en árbol no admite la clonación de volumen.
- La versión 1.4.0 y posteriores del controlador de CSI de disco persistente de Compute Engine admiten la clonación de volúmenes y se instalan de forma predeterminada en clústeres nuevos de Linux que ejecutan la versión 1.22 de GKE o versiones posteriores. También puedes habilitar el controlador de CSI de disco persistente de Compute Engine en un clúster existente.
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.
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, reemplazaPOD_NAME
porweb-server
.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
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.
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.
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
Aplica el manifiesto
kubectl apply -f web-server-clone.yaml
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.
Borra los objetos
Pod
:kubectl delete pod POD_NAME web-server-clone
Borra los objetos
PersistentVolumeClaim
:kubectl delete pvc podpvc podpvc-clone