Snapshot von PersistentVolume erstellen
Sie können die Volume-Snapshot-Funktion von Kubernetes für nichtflüchtige Volumes und dynamische Bereitstellung in Ihren GKE-Clustern verwenden.
Mit Volume-Snapshots können Sie eine Kopie Ihres Volumes zu einem bestimmten Zeitpunkt erstellen. Mit dieser Kopie können Sie ein Volume auf einen vorherigen Zustand zurücksetzen oder ein Ersatz-Volume bereitstellen.
Sie können Volume-Snapshots mit den folgenden Komponenten bereitstellen und anhängen:
Voraussetzungen
Wenn Sie Volume-Snapshots in GKE on Azure verwenden möchten, benötigen Sie Folgendes:
Volume mit einem CSI-Treiber (Container Storage Interface), der Snapshots unterstützt. Die von GKE on Azure verwendeten Azure Disk- und Azure-Dateitreiber unterstützen standardmäßig Snapshots.
Eine Liste aller CSI-Treiber, die Snapshots unterstützen, finden Sie in der Kubernetes-Dokumentation in der Spalte "Weitere Funktionen" unter Treiber.
Sie benötigen einen vorhandenen
PersistentVolumeClaim
, der für einen Snapshot verwendet werden kann. DerPersistentVolume
, den Sie für eine Snapshot-Quelle verwenden, muss von einem CSI-Treiber verwaltet werden. Prüfen Sie, ob Sie einen CSI-Treiber verwenden. Bestätigen Sie dazu, dass diePersistentVolume
-Spezifikation den Abschnittcsi
mitdriver: disk.csi.azure.com
oderfile.csi.azure.com
enthält. Wenn der Cluster wie im Folgenden beschrieben dynamisch PersistentVolumes vom CSI-Treiber bereitstellt, wird er vom CSI-Treiber verwaltet.
Hinweise
Volume-Snapshot erstellen und verwenden
Die Beispiele in diesem Dokument beschreiben die Ausführung der folgenden Aufgaben:
- Beispiel für
PersistentVolumeClaim
undPod
erstellen - VolumeSnapshot erstellen
- Volume-Snapshot wiederherstellen
- Prüfen, ob die Wiederherstellung funktioniert hat
So verwenden Sie einen Volume-Snapshot:
- Erstellen Sie ein
VolumeSnapshot
-Objekt, um einen Snapshot eines vorhandenen PersistentVolumeClaim anzufragen. - Verweisen Sie auf die
VolumeSnapshot
in einerPersistentVolumeClaim
, um ein Volume anhand dieses Snapshots wiederherzustellen oder ein neues Volume zu erstellen mithilfe dieses Snapshots.
Beispiel für PersistentVolumeClaim
und Pod
erstellen
Speichern Sie zum Erstellen des
PersistentVolumeClaim
-Objekts das folgende Manifest alsexample-pvc.yaml
:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: example-pvc spec: storageClassName: standard-rwo accessModes: - ReadWriteOnce resources: requests: storage: 1Gi
Für
spec.storageClassName
können Sie jede Speicherklasse angeben, die einen unterstützten CSI-Treiber verwendet. In diesem Beispiel wird die Standardspeicherklassestandard-rwo
verwendet.Wenden Sie das Manifest an:
kubectl apply -f example-pvc.yaml
Erstellen Sie einen Pod, der das aktuelle Datum und die aktuelle Uhrzeit in das Volume schreibt. Speichern Sie zum Erstellen eines Pods das folgende Manifest als
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-pvc
Wenden Sie das Manifest an:
kubectl apply -f snapshot-shell.yaml
Prüfen Sie den Pod-Status:
kubectl get pod snapshot-shell
Es kann einige Zeit dauern, bis der Pod abschließend ausgeführt wurde. Sie können den vorherigen Befehl so lange ausführen, bis eine Ausgabe wie diese angezeigt wird:
NAME READY STATUS RESTARTS AGE snapshot-shell 0/1 Completed 0 24s
VolumeSnapshot erstellen
Ein VolumeSnapshot
-Objekt ist eine Anfrage für einen Snapshot eines vorhandenen PersistentVolumeClaim
-Objekts. Wenn Sie ein VolumeSnapshot
-Objekt erstellen, erstellt der Cluster automatisch ein VolumeSnapshotContent
-Objekt, das wie ein PersistentVolume
-Objekt eine Ressource in Ihrem Cluster ist, und bindet es an dieses.
Speichern Sie das folgende Manifest als
volumesnapshot.yaml
.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: example-snapshot spec: source: persistentVolumeClaimName: example-pvc
Wenden Sie das Manifest an:
kubectl apply -f volumesnapshot.yaml
Nachdem Sie einen Volume-Snapshot erstellt haben, erstellt der Cluster ein entsprechendes
VolumeSnapshotContent
-Objekt. Dieses Objekt speichert den Snapshot und die Bindungen vonVolumeSnapshot
-Objekten. Sie interagieren nicht direkt mitVolumeSnapshotContents
-Objekten.Prüfen Sie, ob der Cluster das Objekt
VolumeSnapshotContents
erstellt hat:kubectl get volumesnapshotcontents
Die Ausgabe sieht in etwa so aus:
NAME AGE snapcontent-cee5fb1f-5427-11ea-a53c-42010a1000da 55s
Prüfen, ob der Volume-Snapshot bereit ist
Nachdem der Inhalt des Volume-Snapshots erstellt wurde, erstellt der CSI-Treiber, den Sie in VolumeSnapshotClass
angegeben haben, einen Snapshot im entsprechenden Speichersystem. Nachdem der Cluster einen Snapshot im Speichersystem erstellt und an ein VolumeSnapshot
-Objekt gebunden hat, kann der Snapshot verwendet werden. Sie können den Status prüfen, indem Sie den folgenden Befehl ausführen:
kubectl get volumesnapshot \
-o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
Wenn der Snapshot einsatzbereit ist, sieht die Ausgabe in etwa so aus:
NAME READY
example-snapshot true
Volume-Snapshot wiederherstellen
Sie können auf einen VolumeSnapshot
in einem PersistentVolumeClaim
verweisen, um ein neues Volume mit Daten aus einem vorhandenen Volume bereitzustellen oder ein Volume in einem Zustand wiederherzustellen, den Sie im Snapshot erfasst haben.
Um auf einen VolumeSnapshot
in einem PersistentVolumeClaim
zu verweisen, fügen Sie das Feld dataSource
zu Ihrem PersistentVolumeClaim
hinzu.
In diesem Beispiel verweisen Sie auf den VolumeSnapshot
, den Sie in einem neuen PersistentVolumeClaim
erstellt haben, und erstellen einen Pod, der die PersistentVolumeClaim
bereitstellt.
Speichern Sie das folgende Manifest als
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: 1Gi
Wenden Sie das Manifest an:
kubectl apply -f pvc-restore.yaml
Starten Sie einen temporären Pod, der den PVC im Pod bereitstellt und den Inhalt von
out.txt
in Logs ausgibt.Speichern Sie das folgende Manifest als
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: Never
Wenden Sie das Manifest an:
kubectl apply -f restore-log.yaml
Auf erfolgreiche Wiederherstellung des Snapshots prüfen
Der im vorherigen Schritt erstellte Pod liest aus dem Snapshot. Verwenden Sie den Befehl kubectl logs
, um die Daten aus dem Snapshot aufzurufen.
kubectl logs restore-verify
Die Ausgabe sollte einen Zeitstempel aus dem Snapshot enthalten.
Bereinigen
So vermeiden Sie, dass Ihnen die auf dieser Seite verwendeten Ressourcen in Rechnung gestellt werden:
Löschen Sie das
VolumeSnapshot
:kubectl delete volumesnapshot example-snapshot
Löschen Sie den temporären Pod:
kubectl delete -f restore-log.yaml
Löschen Sie den Pod:
kubectl delete -f snapshot-shell.yaml
PersistentVolumeClaim
-Objekte löschen:kubectl delete pvc example-pvc pvc-restore
Nächste Schritte
- Dokumentation zum Kubernetes-VolumeSnapshot lesen.
- Zusätzliche CSI-Treiber installieren.