Sie können einen Snapshot dynamisch bereitstellen oder einen vorab bereitgestellten Volume-Snapshot eines Block-Volumes in einem vSphere with Tanzu-TKG-Cluster erstellen. Sie können auch einen vorhandenen Snapshot wiederherstellen.

Hinweis: Sie sollten keine Volume-Snapshot-Klassen erstellen und diese zum Erstellen von Volume-Snapshots verwenden. Verwenden Sie nur eine bereits vorhandene Volume-Snapshot-Klasse. Bereits vorhandene Volume-Snapshot-Klassen unterstützen nur die deletionPolicy „Delete“ (Löschen). Das Erstellen von Volume-Snapshot-Klassen, bei denen deletionPolicy auf „Retain“ (Beibehalten) festgelegt ist, wird nicht unterstützt.

Erstellen eines dynamisch bereitgestellten Snapshots in einem TKG-Cluster

Dynamisches Bereitstellen eines Snapshots in einem vSphere with Tanzu-TKG-Cluster.

Prozedur

  1. Stellen Sie sicher, dass die StorageClass vorhanden ist.
    $ kubectl get sc
    NAME                             PROVISIONER              RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    gc-storage-profile               csi.vsphere.vmware.com   Delete          Immediate              true                   11d
    gc-storage-profile-latebinding   csi.vsphere.vmware.com   Delete          WaitForFirstConsumer   true                   11d
    
  2. Erstellen Sie eine PVC mithilfe der StorageClass aus Schritt 1.
    Verwenden Sie die folgende YAML als Beispiel.
    $ cat example-pvc.yaml
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: example-raw-block-pvc
    spec:
      volumeMode: Block
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
      storageClassName: gc-storage-profile
    
    $ kubectl apply -f example-pvc.yaml
    $ kubectl get pvc
    NAME                    STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS         AGE
    example-raw-block-pvc   Bound    pvc-4c0c030d-25ac-4520-9a04-7aa9361dfcfc   1Gi        RWO            gc-storage-profile   2m1s
    
  3. Stellen Sie sicher, dass die VolumeSnapshotClass verfügbar ist.
    $ kubectl get volumesnapshotclass
    NAME                         DRIVER                   DELETIONPOLICY   AGE
    volumesnapshotclass-delete   csi.vsphere.vmware.com   Delete           11d
    
  4. Erstellen Sie einen VolumeSnapshot mithilfe der VolumeSnapshotClass, die Sie in Schritt 3 abgerufen haben.
    $cat example-snapshot.yaml
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: example-raw-block-snapshot
    spec:
      volumeSnapshotClassName: volumesnapshotclass-delete
      source:
        persistentVolumeClaimName: example-raw-block-pvc
    
    $ kubectl apply -f example-snapshot.yaml
    $ kubectl get volumesnapshot
    NAME                         READYTOUSE   SOURCEPVC               SOURCESNAPSHOTCONTENT   RESTORESIZE   SNAPSHOTCLASS                SNAPSHOTCONTENT
                                CREATIONTIME   AGE
    example-raw-block-snapshot   true         example-raw-block-pvc                           1Gi           volumesnapshotclass-delete   snapcontent-ae019c16-b07c-4a92-868b-029babd641d3   6s             6s
    
    

Erstellen eines vorab bereitgestellten Snapshots in einem TKG-Cluster

Erstellen Sie einen vorab bereitgestellten Volume-Snapshot eines beliebigen Block-Volumes (PVC) in einem TKG-Cluster. Verwenden Sie dazu einen Volume-Snapshot desselben Block-Volumes (PVC) aus dem Supervisor.

Führen Sie die folgenden Schritte aus, um einen Volume-Snapshot in einem neuen TKG-Cluster statisch zu erstellen, indem Sie die Informationen aus dem verbliebenen zugrunde liegenden Snapshot in Supervisor verwenden.

Hinweis: Volume-Snapshots können nicht direkt auf einem Supervisor erstellt werden.

Voraussetzungen

  • Machen Sie sich mit den Informationen zum Erstellen von Kubernetes-Snapshots vertraut. Weitere Informationen finden Sie auf der Seite zu Volume-Snapshots in der Kubernetes-Dokumentation.
  • Stellen Sie sicher, dass der Volume-Snapshot die folgenden Bedingungen erfüllt:
    • Der Volume-Snapshot befindet sich im selben Namespace, in dem sich die Quell-PVC befindet.
    • Der Volume-Snapshot befindet sich im selben Namespace, in dem sich der TKG-Cluster befindet.

