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 ドキュメントの「Volume Snapshots」ページを参照してください。
  • ボリューム スナップショットが次の条件を満たしていることを確認します。
    • ソース PVC が配置されている名前空間内にボリューム スナップショットが存在する。
    • TKG クラスタが配置されている名前空間内にボリューム スナップショットが存在する。

同じ名前空間内の別の TKG クラスタで不要になったボリューム スナップショットを新しい TKG クラスタで再利用することもできます。そのためには、元の TKG クラスタ内の VolumeSnapshotContentdeletionPolicyRetain に変更してから、対応する VolumeSnapshot オブジェクトと VolumeSnapshotContent オブジェクトを削除します。

手順

  1. スーパーバイザー 内の元の VolumeSnapshot オブジェクトの名前を書き留めます。
    古い TKG クラスタのボリューム スナップショットを再利用する場合は、古い TKG クラスタ内の古い VolumeSnapshotContent オブジェクトの snapshotHandle から スーパーバイザーVolumeSnapshot 名を取得することもできます。
  2. VolumeSnapshotContent オブジェクトを作成します。
    YAML ファイルで、次の項目の値を指定します。
    snapshotHandle には、手順 1 で取得した スーパーバイザーVolumeSnapshot 名を入力します。
    注: 注:別の TKG クラスタのボリューム スナップショットを再利用する場合は、新しい TKG クラスタに VolumeSnapshotContent を作成する前に、 deletionPolicy が Retain に設定されている古い TKG クラスタから VolumeSnapshot オブジェクトと 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. 手順 2 で作成した VolumeSnapshotContent オブジェクトと一致する VolumeSnapshot を作成します。
    ---------
    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