Auf dieser Seite erfahren Sie, wie Sie Filestore-Speicher mithilfe von Kubernetes-Volume-Snapshots sichern und wiederherstellen.
Das Erstellen eines Kubernetes-Volume-Snapshots entspricht dem Erstellen einer Filestore-Sicherung. Weitere Informationen finden Sie unter Kubernetes-Volume-Snapshots.
Voraussetzungen
Zur Verwendung von Volume-Snapshots in GKE müssen Sie die folgenden Anforderungen erfüllen:
Sie müssen den Filestore-CSI-Treiber bereitstellen. Nur die folgenden Filestore-Dienststufen werden unterstützt:
- Basic HDD mit GKE-Version 1.21 oder höher
- Basic HDD (100 GiB bis 63,9 TiB) mit GKE-Version 1.33 oder höher
- Basic SSD mit GKE-Version 1.21 oder höher
- Zonal (1 TiB bis 9,75 TiB) mit GKE-Version 1.31 oder höher
- Zonal (10 TiB bis 100 TiB) mit GKE-Version 1.27 oder höher
- Regional mit GKE-Version 1.33.4-gke.1172000 oder höher
- Enterprise mit GKE-Version 1.25 oder höher
Verwenden Sie die Version 1.17 oder höher der Steuerungsebene. Zur Verwendung des Filestore-CSI-Treibers in einem
VolumeSnapshotverwenden Sie die GKE-Version, die für Ihre Dienststufe gilt.
- 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 Abschnittcsimitdriver: pd.csi.storage.gke.iooderfilestore.csi.storage.gke.ioenthält. Wenn dasPersistentVolumevom CSI-Treiber dynamisch bereitgestellt wird, wie in den folgenden Abschnitten beschrieben, wird es vom CSI-Treiber verwaltet.
Beschränkungen
Für Snapshot-Volumes gelten dieselben Größenbeschränkungen wie für reguläre Volumes. Beispielsweise müssen Filestore-Snapshots größer oder gleich 1 TiB für die Stufe „Basic HDD“ sein.
Der Filestore-CSI-Treiber unterstützt keine dynamischen Bereitstellungs- oder Sicherungsworkflows für die Regional Filestore-Dienststufe:
Sie können jeweils nur eine Freigabe pro Instanz gleichzeitig sichern. Das bedeutet, dass Sie keine Sicherung mit mehreren Freigaben erstellen und keine Sicherung in einer Instanz mit mehreren Freigaben wiederherstellen können. Sicherungsanfragen von zwei verschiedenen Freigaben auf zwei verschiedenen Filestore-Instanzen werden jedoch gleichzeitig ausgeführt.
Sie können eine Sicherung einer Basic-Instanz in der Quellinstanz derselben Dienststufe, in einer bereits vorhandenen Instanz oder in einer neuen Instanz wiederherstellen. Wenn Sie eine neue Instanz auswählen, können Sie unabhängig von der Stufe der Quellinstanz zwischen einer einfachen HDD- und einer einfachen SSD-Instanz wählen.
Sie können zonale, regionale und Enterprise-Instanzen nicht in einer Quell- oder vorhandenen Instanz wiederherstellen, sondern nur in einer neuen Instanz. Die Dienststufe der neuen Instanz muss nicht mit der Dienststufe der Quellinstanz übereinstimmen. Sie können beispielsweise eine Sicherung einer regionalen Instanz in einer zonalen Instanz wiederherstellen. Die bereitgestellte Kapazität der neuen Instanz muss mindestens der bereitgestellten Kapazität der Quellinstanz entsprechen.
Eine vollständige Liste der Feature-Einschränkungen finden Sie unter Einschränkungen für Filestore-Sicherungsfunktionen.
Hinweise
Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:
- Aktivieren Sie die Google Kubernetes Engine API. Google Kubernetes Engine API aktivieren
- Wenn Sie die Google Cloud CLI für diesen Task verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit dem Befehl
gcloud components updateab. In früheren gcloud CLI-Versionen werden die Befehle in diesem Dokument möglicherweise nicht unterstützt.
Volume-Snapshot erstellen und verwenden
Die Beispiele in diesem Dokument beschreiben die Ausführung der folgenden Aufgaben:
- Eine
PersistentVolumeClaimund einDeploymenterstellen. - Dem
PersistentVolumeeine Datei hinzufügen, die vomDeploymentverwendet wird. - Ein
VolumeSnapshotClasserstellen, um den Snapshot zu konfigurieren - Einen Volume-Snapshot vom
PersistentVolumeerstellen - Die Testdatei löschen
- Stellen Sie
PersistentVolumeauf den von Ihnen erstellten Snapshot wieder her. - Prüfen, ob die Wiederherstellung funktioniert hat
So verwenden Sie einen Volume-Snapshot:
- Erstellen Sie ein
VolumeSnapshotClass-Objekt, um die CSI-Treiber- und Löschrichtlinie für Ihren Snapshot anzugeben. - Erstellen Sie ein
VolumeSnapshot-Objekt, um einen Snapshot eines vorhandenenPersistentVolumeClaimanzufragen. - Verweisen Sie auf den
VolumeSnapshotin einerPersistentVolumeClaim, um ein Volume anhand dieses Snapshots wiederherzustellen, oder erstellen Sie ein neues Volume mithilfe dieses Snapshots.
PersistentVolumeClaim und Deployment erstellen
Speichern Sie zum Erstellen des
PersistentVolumeClaim-Objekts das folgende Manifest alsmy-pvc.yaml:Filestore
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: storageClassName: enterprise-rwx accessModes: - ReadWriteMany resources: requests: storage: 1TiIn diesem Beispiel wird ein PVC für Filestore der Enterprise-Stufe erstellt. Weitere Informationen finden Sie unter Mit dem CSI-Treiber von Filestore auf Filestore-Instanzen zugreifen.
Für
spec.storageClassNamekönnen Sie jede Speicherklasse angeben, die einen unterstützten CSI-Treiber verwendet.Wenden Sie das Manifest an:
kubectl apply -f my-pvc.yamlSpeichern Sie zum Erstellen eines
Deploymentdas folgende Manifest alsmy-deployment.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: hello-app 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: sdk-volume mountPath: /usr/share/hello/ volumes: - name: sdk-volume persistentVolumeClaim: claimName: my-pvcWenden Sie das Manifest an:
kubectl apply -f my-deployment.yamlPrüfen Sie den Status des
Deployment:kubectl get deployment hello-appEs kann einige Zeit dauern, bis das
Deploymentbereit ist. Sie können den vorherigen Befehl so lange ausführen, bis eine Ausgabe wie diese angezeigt wird:NAME READY UP-TO-DATE AVAILABLE AGE hello-app 1/1 1 1 2m55s
Testdatei zum Volume hinzufügen
Listen Sie die
PodsimDeploymentauf:kubectl get pods -l app=hello-appDie Ausgabe sieht in etwa so aus:
NAME READY STATUS RESTARTS AGE hello-app-6d7b457c7d-vl4jr 1/1 Running 0 2m56sErstellen Sie in einem
Podeine Testdatei:kubectl exec POD_NAME \ -- sh -c 'echo "Hello World!" > /usr/share/hello/hello.txt'Ersetzen Sie
POD_NAMEdurch den Namen desPod.Prüfen Sie, ob die Datei vorhanden ist:
kubectl exec POD_NAME \ -- sh -c 'cat /usr/share/hello/hello.txt'Die Ausgabe sieht in etwa so aus:
Hello World!
Erstellen Sie ein VolumeSnapshotClass-Objekt
Erstellen Sie ein VolumeSnapshotClass-Objekt, um den CSI-Treiber und die deletionPolicy für Ihren Volume-Snapshot anzugeben. Sie können auf VolumeSnapshotClass-Objekte verweisen, wenn Sie VolumeSnapshot-Objekte erstellen.
Speichern Sie das folgende Manifest als
volumesnapshotclass.yaml.Filestore
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: my-snapshotclass driver: filestore.csi.storage.gke.io parameters: type: backup deletionPolicy: DeleteIn diesem Fall gilt Folgendes:
- Das Feld
driverwird vom CSI-Treiber zum Bereitstellen des Snapshots verwendet. In diesem Beispiel verwendetfilestore.csi.storage.gke.ioden Filestore-CSI-Treiber. - Das Feld
deletionPolicyteilt GKE mit, was mit demVolumeSnapshotContent-Objekt und dem zugrunde liegenden Snapshot geschieht, wenn das gebundeneVolumeSnapshot-Objekt gelöscht wird. Geben SieDeletean, um dasVolumeSnapshotContent-Objekt und den zugrunde liegenden Snapshot zu löschen. Geben SieRetainan, wenn SieVolumeSnapshotContentund den zugrunde liegenden Snapshot beibehalten möchten.
- Das Feld
Wenden Sie das Manifest an:
kubectl apply -f volumesnapshotclass.yaml
VolumeSnapshot erstellen
Ein VolumeSnapshot-Objekt ist eine Anfrage für einen Snapshot eines vorhandenen PersistentVolumeClaim-Objekts. Wenn Sie ein VolumeSnapshot-Objekt erstellen, erstellt GKE 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: my-snapshot spec: volumeSnapshotClassName: my-snapshotclass source: persistentVolumeClaimName: my-pvcWenden Sie das Manifest an:
kubectl apply -f volumesnapshot.yamlNachdem Sie einen
Volumeerstellt haben, erstellt GKE ein entsprechendesVolumeSnapshotContent-Objekt im Cluster. Dieses Objekt speichert den Snapshot und die Bindungen vonVolumeSnapshot-Objekten. Sie interagieren nicht direkt mitVolumeSnapshotContents-Objekten.Prüfen Sie, ob GKE das
VolumeSnapshotContents-Objekt erstellt hat:kubectl get volumesnapshotcontentsDie Ausgabe sieht in etwa so aus:
NAME AGE snapcontent-cee5fb1f-5427-11ea-a53c-42010a1000da 55s
Nachdem der Inhalt des Volume-Snapshots erstellt wurde, erstellt der CSI-Treiber, den Sie in VolumeSnapshotClass angegeben haben, einen Snapshot im entsprechenden Speichersystem. Nachdem GKE einen Snapshot im Speichersystem erstellt und mit einem VolumeSnapshot-Objekt im Cluster verknüpft 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
my-snapshot true
Die Testdatei löschen
Löschen Sie die erstellte Testdatei:
kubectl exec POD_NAME \ -- sh -c 'rm /usr/share/hello/hello.txt'Prüfen Sie, ob die Datei nicht mehr existiert:
kubectl exec POD_NAME \ -- sh -c 'cat /usr/share/hello/hello.txt'Die Ausgabe sieht in etwa so aus:
cat: /usr/share/hello/hello.txt: No such file or directory
Volume-Snapshot wiederherstellen
Sie können auf einen VolumeSnapshot in einem PersistentVolumeClaim verweisen, um ein neues Volume mit Daten aus einem vorhandenen Volume bereitzustellen.
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 einer neuen PersistentVolumeClaim erstellt haben, und aktualisieren das Deployment zur Verwendung der neuen Anforderung.
Speichern Sie das folgende Manifest als
pvc-restore.yaml:Filestore
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-restore spec: dataSource: name: my-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io storageClassName: enterprise-rwx accessModes: - ReadWriteMany resources: requests: storage: 1TiWenden Sie das Manifest an:
kubectl apply -f pvc-restore.yamlAktualisieren Sie die Datei
my-deployment.yaml, um die neuePersistentVolumeClaimzu verwenden:... volumes: - name: my-volume persistentVolumeClaim: claimName: pvc-restoreWenden Sie das aktualisierte Manifest an:
kubectl apply -f my-deployment.yaml
Auf erfolgreiche Wiederherstellung des Snapshots prüfen
Rufen Sie den Namen des neuen
Podab, den GKE für das aktualisierteDeploymenterstellt:kubectl get pods -l app=hello-app
Prüfen Sie, ob die Testdatei vorhanden ist:
kubectl exec NEW_POD_NAME \
-- sh -c 'cat /usr/share/hello/hello.txt'
Ersetzen Sie NEW_POD_NAME durch den Namen des neuen Pod, der von GKE erstellt wurde.
Die Ausgabe sieht in etwa so aus:
Hello World!
Vorhandenen Snapshot importieren
Sie können einen vorhandenen Volume-Snapshot verwenden, der außerhalb des aktuellen Clusters erstellt wurde, um das VolumeSnapshotContents-Objekt manuell bereitzustellen. Sie können beispielsweise ein Volume in GKE mit einem Snapshot einer anderenCloud de Confiance -Ressource füllen, die in einem anderen Cluster erstellt wurde.
Suchen Sie den Namen Ihres Snapshots.
Cloud de Confiance Console
Google Cloud CLI
Führen Sie dazu diesen Befehl aus:
gcloud compute snapshots listDie Ausgabe sieht in etwa so aus:
NAME DISK_SIZE_GB SRC_DISK STATUS snapshot-5e6af474-cbcc-49ed-b53f-32262959a0a0 1 us-central1-b/disks/pvc-69f80fca-bb06-4519-9e7d-b26f45c1f4aa READYSpeichern Sie das folgende
VolumeSnapshot-Manifest alsrestored-snapshot.yaml.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: restored-snapshot spec: volumeSnapshotClassName: my-snapshotclass source: volumeSnapshotContentName: restored-snapshot-contentWenden Sie das Manifest an:
kubectl apply -f restored-snapshot.yamlSpeichern Sie das folgende
VolumeSnapshotContent-Manifest alsrestored-snapshot-content.yaml. Ersetzen Sie das FeldsnapshotHandledurch Ihre Projekt-ID und den Snapshot-Namen. SowohlvolumeSnapshotRef.nameals auchvolumeSnapshotRef.namespacemüssen auf den zuvor erstelltenVolumeSnapshotverweisen, damit die bidirektionale Bindung gültig ist.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotContent metadata: name: restored-snapshot-content spec: deletionPolicy: Retain driver: filestore.csi.storage.gke.io source: snapshotHandle: projects/PROJECT_ID/global/snapshots/SNAPSHOT_NAME volumeSnapshotRef: kind: VolumeSnapshot name: restored-snapshot namespace: defaultWenden Sie das Manifest an:
kubectl apply -f restored-snapshot-content.yamlSpeichern Sie das folgende
PersistentVolumeClaim-Manifest alsrestored-pvc.yaml. Der Kubernetes-Speichercontroller sucht nach einemVolumeSnapshotmit dem Namenrestored-snapshotund versucht dann, einPersistentVolumeals Datenquelle zu finden oder dynamisch zu erstellen. Sie können diesen PVC dann in einem Pod verwenden, um auf die wiederhergestellten Daten zuzugreifen.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: restored-pvc spec: dataSource: name: restored-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io storageClassName: enterprise-rwx accessModes: - ReadWriteOnce resources: requests: storage: 1GiWenden Sie das Manifest an:
kubectl apply -f restored-pvc.yamlSpeichern Sie das folgende
Pod-Manifest alsrestored-pod.yamlund verweisen Sie dabei auf denPersistentVolumeClaim. Der CSI-Treiber stellt einPersistentVolumebereit und füllt es aus dem Snapshot aus.apiVersion: v1 kind: Pod metadata: name: restored-pod spec: containers: - name: busybox image: busybox args: - sleep - "3600" volumeMounts: - name: source-data mountPath: /demo/data volumes: - name: source-data persistentVolumeClaim: claimName: restored-pvc readOnly: falseWenden Sie das Manifest an:
kubectl apply -f restored-pod.yamlPrüfen Sie, ob die Datei wiederhergestellt wurde:
kubectl exec restored-pod -- sh -c 'cat /demo/data/hello.txt'
Bereinigen
Mit den folgenden Schritten vermeiden Sie, dass Ihrem Cloud de Confiance by S3NS -Konto die auf dieser Seite verwendeten Ressourcen in Rechnung gestellt werden:
Löschen Sie das
VolumeSnapshot:kubectl delete volumesnapshot my-snapshotLöschen Sie das
VolumeSnapshotClass:kubectl delete volumesnapshotclass my-snapshotclassLöschen Sie das
Deployment:kubectl delete deployments hello-appPersistentVolumeClaim-Objekte löschen:kubectl delete pvc my-pvc pvc-restore
Nächste Schritte
- Dokumentation zum Kubernetes-VolumeSnapshot lesen
- Weitere Informationen zur Volume-Erweiterung
- CSI-Treiber manuell installieren
- Filestore als Dateispeicheroption für GKE