Skip to main content
Die deutsche Sprachversion wurde als Serviceleistung für Sie durch maschinelle Übersetzung erstellt. Bei eventuellen Unstimmigkeiten hat die englische Sprachversion Vorrang.

Arbeiten Sie mit Snapshots

Beitragende

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 unterstützt von ontap-nas , ontap-nas-flexgroup , ontap-san , ontap-san-economy , solidfire-san , gcp-cvs , azure-netapp-files , Und google-cloud-netapp-volumes Treiber.

Bevor Sie beginnen

Sie benötigen einen externen Snapshot-Controller und benutzerdefinierte Ressourcendefinitionen (CRDs), um mit Snapshots arbeiten zu können. Dies ist die Aufgabe des Kubernetes Orchestrator (z. B. Kubeadm, GKE, OpenShift).

Wenn die Kubernetes-Distribution den Snapshot-Controller und die CRDs nicht enthält, lesen Sie Stellen Sie einen Volume-Snapshot-Controller bereit.

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

Erstellen eines Volume-Snapshots

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

    • Der driver verweist auf den Trident-CSI-Treiber.

    • deletionPolicy Kann sein Delete Oder Retain. Wenn eingestellt auf Retain, Der zugrunde liegende physische Snapshot auf dem Storage-Cluster wird auch dann beibehalten, wenn der VolumeSnapshot Objekt wurde gelöscht.

      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 einer vorhandenen PVC.

    Beispiele
    • In diesem Beispiel wird ein Snapshot eines vorhandenen PVC erstellt.

      cat snap.yaml
      apiVersion: snapshot.storage.k8s.io/v1
      kind: VolumeSnapshot
      metadata:
        name: pvc1-snap
      spec:
        volumeSnapshotClassName: csi-snapclass
        source:
          persistentVolumeClaimName: pvc1
    • In diesem Beispiel wird ein Volume-Snapshot-Objekt für eine PVC mit dem Namen erstellt pvc1 Der Name des Snapshots lautet pvc1-snap. Ein VolumeSnapshot ist analog zu einem PVC und einem zugeordnet VolumeSnapshotContent Objekt, das den tatsächlichen 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 den identifizieren VolumeSnapshotContent Objekt für das pvc1-snap VolumeSnapshot wird beschrieben. Der Snapshot Content Name Identifiziert das VolumeSnapshotContent-Objekt, das diesen Snapshot bereitstellt. Der Ready To Use Parameter gibt an, dass der Snapshot zum Erstellen einer 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

Verwenden Sie können dataSource So erstellen Sie eine PVC mit einem VolumeSnapshot namens <pvc-name> Als Quelle der Daten. Nachdem die PVC erstellt wurde, kann sie an einem Pod befestigt und wie jedes andere PVC verwendet werden.

Im folgenden Beispiel wird die PVC mit erstellt pvc1-snap Als Datenquelle speichern.

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 Sie einen Volume-Snapshot

Trident unterstützt das, damit der "Vorab bereitgestellter Snapshot-Prozess von Kubernetes"Clusteradministrator ein Objekt erstellen und Snapshots importieren kann VolumeSnapshotContent, die außerhalb von Trident erstellt wurden.

