En este documento, se muestra cómo crear una instantánea de volumen y, luego, usarla para restablecer el volumen. Las instrucciones que se indican aquí se aplican a los clústeres que usan el controlador de CSI de vSphere.
Antes de comenzar
Lee Usa el controlador de Container Storage Interface de vSphere.
Verifica que tu clúster tenga un StorageClass llamado standard-rwo
y que el controlador de CSI de vSphere esté instalado.
Tu versión de vSphere, ESXi y vCenter Server debe ser 7.0, actualización 3 o una posterior. Para obtener más información, consulta Soluciona problemas de almacenamiento.
Descripción general de los pasos
Estos son los pasos principales del ejercicio que se indica en este documento:
- Crea una PersistentVolumeClaim.
- Crea un PersistentVolumeClaim que solicite la clase de almacenamiento
standard-rwo
. Luego, el clúster aprovisiona de forma dinámica un PersistentVolume y lo asocia con tu PersistentVolumeClaim.
- Crea una implementación.
- Crea una implementación que tenga un Pod. El pod especifica un volumen según tu
PersistentVolumeClaim. El único contenedor del Pod activa el volumen en
/hello/
.
- Escribe un archivo en el volumen del Pod.
- Crea un archivo llamado
hello.txt
en el volumen del pod. El contenido del archivo es “Hello World!”.
- Crea una VolumeSnapshot.
- Crea una VolumeSnapshot que capture el estado del volumen del Pod.
- Daño del archivo.
- Modifica el archivo
hello.txt
para que parezca un archivo dañado. El contenido del archivo ahora es “Hello W-corrupted-file-orld!”.
- Usa la instantánea para restablecer el volumen.
- Crea una segunda PersistentVolumeClaim que use tu VolumeSnapshot como fuente de datos. Edita tu implementación para que su volumen esté asociado con la nueva
PersistentVolumeClaim. Luego, verifica que se haya restablecido el archivo
hello.txt
.
Crea una PersistentVolumeClaim
A continuación, se muestra un manifiesto de PersistentVolumeClaim:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi storageClassName: standard-rwo
En el manifiesto anterior, puedes ver que storageClassName
está configurado en standard-rwo
. Esta es la clase de almacenamiento asociada con el controlador CSI de vSphere.
Guarda el siguiente manifiesto como un archivo llamado my-pvc.yaml
. Crea y visualiza el PersistentVolumeClaim:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-pvc.yaml kubectl --kubeconfig CLUSTER_KUBECONFIG get pvc my-pvc
En el resultado, puedes ver que PersistentVolumeClaim está vinculado a un
PersistentVolume aprovisionado de forma dinámica. Por ejemplo, el siguiente resultado muestra que el PersistentVolumeClaim llamado my-pvc
está vinculado a un PersistentVolume llamado pvc-467d211c-26e4-4d69-aaa5-42219aee6fd5
:
my-pvc Bound pvc-467d211c-26e4-4d69-aaa5-42219aee6fd5 … standard-rwo 100s
Crear una implementación
A continuación, se muestra un manifiesto de Deployment:
apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment spec: selector: matchLabels: app: hello-app template: metadata: labels: app: hello-app spec: containers: - name: hello-app image: google/cloud-sdk:slim args: [ "sleep", "3600" ] volumeMounts: - name: my-volume mountPath: /hello/ volumes: - name: my-volume persistentVolumeClaim: claimName: my-pvc
En el contexto de este ejercicio, estos son los puntos importantes que debes comprender sobre el manifiesto de Deployment anterior:
El Pod solicita almacenamiento especificando el PersistentVolumeClaim,
my-pvc
, que creaste antes.El pod tiene un contenedor, y este activa el volumen en
/hello/
.
Guarda el manifiesto en un archivo llamado my-deployment.yaml
y crea el Deployment.
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-deployment.yaml
La implementación tiene un Pod. Obtén el nombre del Pod :
kubectl --kubeconfig CLUSTER_KUBECONFIG get pods
Toma nota del nombre del Pod. Por ejemplo, en el siguiente resultado, el nombre del Pod es my-deployment-7575c4f5bf-r59nt
:
my-deployment-7575c4f5bf-r59nt 1/1 Running 0 65s
Crea un archivo en el volumen del Pod y obsérvalo.
kubectl --kubeconfig CLUSTER_KUBECONFIG \ exec POD_NAME \ -- sh -c 'echo "Hello World!" > /hello/hello.txt' kubectl --kubeconfig CLUSTER_KUBECONFIG \ exec POD_NAME \ -- sh -c 'cat /hello/hello.txt'
El resultado muestra el contenido del archivo /hello/hello.txt
:
Hello World!
Crear una instantánea
A continuación, se muestra un manifiesto de VolumeSnapshot:
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: my-snapshot spec: volumeSnapshotClassName: csi-vsphere-snapshot-class source: persistentVolumeClaimName: my-pvc
Guarda el manifiesto en un archivo llamado my-snapshot.yaml
y crea el VolumeSnapshot.
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-snapshot.yaml
Daña el archivo en el volumen
Cambia el contenido de hello.txt
para que parezca que se dañó:
kubectl --kubeconfig CLUSTER_KUBECONFIG \ exec POD_NAME \ -- sh -c 'echo "Hello W-corrupted-file-orld!" > /hello/hello.txt' kubectl --kubeconfig CLUSTER_KUBECONFIG \ exec POD_NAME \ -- sh -c 'cat /hello/hello.txt'
En el resultado, puedes ver que se cambió el archivo:
Hello W-corrupted-file-orld!
Restablecer
Este es un manifiesto para un segundo PersistentVolumeClaim:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc-2 spec: storageClassName: standard-rwo dataSource: name: my-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io accessModes: - ReadWriteOnce resources: requests: storage: 5Gi
En el manifiesto anterior, puedes ver que la fuente de datos para la nueva reclamación de PersistentVolume es la VolumeSnapshot que creaste antes.
Guarda el manifiesto en un archivo llamado my-pvc-2.yaml
: Crea y visualiza el PersistentVolumeClaim:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-pvc-2.yaml kubectl --kubeconfig CLUSTER_KUBECONFIG get pvc my-pvc-2
Abre el Deployment para editarlo:
kubectl --kubeconfig CLUSTER_KUBECONFIG edit deployment my-deployment
Cambia my-pvc
a my-pvc-2
y cierra el editor:
… volumes: - name: my-volume persistentVolumeClaim: claimName: my-pvc-2
La implementación borra el Pod y crea uno nuevo que usa el nuevo PersistentVolumeClaim.
Espera unos minutos y, luego, obtén el nombre del Pod nuevo:
kubectl --kubeconfig CLUSTER_KUBECONFIG get pods
Verifica que se haya restablecido el volumen del Pod:
kubectl --kubeconfig CLUSTER_KUBECONFIG \ exec NEW_POD_NAME \ -- sh -c 'cat /hello/hello.txt'
El resultado muestra que se restableció el volumen:
Hello World!
Soluciona problemas
Para obtener orientación sobre la solución de problemas, consulta Soluciona problemas de almacenamiento.