Skip to main content
Eine neuere Version dieses Produkts ist erhältlich.
Die deutsche Sprachversion wurde als Serviceleistung für Sie durch maschinelle Übersetzung erstellt. Bei eventuellen Unstimmigkeiten hat die englische Sprachversion Vorrang.

Mit Snapshots arbeiten

Änderungen vorschlagen

Kubernetes-Volume-Snapshots von Persistent Volumes (PVs) ermöglichen zeitpunktgenaue Kopien von Volumes. Sie können einen Snapshot eines mit Trident erstellten Volumes erstellen, einen außerhalb von Trident erstellten Snapshot importieren, ein neues Volume aus einem vorhandenen Snapshot erstellen und Volume-Daten aus Snapshots wiederherstellen.

Überblick

Volume-Snapshot wird von ontap-nas, ontap-nas-flexgroup, ontap-san, ontap-san-economy, solidfire-san, azure-netapp-files und google-cloud-netapp-volumes Treibern unterstützt.

Bevor Sie beginnen

Sie benötigen einen externen Snapshot-Controller und benutzerdefinierte Ressourcendefinitionen (CRDs), um mit Snapshots zu arbeiten. Dies ist die Aufgabe des Kubernetes-Orchestrators (zum Beispiel: Kubeadm, GKE, OpenShift).

Falls Ihre Kubernetes-Distribution den Snapshot-Controller und die CRDs nicht enthält, lesen Sie Einen Volume Snapshot Controller bereitstellen.

Hinweis Erstellen Sie keinen Snapshot-Controller, wenn Sie in einer GKE-Umgebung bedarfsgesteuerte Volume-Snapshots erstellen. GKE verwendet einen integrierten, versteckten Snapshot-Controller.

Erstellen Sie einen Volume-Snapshot

Schritte
  1. Erstellen Sie ein VolumeSnapshotClass. Weitere Informationen finden Sie unter "VolumeSnapshotClass".

    • Der driver verweist auf den Trident CSI driver.

    • deletionPolicy kann Delete oder Retain sein. Wenn auf Retain gesetzt, bleibt der zugrunde liegende physische Snapshot auf dem Speichercluster auch dann erhalten, wenn das VolumeSnapshot Objekt gelöscht wird.

      Beispiel
      cat snap-sc.yaml
      apiVersion: snapshot.storage.k8s.io/v1
      kind: VolumeSnapshotClass
      metadata:
        name: csi-snapclass
      driver: csi.trident.netapp.io
      deletionPolicy: Delete
  2. Erstellen Sie einen Snapshot eines bestehenden PVC.

    Beispiele
    • Dieses Beispiel erstellt eine Snapshot eines bestehenden PVC.

      cat snap.yaml
      apiVersion: snapshot.storage.k8s.io/v1
      kind: VolumeSnapshot
      metadata:
        name: pvc1-snap
      spec:
        volumeSnapshotClassName: csi-snapclass
        source:
          persistentVolumeClaimName: pvc1
    • Dieses Beispiel erstellt ein Volume-Snapshot-Objekt für eine PVC mit dem Namen pvc1 und der Name des Snapshots wird auf pvc1-snap gesetzt. Ein VolumeSnapshot ist analog zu einer PVC und ist mit einem VolumeSnapshotContent Objekt verknüpft, das den eigentlichen Snapshot darstellt.

      kubectl create -f snap.yaml
      volumesnapshot.snapshot.storage.k8s.io/pvc1-snap created
      
      kubectl get volumesnapshots
      NAME                   AGE
      pvc1-snap              50s
    • Sie können das VolumeSnapshotContent Objekt für das pvc1-snap VolumeSnapshot identifizieren, indem Sie es beschreiben. Das Snapshot Content Name identifiziert das VolumeSnapshotContent Objekt, das diesem Snapshot dient. Der Ready To Use Parameter zeigt an, dass der Snapshot zur Erstellung eines neuen PVC verwendet werden kann.

      kubectl describe volumesnapshots pvc1-snap
      Name:         pvc1-snap
      Namespace:    default
      ...
      Spec:
        Snapshot Class Name:    pvc1-snap
        Snapshot Content Name:  snapcontent-e8d8a0ca-9826-11e9-9807-525400f3f660
        Source:
          API Group:
          Kind:       PersistentVolumeClaim
          Name:       pvc1
      Status:
        Creation Time:  2019-06-26T15:27:29Z
        Ready To Use:   true
        Restore Size:   3Gi
      ...

Erstellen Sie eine PVC aus einem Volume-Snapshot

