可以在 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