En Google Kubernetes Engine (GKE), puedes usar la función de instantánea de volumen de Kubernetes para volúmenes persistentes en los clústeres de GKE.
Las instantáneas de volumen te permiten crear una copia del volumen en un momento específico. Puedes usar esta copia para hacer que un volumen vuelva a su estado anterior o a fin de aprovisionar un volumen nuevo.
A partir de la versión 1.17 y posteriores, se puede aprovisionar y conectar instantáneas de volumen con los siguientes componentes:
Requisitos
El uso de instantáneas de volumen en GKE tiene los siguientes requisitos:
Debes instalar un controlador CSI que admita instantáneas. Las instantáneas no son compatibles con el controlador de disco persistente en el árbol. Si usas el controlador CSI de disco persistente de Compute Engine, recomendamos implementar el controlador de forma automática para reducir la sobrecarga de administración. Para obtener una lista de todos los controladores CSI que admiten instantáneas, consulta la columna “Other features” en Controladores en la documentación de Kubernetes.
Debes usar versiones del plano de control (instancia principal) que sean versiones de GKE 1.17 o posteriores. Para usar el controlador CSI de disco persistente de Compute Engine en una VolumeSnapshot, usa la versión de GKE 1.17.6-gke.4 o posteriores.
Debes tener un PersistentVolumeClaim existente del cual tomar una instantánea y el PersistentVolume que se usa para una instantánea de origen, al cual lo debe administrar un controlador CSI. Puedes verificar que usas un controlador CSI si verificas que la especificación de PersistentVolume tenga una sección
csi
condriver: pd.csi.storage.gke.io
. Si el controlador CSI aprovisiona de forma dinámica el PersistentVolume como se describe en las siguientes secciones, entonces lo administra el controlador CSI.
Crea una VolumeSnapshotClass
Crea un VolumeSnapshotClass a fin de determinar el controlador CSI y la deletionPolicy
para tu VolumeSnapshot. Puedes hacer referencia a VolumeSnapshotClass en tu VolumeSnapshot.
El siguiente manifiesto llamado snapshot-class-example.yaml
es un ejemplo de un volumen de VolumeSnapshotClass:
# snapshot-class-example.yaml
apiVersion: snapshot.storage.k8s.io/v1beta1
kind: VolumeSnapshotClass
metadata:
name: snapshot-class
driver: csi-driver
deletionPolicy: Delete
Reemplaza lo siguiente:
snapshot-class
es el nombre de tu VolumenSnapshotClass.csi-driver
especifica qué controlador CSI usar para aprovisionar la instantánea. Por ejemplo, puedes agregarpd.csi.storage.gke.io
para usar el controlador CSI del disco persistente de Compute Engine.Delete
garantiza que el objeto VolumeSnapshotContent se borre cuando se borre VolumeSnapshot a la que está vinculada. También borra la instantánea del sistema de almacenamiento subyacente. Establece este valor enRetain
si deseas mantener el VolumeSnapshotContent.
Para crear el VolumeSnapshotClass, ejecuta el siguiente comando después de crear el archivo.
kubectl apply -f snapshot-class-example.yaml
Crea una
Una VolumeSnapshot es una solicitud de instantánea de una PersistentVolumeClaim preexistente.
El siguiente manifiesto llamado snapshot-example.yaml
es un ejemplo de una VolumeSnapshot:
#snapshot-example.yaml
apiVersion: snapshot.storage.k8s.io/v1beta1
kind: VolumeSnapshot
metadata:
name: snapshot
spec:
volumeSnapshotClassName: snapshot-class
source:
persistentVolumeClaimName: pvc
Reemplaza lo siguiente:
snapshot
es el nombre de tu VolumeSnapshot.snapshot-class
especifica el nombre de la VolumenSnapshotClass a la que deseas hacer referencia. Si no especificas un valor, se usa la StorageClass predeterminada.pvc
es el nombre del PersistentVolumeClaim existente del que deseas tomar una instantánea.
Para crear la VolumeSnapshot, ejecuta el siguiente comando después de crear el archivo:
kubectl apply -f snapshot-example.yaml
Verifica la creación de VolumeSnapshot
Después de crear una instantánea de volumen, se crea un objeto VolumenSnapshotContent correspondiente en el clúster. Este objeto almacena la instantánea y las vinculaciones de objetos VolumeSnapshot. No se interactúa directamente con los objetos VolumenSnapshotContents.
Para confirmar si se creó VolumenSnapshotContents, ejecuta el siguiente comando:
kubectl get volumesnapshotcontents
El resultado es similar al siguiente:
NAME AGE
snapcontent-cee5fb1f-5427-11ea-a53c-42010a1000da 55s
Después de crear el contenido de la instantánea de volumen, el controlador CSI que especificaste en VolumeSnapshotClass
crea una instantánea en el sistema de almacenamiento correspondiente. Una vez que GKE crea una instantánea en el sistema de almacenamiento y la vincula a un objeto de instantánea de volumen del clúster, la instantánea está lista para usarse. Para verificar el estado, ejecuta el siguiente comando:
kubectl get volumesnapshot \
-o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
Si está listo para usar, el resultado es similar al siguiente:
NAME READY
snapshot-example true
Aprovisiona y restablece volúmenes mediante una VolumeSnapshot
Hacer referencia a una VolumeSnapshot en una PersistentVolumeClaim te permite aprovisionar un volumen nuevo con datos de un volumen existente o restablecer un volumen a un estado que capturaste en una instantánea.
Para hacer referencia a una VolumenSnapshot en una PersistentVolumeClaim, agrega el campo dataSource
a tu PersistentVolumeClaim.
El siguiente manifiesto llamado pvc-demo.yaml
es un ejemplo de cómo agregar el campo dataSource
:
# pvc-demo.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-demo
spec:
dataSource:
name: snapshot-name
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
Asegúrate de que dataSource
tenga los siguientes campos:
snapshot-name
es el nombre de la VolumeSnapshot que deseas usar.kind
debe serVolumeSnapshot
.apiGroup
debe sersnapshot.storage.k8s.io
.
Para aplicar el cambio a la PersistentVolumeClaim, ejecute el siguiente comando:
kubectl apply -f pvc-demo.yaml
Borra un VolumeSnapshot
Para borrar un VolumeSnapshot, ejecuta el siguiente comando:
kubectl delete volumesnapshot snapshot-example
Si el VolumeSnapshotClass
de una instantánea de volumen tiene deletionPolicy:Delete
, también se borran la VolumeSnapshotContent
correspondiente y la instantánea física del sistema de almacenamiento. Si tiene un deletionPolicy:Retain
, GKE conserva la instantánea física.
¿Qué sigue?
- Lee la documentación de Instantáneas de volumen de Kubernetes.
- Obtenga información sobre volume expansion (expansión de volumen).
- Obtén más información sobre cómo instalar un controlador CSI forma manual.