Sie können dataSource verwenden, um eine PVC mithilfe eines VolumeSnapshot mit dem Namen <pvc-name> als Datenquelle zu erstellen. Nachdem die PVC erstellt wurde, kann sie einem Pod zugeordnet und wie jede andere PVC verwendet werden.

Im folgenden Beispiel wird die PVC unter Verwendung von pvc1-snap als Datenquelle erstellt.

cat pvc-from-snap.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-from-snap
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: golden
  resources:
    requests:
      storage: 3Gi
  dataSource:
    name: pvc1-snap
    kind: VolumeSnapshot
    apiGroup: snapshot.storage.k8s.io

Importieren eines Volume-Snapshots

Trident unterstützt die "Kubernetes pre-provisioned Snapshot-Prozess", damit der Cluster-Administrator ein VolumeSnapshotContent-Objekt erstellen und außerhalb von Trident erstellte Snapshots importieren kann.

Bevor Sie beginnen

Trident muss das übergeordnete Volume des Snapshots erstellt oder importiert haben.

Schritte
  1. Cluster-Administrator: Erstellen Sie ein VolumeSnapshotContent Objekt, das auf den Backend-Snapshot verweist. Dadurch wird der Snapshot-Workflow in Trident gestartet.

    • Geben Sie den Namen des Backend-Snapshots in annotations als trident.netapp.io/internalSnapshotName: <"backend-snapshot-name"> an.

    • Geben Sie <name-of-parent-volume-in-trident>/<volume-snapshot-content-name> in snapshotHandle an. Dies ist die einzige Information, die Trident vom externen Snapshotter im ListSnapshots-Aufruf bereitgestellt wird.

      Hinweis Der <volumeSnapshotContentName> kann aufgrund von Namensbeschränkungen der CRs nicht immer mit dem Backend-Snapshot-Namen übereinstimmen.
      Beispiel

      Das folgende Beispiel erstellt ein VolumeSnapshotContent Objekt, das auf einen Backend-Snapshot snap-01 verweist.

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotContent
    metadata:
      name: import-snap-content
      annotations:
        trident.netapp.io/internalSnapshotName: "snap-01"  # This is the name of the snapshot on the backend
    spec:
      deletionPolicy: Retain
      driver: csi.trident.netapp.io
      source:
        snapshotHandle: pvc-f71223b5-23b9-4235-bbfe-e269ac7b84b0/import-snap-content # <import PV name or source PV name>/<volume-snapshot-content-name>
      volumeSnapshotRef:
        name: import-snap
        namespace: default
  2. Cluster-Administrator: Erstellen Sie das VolumeSnapshot CR, das auf das VolumeSnapshotContent Objekt verweist. Dadurch wird der Zugriff auf die Verwendung des VolumeSnapshot in einem bestimmten Namespace angefordert.

    Beispiel

    Das folgende Beispiel erstellt ein VolumeSnapshot CR mit dem Namen import-snap, das auf das VolumeSnapshotContent mit dem Namen import-snap-content verweist.

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: import-snap
    spec:
      # volumeSnapshotClassName: csi-snapclass (not required for pre-provisioned or imported snapshots)
      source:
        volumeSnapshotContentName: import-snap-content
  3. Interne Verarbeitung (keine Aktion erforderlich): Der externe Snapshotter erkennt den neu erstellten VolumeSnapshotContent und führt den ListSnapshots-Aufruf aus. Trident erstellt das TridentSnapshot.

    • Der externe Snapshotter setzt das VolumeSnapshotContent auf readyToUse und das VolumeSnapshot auf true.

    • Trident kehrt zurück readyToUse=true.

  4. Beliebiger Benutzer: Erstellen Sie ein PersistentVolumeClaim, um auf das neue VolumeSnapshot zu verweisen, wobei der spec.dataSource (oder spec.dataSourceRef) Name der VolumeSnapshot Name ist.

    Beispiel

    Das folgende Beispiel erstellt eine PVC, die auf die VolumeSnapshot mit dem Namen import-snap verweist.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-from-snap
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: simple-sc
      resources:
        requests:
          storage: 1Gi
      dataSource:
        name: import-snap
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io

Stellen Sie Volumendaten mithilfe von Snapshots wieder her

Das Snapshot-Verzeichnis ist standardmäßig ausgeblendet, um maximale Kompatibilität von Volumes zu gewährleisten, die mit den ontap-nas und `ontap-nas-economy`Treibern bereitgestellt wurden. Aktivieren Sie das `.snapshot`Verzeichnis, um Daten direkt aus Snapshots wiederherzustellen.

