Questo documento illustra come creare uno snapshot del 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
Letto Utilizzo del driver vSphere Container Storage Interface.
Verifica
che il cluster abbia un oggetto StorageClass denominato standard-rwo
e che
Il driver CSI vSphere è installato.
La versione vSphere, ESXi e vCenter Server deve essere 7.0 Update 3 o successive. Per ulteriori informazioni, vedi Risoluzione dei problemi di archiviazione.
Panoramica della procedura
Di seguito sono riportati i passaggi principali dell'esercizio descritto in questo documento:
- Creare un oggetto PersistentVolumeClaim.
- Crea un
PersistentVolumeClaim
che richiede la classe di archiviazione
standard-rwo
. Il cluster quindi provisioning dinamico un PersistentVolume e lo associa al tuo PersistentVolumeClaim.
- Creare un deployment.
- Creare un deployment con un pod. Il pod specifica un volume in base
e PersistentVolumeClaim. L'unico container nel pod monta il volume in
/hello/
.
- Scrivere un file nel volume del pod.
- Crea un file denominato
hello.txt
nel volume del pod. I contenuti del file sono "Hello World!".
- Crea un VolumeSnapshot.
- Crea un VolumeSnapshot che acquisisca lo stato del volume del pod.
- Danneggiare il file.
- Modifica il file
hello.txt
in modo che sembri danneggiato. I contenuti del file ora sono "Hello W-file-corrotto-orld!"
- Utilizza lo snapshot per ripristinare il volume.
- Crea un secondo PersistentVolumeClaim che utilizzi VolumeSnapshot come origine dati. Modifica il deployment in modo che il relativo volume sia associato al nuovo
PersistentVolumeClaim. Poi verifica che il file
hello.txt
sia stato ripristinato.
crea un PersistentVolumeClaim
Ecco un manifest per un 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
. Si tratta della classe di archiviazione associata al driver CSI vSphere.
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 il PersistentVolumeClaim è associato a un
PersistentVolume di cui è stato eseguito il provisioning in modo dinamico. Ad esempio, il seguente output
mostra che l'oggetto PersistentVolumeClaim denominato 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
Ecco 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, di seguito sono riportati i punti importanti da comprendere in merito al manifest di deployment precedente:
Il pod richiede spazio di archiviazione specificando l'oggetto PersistentVolumeClaim
my-pvc
che hai creato in precedenza.Il pod ha un container e il container monta il volume in
/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. Ottieni 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
Ecco un manifest per un 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
VolumeSnapshot:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-snapshot.yaml
Danneggiare il file nel volume
Modifica i contenuti di hello.txt
in modo che risultino essere stati
danneggiato:
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
Ecco un manifest per un secondo 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 L'attestazione PersistentVolume è il 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 ne crea uno nuovo che utilizza il nuovo e PersistentVolumeClaim.
Attendi qualche minuto, quindi ottieni 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!
Risoluzione dei problemi
Per indicazioni sulla risoluzione dei problemi, consulta Risoluzione dei problemi di archiviazione.