Bevor Sie beginnen

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

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

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

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

      Hinweis Der <volumeSnapshotContentName> Aufgrund von Einschränkungen bei der CR-Benennung kann der Name des Back-End-Snapshots nicht immer übereinstimmen.
      Beispiel

      Im folgenden Beispiel wird ein erstellt VolumeSnapshotContent Objekt, das auf Back-End-Snapshot verweist snap-01.

    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 admin: Erstellen Sie das VolumeSnapshot CR, der auf den verweist VolumeSnapshotContent Objekt: Dadurch wird der Zugriff auf die Verwendung des angefordert VolumeSnapshot In einem bestimmten Namespace.

    Beispiel

    Im folgenden Beispiel wird ein erstellt VolumeSnapshot CR benannt import-snap Die auf die verweisen VolumeSnapshotContent Genannt import-snap-content.

    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 Schnapper erkennt das neu erstellte VolumeSnapshotContent und führt den ListSnapshots Aufruf aus. Trident erstellt die TridentSnapshot.

    • Der externe Schnapper legt den fest VolumeSnapshotContent Bis readyToUse Und das VolumeSnapshot Bis true.

    • Trident kehrt zurück readyToUse=true.

  4. Jeder Benutzer: Erstellen Sie eine PersistentVolumeClaim Um auf das neue zu verweisen VolumeSnapshot, Wo der spec.dataSource (Oder spec.dataSourceRef) Name ist der VolumeSnapshot Name:

    Beispiel

    Im folgenden Beispiel wird eine PVC erstellt, die auf den verweist VolumeSnapshot Genannt import-snap.

    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 Volume-Daten mithilfe von Snapshots wieder her

Das Snapshot-Verzeichnis ist standardmäßig ausgeblendet, um die maximale Kompatibilität von Volumes zu ermöglichen, die über bereitgestellt werden ontap-nas Und ontap-nas-economy Treiber. Aktivieren Sie die .snapshot Verzeichnis, um Daten von Snapshots direkt wiederherzustellen.

Verwenden Sie die ONTAP-CLI zur Wiederherstellung eines Volume-Snapshots, um einen in einem früheren Snapshot aufgezeichneten Zustand wiederherzustellen.

cluster1::*> volume snapshot restore -vserver vs0 -volume vol3 -snapshot vol3_snap_archive
Hinweis Wenn Sie eine Snapshot-Kopie wiederherstellen, wird die vorhandene Volume-Konfiguration überschrieben. Änderungen an den Volume-Daten nach der Erstellung der Snapshot Kopie gehen verloren.

In-Place-Volume-Wiederherstellung aus einem Snapshot

Trident ermöglicht mithilfe des CR-Systems (TASR) eine schnelle Wiederherstellung von in-Place-Volumes aus einem Snapshot TridentActionSnapshotRestore. Dieser CR fungiert als eine zwingend notwendige Kubernetes-Aktion und bleibt nach Abschluss des Vorgangs nicht erhalten.

Trident unterstützt die Wiederherstellung von Snapshots auf dem ontap-san, , ontap-san-economy ontap-nas ontap-nas-flexgroup azure-netapp-files , , , gcp-cvs, google-cloud-netapp-volumes und solidfire-san Fahrer.

Bevor Sie beginnen

Sie müssen über einen gebundenen PVC-Snapshot und einen verfügbaren Volume-Snapshot verfügen.

  • Vergewissern Sie sich, dass der PVC-Status gebunden ist.

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

    kubectl get vs
Schritte
  1. Erstellen Sie den TASR CR. In diesem Beispiel wird ein CR für PVC und Volume-Snapshot erstellt pvc1 pvc1-snapshot.

    Hinweis Der TASR CR muss sich in einem Namensraum befinden, in dem PVC und VS vorhanden sind.
    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 den CR an, um ihn aus dem Snapshot wiederherzustellen. Dieses Beispiel wird aus Snapshot wiederhergestellt pvc1.

    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 Wiederherstellungsstatus von Snapshots ü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 versucht Trident den Vorgang bei einem Ausfall nicht automatisch erneut. Sie müssen den Vorgang erneut ausführen.

  • Kubernetes-Benutzer ohne Administratorzugriff müssen möglicherweise vom Administrator zum Erstellen eines TASR CR in ihrem Applikations-Namespace erhalten.

Löschen Sie ein PV mit den zugehörigen Snapshots

Beim Löschen eines persistenten Volumes mit zugeordneten Snapshots wird das entsprechende Trident-Volume auf den „Löschstatus“ aktualisiert. Entfernen Sie die Volume-Snapshots, um das Trident-Volume zu löschen.

Stellen Sie einen Volume-Snapshot-Controller bereit

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

Schritte
  1. Erstellen von 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 Aktualisierung namespace In Ihren Namespace.