Vous pouvez provisionner dynamiquement un snapshot ou créer un snapshot de volume préprovisionné d'un volume de blocs dans un cluster Service TKG. Vous pouvez également restaurer un snapshot existant.

Note : Vous ne devez pas créer de classes de snapshot de volume et les utiliser pour créer des snapshots de volume. Utilisez uniquement une classe de snapshot de volume préexistante. Les classes de snapshot de volume préexistantes prennent uniquement en charge la stratégie de suppression. La création de classes de snapshot de volume avec Retain deletionPolicy n'est pas prise en charge.

Créer un snapshot provisionné dynamiquement dans un cluster Service TKG

Provisionnez dynamiquement un snapshot dans un cluster Service TKG.

Procédure

  1. Vérifiez la présence de 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. Créez un PVC à l'aide de la classe StorageClass de l'étape 1.
    Utilisez le fichier YAML suivant comme exemple.
    $ 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. Vérifiez que VolumeSnapshotClass est disponible.
    $ kubectl get volumesnapshotclass
    NAME                         DRIVER                   DELETIONPOLICY   AGE
    volumesnapshotclass-delete   csi.vsphere.vmware.com   Delete           11d
    
  4. Créez un VolumeSnapshot à l'aide de la classe VolumeSnapshotClass que vous avez obtenue à l'étape 3.
    $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
    
    

Créer un snapshot préprovisionné dynamiquement dans un cluster Service TKG

Créez un snapshot de volume préprovisionné d'un volume de blocs (PVC) dans un cluster Service TKG à l'aide d'un snapshot de volume du même volume de blocs (PVC) à partir du Superviseur.

Suivez ces étapes pour créer statiquement un snapshot de volume dans un nouveau cluster TKG en utilisant les informations du volume sous-jacent restant dans le Superviseur.

Note : Vous ne pouvez pas créer de snapshots de volume directement sur un Superviseur.

Conditions préalables

  • Familiarisez-vous avec les informations sur la création de snapshots Kubernetes. Pour plus d'informations, reportez-vous à la page Snapshots de volume dans la documentation Kubernetes.
  • Assurez-vous que le snapshot de volume répond aux conditions suivantes :
    • Le snapshot de volume est présent dans le même espace de noms que celui où réside le PVC source.
    • Le snapshot de volume est présent dans le même espace de noms que celui où réside le cluster TKG.

Vous pouvez également réutiliser dans un nouveau cluster TKG un snapshot de volume dont un autre cluster TKG n'a plus besoin dans le même espace de noms. Pour ce faire, modifiez la deletionPolicy du VolumeSnapshotContent dans le cluster TKG d'origine en Retain, puis supprimez les objets VolumeSnapshot et VolumeSnapshotContent correspondants.

Procédure

  1. Notez le nom de l'objet VolumeSnapshot d'origine dans le Superviseur.
    Si vous réutilisez le snapshot de volume à partir d'un ancien cluster TKG, vous pouvez également récupérer le nom du VolumeSnapshot du Superviseur à partir de snapshotHandle de l'ancien objet VolumeSnapshotContent de l'ancien cluster TKG.
  2. Créez un objet VolumeSnapshotContent.
    Dans le fichier YAML, spécifiez les valeurs de l'élément suivant :
    Pour snapshotHandle, entrez le nom du VolumeSnapshot de Superviseur que vous avez obtenu à l'étape 1.
    Note : Remarque : si vous réutilisez un snapshot de volume à partir d'un autre cluster TKG, supprimez les objets VolumeSnapshot et VolumeSnapshotContent de l'ancien cluster TKG, avec deletionPolicy défini sur Conserver, avant de créer un VolumeSnapshotContent dans le nouveau cluster TKG.
    Utilisez le manifeste YAML suivant comme exemple.
    --------
    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. Créez un VolumeSnapshot pour correspondre à l'objet VolumeSnapshotContent que vous avez créé à l'étape 2.
    ---------
    apiVersion: snapshot.storage.k8s.io/vl
    kind: VolumeSnapshot
    metadata:
     name: static-tkg-block-snapshot 
    spec: 
     source:
      volumeSnapshotContentName: static-tkg-block-snapshotcontent
    ---------
    
  4. Vérifiez que le VolumeSnapshot que vous avez créé à l'étape 3 est marqué avec ReadyToUse comme « 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
    

Restaurer un snapshot de volume dans un cluster de Service TKG

Restaurez un snapshot de volume qui a déjà été créé.

Procédure

  1. Vérifiez que le snapshot de volume à restaurer est disponible dans le cluster 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. Créez une réclamation de volume persistant à partir du snapshot de volume.
    $ 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