En este documento, se muestra cómo crear una instantánea de volumen y, luego, usarla para restablecer el volumen. Estas instrucciones se aplican a los clústeres que usan el controlador CSI de vSphere.
Antes de comenzar
Consulta Usa el controlador de Container Storage Interface de vSphere.
Verifica que tu clúster tenga una StorageClass llamada 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 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 proporciona en este documento:
- Crea una PersistentVolumeClaim.
- Crea una 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.
- Crear un objeto Deployment que tenga un Pod. El Pod especifica un volumen basado en tu PersistentVolumeClaim. El único contenedor en el 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!”.
- Crear una VolumeSnapshot
- Crea una VolumeSnapshot que capture el estado del volumen del Pod.
- Se dañó el 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 Deployment para que su volumen se asocie con la PersistentVolumeClaim nueva. Luego, verifica que se haya restablecido el archivo
hello.txt
.
Crea una PersistentVolumeClaim
A continuación, se muestra un manifiesto de una 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 como standard-rwo
. Esta es la clase de almacenamiento asociada con el controlador de CSI de vSphere.
Guarda el manifiesto en un archivo llamado my-pvc.yaml
. Crea y visualiza la PersistentVolumeClaim:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-pvc.yaml kubectl --kubeconfig CLUSTER_KUBECONFIG get pvc my-pvc
En el resultado, puedes ver que la PersistentVolumeClaim está vinculada a un PersistentVolume aprovisionado de forma dinámica. Por ejemplo, el siguiente resultado muestra que la PersistentVolumeClaim llamada my-pvc
está vinculada 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 la PersistentVolumeClaim,
my-pvc
, que creaste antes.El Pod tiene un contenedor, y el contenedor activa el volumen en
/hello/
.
Guarda el manifiesto en un archivo llamado my-deployment.yaml
y crea la Deployment:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-deployment.yaml
El objeto Deployment 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
Crear un archivo en el volumen de Pods y verlo
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!
Crea 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 la VolumeSnapshot:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-snapshot.yaml
Corromper el archivo en el volumen
Cambia el contenido de hello.txt
para que parezca que está dañado:
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 el archivo se modificó:
Hello W-corrupted-file-orld!
Restablecer
A continuación, se muestra un manifiesto de una segunda 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 la PersistentVolumeClaim:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-pvc-2.yaml kubectl --kubeconfig CLUSTER_KUBECONFIG get pvc my-pvc-2
Abre el objeto 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 un Pod nuevo que usa la PersistentVolumeClaim nueva.
Espera unos minutos y, luego, obtén el nombre nuevo del Pod:
kubectl --kubeconfig CLUSTER_KUBECONFIG get pods
Verifica que el volumen del Pod se haya restablecido:
kubectl --kubeconfig CLUSTER_KUBECONFIG \ exec NEW_POD_NAME \ -- sh -c 'cat /hello/hello.txt'
El resultado muestra que el volumen se restableció:
Hello World!
Soluciona problemas
Si quieres obtener orientación para solucionar problemas, consulta Cómo solucionar problemas de almacenamiento.