Snapshot di un oggetto PersistentVolume
Puoi utilizzare la funzionalità di snapshot dei volumi Kubernetes per volumi permanenti e provisioning dinamico nei tuoi cluster GKE.
Gli snapshot del volume ti consentono di creare una copia del volume in un momento specifico. Puoi utilizzare questa copia per riportare un volume a uno stato precedente o per eseguire il provisioning di un volume sostitutivo.
Puoi eseguire il provisioning e collegare gli snapshot dei volumi con i seguenti componenti:
Requisiti
Per utilizzare gli snapshot dei volumi su GKE su Azure, devi disporre di quanto segue:
Un volume che utilizza un driver Container Storage Interface (CSI) che supporta gli snapshot. I driver Azure Disk e Azure File che GKE su Azure utilizza per impostazione predefinita supportano gli snapshot.
Per un elenco di tutti i driver CSI che supportano gli snapshot, consulta la colonna "Altre funzionalità" in Driver nella documentazione di Kubernetes.
Avere un
PersistentVolumeClaimesistente da utilizzare per uno snapshot. IlPersistentVolumeche utilizzi per un'origine snapshot deve essere gestito da un driver CSI. Puoi verificare di utilizzare un driver CSI controllando che la specificaPersistentVolumeabbia una sezionecsicondriver: disk.csi.azure.comofile.csi.azure.com. Se il tuo cluster esegue il provisioning dinamico di PersistentVolumes tramite il driver CSI come descritto nelle sezioni seguenti, viene gestito dal driver CSI.
Prima di iniziare
Creare e utilizzare uno snapshot del volume
Gli esempi riportati in questo documento mostrano come svolgere le seguenti attività:
- Crea un esempio di
PersistentVolumeClaimePod. - Crea un VolumeSnapshot.
- Ripristina lo snapshot del volume.
- Verifica che il ripristino abbia funzionato.
Per utilizzare uno snapshot del volume, devi completare i seguenti passaggi:
- Crea un oggetto
VolumeSnapshotper richiedere uno snapshot di un PersistentVolumeClaim esistente. - Fai riferimento a
VolumeSnapshotin unPersistentVolumeClaimper ripristinare un volume in quello snapshot o creare un nuovo volume utilizzando lo snapshot.
Crea un esempio di PersistentVolumeClaim e Pod
Per creare l'oggetto
PersistentVolumeClaim, salva il seguente manifest comeexample-pvc.yaml:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: example-pvc spec: storageClassName: standard-rwo accessModes: - ReadWriteOnce resources: requests: storage: 1GiPer
spec.storageClassName, puoi specificare qualsiasi classe di archiviazione che utilizzi un driver CSI supportato. Questo esempio utilizza la classe di archiviazionestandard-rwopredefinita.Applica il manifest:
kubectl apply -f example-pvc.yamlCrea un pod che scrive la data e l'ora correnti nel volume. Per creare un pod, salva il seguente manifest come
snapshot-shell.yaml:apiVersion: v1 kind: Pod metadata: name: snapshot-shell spec: terminationGracePeriodSeconds: 10 containers: - name: linux image: ubuntu:bionic command: ["/bin/sh"] args: ["-c", "echo $(date -u) >> /data/out.txt"] volumeMounts: - name: snapshot-volume mountPath: /data restartPolicy: Never volumes: - name: snapshot-volume persistentVolumeClaim: claimName: example-pvcApplica il manifest:
kubectl apply -f snapshot-shell.yamlControlla lo stato del pod:
kubectl get pod snapshot-shellL'esecuzione e il completamento del pod potrebbero richiedere del tempo. Puoi eseguire il comando precedente finché non visualizzi un output simile al seguente:
NAME READY STATUS RESTARTS AGE snapshot-shell 0/1 Completed 0 24s
Crea un VolumeSnapshot
Un oggetto VolumeSnapshot è una richiesta di snapshot di un oggetto PersistentVolumeClaim esistente. Quando crei un oggetto VolumeSnapshot, il cluster lo crea e lo associa automaticamente a un oggetto VolumeSnapshotContent, che è una risorsa nel cluster come un oggetto PersistentVolume.
Salva il seguente manifest come
volumesnapshot.yaml.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: example-snapshot spec: source: persistentVolumeClaimName: example-pvcApplica il manifest:
kubectl apply -f volumesnapshot.yamlDopo aver creato uno snapshot del volume, il cluster crea un oggetto
VolumeSnapshotContentcorrispondente. Questo oggetto archivia lo snapshot e i binding degli oggettiVolumeSnapshot. Non interagisci direttamente con gli oggettiVolumeSnapshotContents.Verifica che il cluster abbia creato l'oggetto
VolumeSnapshotContents:kubectl get volumesnapshotcontentsL'output è simile al seguente:
NAME AGE snapcontent-cee5fb1f-5427-11ea-a53c-42010a1000da 55s
Conferma che lo snapshot del volume sia pronto
Una volta creato il contenuto dello snapshot del volume, il driver CSI specificato in
VolumeSnapshotClass crea uno snapshot sul sistema di archiviazione
corrispondente. Dopo che il cluster crea uno snapshot sul sistema di archiviazione e lo associa
a un oggetto VolumeSnapshot, lo snapshot è pronto per l'uso. Puoi controllare lo stato eseguendo questo comando:
kubectl get volumesnapshot \
-o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
Se lo snapshot è pronto per l'uso, l'output è simile al seguente:
NAME READY
example-snapshot true
Ripristina lo snapshot del volume
Puoi fare riferimento a un VolumeSnapshot in un PersistentVolumeClaim per eseguire il provisioning
di un nuovo volume con i dati di un volume esistente o ripristinare un volume a uno
stato acquisito nello snapshot.
Per fare riferimento a un VolumeSnapshot in un PersistentVolumeClaim, aggiungi il campo dataSource al PersistentVolumeClaim.
In questo esempio, fai riferimento a VolumeSnapshot che hai creato in un nuovo
PersistentVolumeClaim e crei un pod che monta
PersistentVolumeClaim.
Salva il seguente manifest come
pvc-restore.yaml:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-restore spec: dataSource: name: example-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io storageClassName: standard-rwo accessModes: - ReadWriteOnce resources: requests: storage: 1GiApplica il manifest:
kubectl apply -f pvc-restore.yamlAvvia un pod temporaneo che monta la PVC sul pod e stampa i contenuti di
out.txtnei log.Salva il seguente manifest come
restore-log.yaml:apiVersion: v1 kind: Pod metadata: name: restore-verify spec: volumes: - name: restore-data persistentVolumeClaim: claimName: pvc-restore containers: - name: shell-container image: ubuntu:bionic volumeMounts: - mountPath: "/data" name: restore-data command: [ "/bin/sh" ] args: ["-c", "cat /data/out.txt", "exit", "1"] restartPolicy: NeverApplica il manifest:
kubectl apply -f restore-log.yaml
Verifica che il ripristino dello snapshot sia andato a buon fine
Il pod creato nel passaggio precedente legge dallo snapshot. Per visualizzare i dati dello snapshot, utilizza il comando kubectl logs.
kubectl logs restore-verify
L'output deve includere un timestamp dello snapshot.
Esegui la pulizia
Per evitare che ti vengano addebitati costi per le risorse utilizzate in questa pagina, segui questi passaggi.
Elimina il
VolumeSnapshot:kubectl delete volumesnapshot example-snapshotElimina il pod temporaneo:
kubectl delete -f restore-log.yamlElimina il pod:
kubectl delete -f snapshot-shell.yamlElimina gli oggetti
PersistentVolumeClaim:kubectl delete pvc example-pvc pvc-restore
Passaggi successivi
- Leggi la documentazione Volume Snapshot di Kubernetes.
- Installa driver CSI aggiuntivi.