Questo documento mostra come creare uno snapshot di volume e utilizzarlo per ripristinare il volume. Le istruzioni riportate di seguito si applicano ai cluster che utilizzano il driver CSI vSphere.
Prima di iniziare
Consulta la pagina Utilizzo del driver vSphere Container Storage.
Verifica che il cluster abbia un oggetto StorageClass denominato standard-rwo
e che il driver vSphere CSI sia installato.
La tua versione vSphere, ESXi e vCenter Server, deve essere l'aggiornamento 3.0 o successivo. Per maggiori informazioni, consulta la sezione Risoluzione dei problemi relativi allo spazio di archiviazione.
Panoramica della procedura
Di seguito sono riportati i passaggi principali dell'esercizio indicati in questo documento:
- crea un oggetto PersistentVolumeClaim.
- Crea un
PersitentVolumeClaim
che richieda la classe di archiviazione
standard-rwo
. Il cluster esegue quindi il provisioning dinamico di un PersistentVolume e lo associa al tuo PersistentVolumeClaim.
- Creare un deployment.
- Crea un deployment che abbia un pod. Il pod specifica un volume in base al tuo
PersistentVolumeClaim. L'unico container nel pod monta il volume all'indirizzo
/hello/
.
- Scrivi un file nel volume Pod.
- Crea un file denominato
hello.txt
nel volume Pod. Il contenuto del file è "Hello World!".
- Crea un'istantanea volume.
- Crea un oggetto VolumeSnapshot che acquisisca lo stato del volume del pod.
- danneggia il file.
- Modifica il file
hello.txt
in modo che sembri un file danneggiato. Il contenuto del file ora è "Hello W-corrupted-file-orld!"
- Usa lo snapshot per ripristinare il volume.
- Crea un secondo oggetto PersistentVolumeClaim che utilizza l'origine dati VolumeSnapshot. Modifica il tuo deployment in modo che il relativo volume venga associato al nuovo
PersistentVolumeClaim. quindi verifica che il file
hello.txt
sia stato ripristinato.
Crea un oggetto PersistentVolumeClaim
Di seguito è riportato un manifest per un oggetto PersistentVolumeClaim:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi storageClassName: standard-rwo
Nel manifest precedente, puoi vedere che storageClassName
è impostato su standard-rwo
. Questa è la classe di archiviazione associata al driver vSphere CSI.
Salva il manifest in un file denominato my-pvc.yaml
. Crea e visualizza il PersistentVolumeClaim:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-pvc.yaml kubectl --kubeconfig CLUSTER_KUBECONFIG get pvc my-pvc
Nell'output, puoi vedere che l'oggetto PersistentVolumeClaim è associato a un PersistentVolume di cui è stato eseguito il provisioning dinamico. Ad esempio, il seguente output mostra che l'oggetto PersistentVolumeClaim my-pvc
è associato a un PersistentVolume denominato pvc-467d211c-26e4-4d69-aaa5-42219aee6fd5
:
my-pvc Bound pvc-467d211c-26e4-4d69-aaa5-42219aee6fd5 … standard-rwo 100s
Creazione di un deployment
Di seguito è riportato un manifest per un 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
Nel contesto di questo esercizio, questi sono i punti importanti da comprendere in merito al manifest del deployment precedente:
Il pod richiede l'archiviazione specificando l'oggetto PersistentVolumeClaim
my-pvc
creato in precedenza.Il pod ha un container e il volume monta il volume all'indirizzo
/hello/
.
Salva il manifest in un file denominato my-deployment.yaml
e crea il deployment:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-deployment.yaml
Il deployment ha un pod. Recupera il nome del pod:
kubectl --kubeconfig CLUSTER_KUBECONFIG get pods
Prendi nota del nome del pod. Ad esempio, nel seguente output, il nome del pod è my-deployment-7575c4f5bf-r59nt
:
my-deployment-7575c4f5bf-r59nt 1/1 Running 0 65s
Crea un file nel volume del pod e visualizzalo.
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'
L'output mostra i contenuti del file /hello/hello.txt
:
Hello World!
Crea uno snapshot
Di seguito è riportato un manifest per un oggetto VolumeSnapshot:
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: my-snapshot spec: volumeSnapshotClassName: csi-vsphere-snapshot-class source: persistentVolumeClaimName: my-pvc
Salva il manifest in un file denominato my-snapshot.yaml
e crea il valore
VolumeSnapshot:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-snapshot.yaml
danneggia il file nel volume
Modifica i contenuti di hello.txt
in modo che sembrino essere danneggiati:
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'
Nell'output puoi vedere che il file è stato modificato:
Hello W-corrupted-file-orld!
Ripristina
Di seguito è riportato un manifest per un secondo oggetto 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
Nel manifest precedente, puoi vedere che l'origine dati per la nuova richiesta PersistentVolume è VolumeSnapshot che hai creato in precedenza.
Salva il manifest in un file denominato my-pvc-2.yaml
. Crea e visualizza il PersistentVolumeClaim:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-pvc-2.yaml kubectl --kubeconfig CLUSTER_KUBECONFIG get pvc my-pvc-2
Apri il deployment per la modifica:
kubectl --kubeconfig CLUSTER_KUBECONFIG edit deployment my-deployment
Cambia my-pvc
in my-pvc-2
e chiudi l'editor:
… volumes: - name: my-volume persistentVolumeClaim: claimName: my-pvc-2
Il deployment elimina il pod e crea un nuovo pod che utilizza il nuovo PersistentVolumeClaim.
Attendi qualche minuto, quindi richiedi il nuovo nome del pod:
kubectl --kubeconfig CLUSTER_KUBECONFIG get pods
Verifica che il volume del pod sia stato ripristinato:
kubectl --kubeconfig CLUSTER_KUBECONFIG \ exec NEW_POD_NAME \ -- sh -c 'cat /hello/hello.txt'
L'output mostra che il volume è stato ripristinato:
Hello World!
Risolvere i problemi
Per indicazioni sulla risoluzione dei problemi, consulta la sezione Risoluzione dei problemi relativi allo spazio di archiviazione.