Verwenden Sie die ONTAP CLI volume snapshot restore, um ein Volume auf einen Zustand wiederherzustellen, der in einem früheren Snapshot aufgezeichnet wurde.

cluster1::*> volume snapshot restore -vserver vs0 -volume vol3 -snapshot vol3_snap_archive
Hinweis Beim Wiederherstellen einer Snapshot-Kopie wird die bestehende Volume-Konfiguration überschrieben. Änderungen an den Volume-Daten, die nach der Erstellung der Snapshot-Kopie vorgenommen wurden, gehen verloren.

In-Place-Volume-Wiederherstellung aus einem Snapshot

Trident ermöglicht die schnelle, direkte Wiederherstellung von Volumes aus einem Snapshot mithilfe des TridentActionSnapshotRestore (TASR) CR. Dieser CR fungiert als imperative Kubernetes-Aktion und bleibt nach Abschluss des Vorgangs nicht erhalten.

Trident unterstützt die Snapshot-Wiederherstellung auf den ontap-san, ontap-san-economy, ontap-nas, ontap-nas-flexgroup, azure-netapp-files, google-cloud-netapp-volumes und solidfire-san-Treibern.

Bevor Sie beginnen

Sie müssen ein gebundenes PVC und einen verfügbaren Volume Snapshot haben.

  • Überprüfen Sie, ob der PVC-Status gebunden ist.

    kubectl get pvc
  • Prüfen Sie, ob der Volume-Snapshot einsatzbereit ist.

    kubectl get vs
Schritte
  1. Erstellen Sie den TASR CR. Dieses Beispiel erstellt einen CR für PVC pvc1 und Volume Snapshot pvc1-snapshot.

    Hinweis Der TASR CR muss sich in einem Namespace befinden, in dem der PVC und der VS existieren.
    cat tasr-pvc1-snapshot.yaml
    apiVersion: trident.netapp.io/v1
    kind: TridentActionSnapshotRestore
    metadata:
      name: trident-snap
      namespace: trident
    spec:
      pvcName: pvc1
      volumeSnapshotName: pvc1-snapshot
  2. Wenden Sie die CR an, um aus dem Snapshot wiederherzustellen. Dieses Beispiel stellt aus dem Snapshot pvc1 wieder her.

    kubectl create -f tasr-pvc1-snapshot.yaml
    tridentactionsnapshotrestore.trident.netapp.io/trident-snap created
Ergebnisse

Trident stellt die Daten aus dem Snapshot wieder her. Sie können den Status der Snapshot-Wiederherstellung überprüfen:

kubectl get tasr -o yaml
apiVersion: trident.netapp.io/v1
items:
- apiVersion: trident.netapp.io/v1
  kind: TridentActionSnapshotRestore
  metadata:
    creationTimestamp: "2023-04-14T00:20:33Z"
    generation: 3
    name: trident-snap
    namespace: trident
    resourceVersion: "3453847"
    uid: <uid>
  spec:
    pvcName: pvc1
    volumeSnapshotName: pvc1-snapshot
  status:
    startTime: "2023-04-14T00:20:34Z"
    completionTime: "2023-04-14T00:20:37Z"
    state: Succeeded
kind: List
metadata:
  resourceVersion: ""
Hinweis
  • In den meisten Fällen wird Trident den Vorgang bei einem Fehler nicht automatisch wiederholen. Sie müssen den Vorgang erneut ausführen.

  • Kubernetes-Benutzer ohne Administratorrechte müssen möglicherweise vom Administrator die Berechtigung erhalten, einen TASR CR in ihrem Anwendungs-Namespace zu erstellen.

Löschen eines PV mit zugehörigen Snapshots

Beim Löschen eines Persistent Volume mit zugehörigen Snapshots wird das entsprechende Trident volume in den Status „Deleting state“ versetzt. Entfernen Sie die Volume-Snapshots, um das Trident volume zu löschen.

Einen Volume Snapshot Controller bereitstellen

Falls Ihre Kubernetes-Distribution den Snapshot-Controller und die CRDs nicht enthält, können Sie sie wie folgt bereitstellen.

Schritte
  1. Erstellen Sie Volume Snapshot-CRDs.

    cat snapshot-setup.sh
    #!/bin/bash
    # Create volume snapshot CRDs
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml
  2. Erstellen Sie den Snapshot Controller.

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml
    Hinweis Öffnen Sie bei Bedarf deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml und aktualisieren Sie namespace auf Ihren Namespace.