可以在 TKG 服务 集群中动态置备快照或创建块卷的预置备卷快照。您还可以还原现有快照。

注: 不应创建卷快照类并使用这些类创建卷快照。只能使用预先存在的卷快照类。预先存在的卷快照类仅支持 Delete deletionPolicy。不支持使用 Retain deletionPolicy 创建卷快照类。

TKG 服务 集群中创建动态置备的快照

可以在 TKG 服务 集群中动态置备快照。

过程

  1. 验证 StorageClass 是否存在。
    $ 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. 使用步骤 1 中的 StorageClass 创建 PVC。
    使用以下 YAML 作为示例。
    $ 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. 确认 VolumeSnapshotClass 可用。
    $ kubectl get volumesnapshotclass
    NAME                         DRIVER                   DELETIONPOLICY   AGE
    volumesnapshotclass-delete   csi.vsphere.vmware.com   Delete           11d
    
  4. 使用在步骤 3 中获取的 VolumeSnapshotClass 创建 VolumeSnapshot。
    $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
    
    

TKG 服务 集群中创建预置备的快照

使用 主管 中同一块卷 (PVC) 的卷快照,在 TKG 服务 集群中创建任何块卷 (PVC) 的预置备卷快照。

可以按照以下步骤,使用 主管 中剩余底层快照的信息在新的 TKG 集群中静态创建卷快照。

注: 无法直接在 主管 上创建卷快照。

前提条件

  • 熟悉有关创建 Kubernetes 快照的信息。有关详细信息,请参见 Kubernetes 文档中的卷快照页面。
  • 确保卷快照满足以下条件:
    • 卷快照位于源 PVC 所在的同一个命名空间中。
    • 卷快照位于 TKG 集群所在的同一个命名空间中。

另外,也可以在新的 TKG 集群中重用同一命名空间中其他 TKG 集群不再需要的卷快照。要执行此操作,请将原始 TKG 集群中 VolumeSnapshotContentdeletionPolicy 更改为 Retain,然后删除相应的 VolumeSnapshot 以及 VolumeSnapshotContent 对象。

过程

  1. 记下 主管 中原始 VolumeSnapshot 对象的名称。
    如果要重用旧 TKG 集群中的卷快照,也可以从旧 TKG 集群中旧 VolumeSnapshotContent 对象的 snapshotHandle 检索 主管 VolumeSnapshot 名称。
  2. 创建 VolumeSnapshotContent 对象。
    在 YAML 文件中,指定以下项的值:
    对于 snapshotHandle,输入在步骤 1 中获取的 主管 VolumeSnapshot 名称。
    注: 注意:如果要重用其他 TKG 集群中的卷快照,请先删除旧 TKG 集群中的 VolumeSnapshotVolumeSnapshotContent 对象,并将 deletionPolicy 设置为 Retain,然后再在新 TKG 集群中创建 VolumeSnapshotContent
    可参考以下 YAML 清单示例。
    --------
    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. 创建 VolumeSnapshot 以与在步骤 2 中创建的 VolumeSnapshotContent 对象相匹配。
    ---------
    apiVersion: snapshot.storage.k8s.io/vl
    kind: VolumeSnapshot
    metadata:
     name: static-tkg-block-snapshot 
    spec: 
     source:
      volumeSnapshotContentName: static-tkg-block-snapshotcontent
    ---------
    
  4. 对于在步骤 3 中创建的 VolumeSnapshot,验证 ReadyToUse 是否标记为“true”。
    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
    

还原 TKG 服务 集群中的卷快照

可以还原已创建的卷快照。

过程

  1. 验证 TKG 集群中是否存在要还原的卷快照。
    $ 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. 从卷快照创建 PVC。
    $ 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