Sie können auch einen Volume-Snapshot, der von einem anderen TKG-Cluster im selben Namespace nicht mehr benötigt wird, in einem neuen TKG-Cluster wiederverwenden. Ändern Sie dazu die deletionPolicy des VolumeSnapshotContent im ursprünglichen TKG-Cluster in Retain und löschen Sie dann die entsprechenden VolumeSnapshot- und VolumeSnapshotContent-Objekte.

Prozedur

  1. Notieren Sie sich den Namen des ursprünglichen VolumeSnapshot-Objekts im Supervisor.
    Wenn Sie den Volume-Snapshot aus einem alten TKG-Cluster wiederverwenden, können Sie auch den VolumeSnapshot-Namen aus Supervisor aus dem snapshotHandle des alten VolumeSnapshotContent-Objekts im alten TKG-Cluster abrufen.
  2. Erstellen Sie ein VolumeSnapshotContent-Objekt.
    Geben Sie in der YAML-Datei den Wert des folgenden Elements an:
    Geben Sie für snapshotHandle den VolumeSnapshot-Namen aus Supervisor ein, den Sie in Schritt 1 abgerufen haben.
    Hinweis: Hinweis: Wenn Sie einen Volume-Snapshot aus einem anderen TKG-Cluster wiederverwenden, löschen Sie die VolumeSnapshot- und VolumeSnapshotContent-Objekte aus dem alten TKG-Cluster (legen Sie dabei deletionPolicy zum Beibehalten auf „Retain“ fest), bevor Sie einen VolumeSnapshotContent im neuen TKG-Cluster erstellen.
    Verwenden Sie das folgende YAML-Manifest als Beispiel.
    --------
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotContent 
    metadata:
     name: static-tkg-block-snapshotcontent 
    spec:
     deletionPolicy: Delete
     driver: csi.vsphere.vmware.com
     source:
      snapshotHandle: "supervisor-block-volumeSnapshot-name" # Enter the VolumeSnapshot name from the Supervisor.
     volumeSnapshotRef:
      name: static-tkg-block-snapshot
      namespace: "supervisor-tkg-namespace" # Enter the namespace of Tanzu Kubernetes Grid Cluster.
    ---------
  3. Erstellen Sie einen VolumeSnapshot, der dem in Schritt 2 erstellten VolumeSnapshotContent-Objekt entspricht.
    ---------
    apiVersion: snapshot.storage.k8s.io/vl
    kind: VolumeSnapshot
    metadata:
     name: static-tkg-block-snapshot 
    spec: 
     source:
      volumeSnapshotContentName: static-tkg-block-snapshotcontent
    ---------
    
  4. Für den VolumeSnapshot, den Sie in Schritt 3 erstellt haben, muss ReadyToUse als „true“ markiert sein.
    kubecti getvolumesnapshot static-tkg-block-snapshot
    NAME	                   READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT            RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT	              CREATIONTIME AGE
    static-tkg-block-snapshot  true	             static-tkg-biock-snapshotcontent 5Gi	                   static-tkg-block-snapsnotcontent 76m	      22m
    

Wiederherstellen eines Volume-Snapshots in einem TKG-Cluster

Stellen Sie einen bereits erstellten Volume-Snapshot wieder her.

Prozedur

  1. Überprüfen Sie, ob der wiederherzustellende Volume-Snapshot im TKG-Cluster verfügbar ist.
    $ kubectl get volumesnapshot
    NAME                         READYTOUSE   SOURCEPVC               SOURCESNAPSHOTCONTENT   RESTORESIZE   SNAPSHOTCLASS                SNAPSHOTCONTENT                                    CREATIONTIME   AGE
    example-raw-block-snapshot   true         example-raw-block-pvc                           1Gi           volumesnapshotclass-delete   snapcontent-ae019c16-b07c-4a92-868b-029babd641d3   2m36s          2m36s
    
  2. Erstellen Sie eine PVC aus dem Volume-Snapshot.
    $ cat example-restore.yaml
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: example-raw-block-restore
    spec:
      storageClassName: gc-storage-profile
      dataSource:
        name: example-raw-block-snapshot
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io
      volumeMode: Block
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
    
    $ kubectl apply -f example-restore.yaml
    $ kubectl get pvc
    NAME                        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS         AGE
    example-raw-block-pvc       Bound    pvc-4c0c030d-25ac-4520-9a04-7aa9361dfcfc   1Gi        RWO            gc-storage-profile   11m
    example-raw-block-restore   Bound    pvc-96eaab16-9ec1-446a-9392-e86d13c9b2e2   1Gi        RWO            gc-storage-profile   2m8s