Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Create a disk volume snapshot

Dernière mise à jour :Sep 21, 2026

Les snapshots de volumes vous permettent de sauvegarder et de restaurer les données de vos applications. Cette rubrique explique comment créer des snapshots pour les volumes de disque à l'aide des ressources VolumeSnapshot et comment restaurer les données à partir de ces snapshots.

Prérequis

Vérifiez les conditions suivantes :

  • Un cluster ACK managé exécutant Kubernetes 1.18 ou une version ultérieure

  • Le service Snapshot d'Elastic Compute Service (ECS) est activé (l'activation est gratuite ; vous ne payez que pour les snapshots que vous créez).

Fonctionnement

Les clusters ACK utilisent des volumes de disque pour le stockage persistant des StatefulSet. Les snapshots de volumes s'appuient sur les snapshots de disques ECS et sur deux mécanismes Kubernetes :

  • VolumeSnapshot : permet de sauvegarder les données d'un volume de disque

  • DataSource : champ d'une PersistentVolumeClaim (PVC) qui restaure les données d'un snapshot dans un nouveau volume

ACK implémente les snapshots via trois CustomResourceDefinitions (CRD) :

Ressource

Description

VolumeSnapshotContent

Un snapshot de disque à l'échelle du cluster, provisionné par un administrateur de cluster. Analogue à un PersistentVolume (PV).

VolumeSnapshot

Une demande utilisateur à l'échelle du namespace pour un snapshot de volume. Analogue à une PVC.

VolumeSnapshotClass

Définit le pilote et les paramètres pour la création de snapshots. Analogue à StorageClass, mais spécifique aux snapshots : un même volume peut avoir des snapshots avec des attributs différents (par exemple, des durées de rétention différentes).

VolumeSnapshot et VolumeSnapshotContent sont liés un à un, tout comme PVC et PV :

  • Si volumeSnapshotClassName est défini sur une VolumeSnapshotClass valide, ACK provisionne automatiquement un VolumeSnapshotContent.

  • Si volumeSnapshotClassName est omis ou invalide, créez manuellement un VolumeSnapshotContent et liez-le au VolumeSnapshot.

Important

La suppression d'un VolumeSnapshotContent entraîne également la suppression du snapshot de volume associé.

Facturation

Les snapshots de volumes sont facturés comme des snapshots ECS. Consultez la section Facturation des snapshots.

Contraintes

Avant de créer un snapshot, examinez les contraintes suivantes :

Condition

Comportement

Version du module complémentaire CSI < V1.22.12-b797ad9-aliyun

Les snapshots ne peuvent être créés qu'à partir de volumes de disque dont la PVC est attachée à un pod en cours d'exécution.

Version du plug-in CSI >= V1.22.12-b797ad9-aliyun

Les snapshots peuvent être créés à partir de n'importe quel volume de disque utilisé, quel que soit l'état du pod.

  • Par défaut, l'accès à l'instance est activé pour les snapshots dynamiques issus des volumes Enhanced SSD (ESSD) et ESSD AutoPL aux niveaux PL0–PL3.

  • Le cycle de vie des ressources VolumeSnapshot et VolumeSnapshotContent créées par la classe de snapshot csdr-disk-snapshot est géré par le Backup center. Pour éviter la suppression accidentelle de vos ressources, ne modifiez pas et n'utilisez pas cette classe de snapshot.

Créer un snapshot de volume de manière dynamique

Créez un snapshot d'un volume de disque géré par ACK en direct. ACK provisionne automatiquement le VolumeSnapshotContent et le snapshot ECS sous-jacent.

snapshot

Aperçu : créez une VolumeSnapshotClass (administrateur) → déployez une application avec un volume de disque → créez un VolumeSnapshot (ACK crée automatiquement le VolumeSnapshotContent et le snapshot ECS) → restaurez les données dans un nouveau volume à partir du snapshot via une PVC.

Étape 1 : Créer une VolumeSnapshotClass

Il s'agit d'une tâche administrative. Passez directement à l' étape 2 si votre cluster possède déjà une VolumeSnapshotClass.
  1. Créez le fichier volumesnapshotclass.yaml avec le contenu suivant :

    Paramètre

    Description

    retentionDays

    Durée de rétention du snapshot, en jours.

    forceDelete

    Comportement lors de la suppression du snapshot. "true" supprime de force tous les snapshots ; "false" supprime uniquement les snapshots inutilisés. Valeur par défaut : "false" pour csi-provisioner 1.26.5-92f859a-aliyun et versions ultérieures ; "true" pour les versions antérieures.

    deletionPolicy

    Delete : supprime le VolumeSnapshotContent et le snapshot ECS lorsque le VolumeSnapshot est supprimé. Retain : conserve les deux.

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: default-snapclass
    driver: diskplugin.csi.alibabacloud.com
    parameters:
      retentionDays: "5"
      forceDelete: "true"
    deletionPolicy: Delete
  2. Appliquez le manifeste :

    kubectl apply -f volumesnapshotclass.yaml

Étape 2 : Déployer une application et écrire des données

  1. Créez le fichier nginx.yaml avec le contenu suivant :

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: nginx
    spec:
      selector:
        matchLabels:
          app: nginx
      serviceName: "nginx"
      replicas: 1
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            imagePullPolicy: IfNotPresent
            volumeMounts:
            - name: disk
              mountPath: /data
      volumeClaimTemplates:
      - metadata:
          name: disk
        spec:
          accessModes: [ "ReadWriteOnce" ]
          storageClassName: "alicloud-disk-topology-alltype"
          resources:
            requests:
              storage: 20Gi
  2. Déployez le StatefulSet :

    kubectl apply -f nginx.yaml
  3. Vérifiez que le pod est en cours d'exécution :

    kubectl get pod -l app=nginx

    Résultat attendu :

    NAME        READY   STATUS    RESTARTS   AGE
    nginx-0     1/1     Running   0          82s
  4. Écrivez des données de test dans le volume :

    kubectl exec -it nginx-0 -- touch /data/test
    kubectl exec -it nginx-0 -- ls /data

    Résultat attendu :

    lost+found test

Étape 3 : Créer un VolumeSnapshot

  1. Créez le fichier snapshot-1.yaml avec le contenu suivant :

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: new-snapshot-demo
      namespace: default
    spec:
      volumeSnapshotClassName: default-snapclass   # The VolumeSnapshotClass used by the VolumeSnapshot.
      source:
        persistentVolumeClaimName: disk-nginx-0
  2. Appliquez le manifeste :

    kubectl apply -f snapshot-1.yaml

Étape 4 : Vérifier le snapshot

  1. Vérifiez l'état du VolumeSnapshot :

    kubectl get volumesnapshots

    Résultat attendu :

    NAME                READYTOUSE   SOURCEPVC      SOURCESNAPSHOTCONTENT   RESTORESIZE   SNAPSHOTCLASS       SNAPSHOTCONTENT                                    CREATIONTIME   AGE
    new-snapshot-demo   true         disk-nginx-0                           20Gi          default-snapclass   snapcontent-48b04625-679a-490f-9ef3-f04b2b8e6c57   28s            28s

    Lorsque READYTOUSE est défini sur true, le snapshot est prêt.

  2. Vérifiez le VolumeSnapshotContent :

    kubectl get VolumeSnapshotContent

    Résultat attendu :

    NAME                                               READYTOUSE   RESTORESIZE   DELETIONPOLICY   DRIVER                            VOLUMESNAPSHOTCLASS   VOLUMESNAPSHOT      VOLUMESNAPSHOTNAMESPACE   AGE
    snapcontent-48b04625-679a-490f-9ef3-f04b2b8e6c57   true         21474836480   Delete           diskplugin.csi.alibabacloud.com   default-snapclass     new-snapshot-demo   default                   49s
Le snapshot de disque ECS apparaît également sur la page Snapshots de la console ECS .

Étape 5 (facultative) : Restaurer les données dans une nouvelle application

Référencez le snapshot dans les volumeClaimTemplates d'un StatefulSet pour restaurer les données dans un nouveau volume.

  1. Créez le fichier nginx-restore.yaml . Le bloc dataSource fait référence au snapshot que vous avez créé :

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: nginx-restore
    spec:
      selector:
        matchLabels:
          app: nginx
      serviceName: "nginx"
      replicas: 1
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            imagePullPolicy: IfNotPresent
            volumeMounts:
            - name: disk
              mountPath: /data
      volumeClaimTemplates:
      - metadata:
          name: disk
        spec:
          accessModes: [ "ReadWriteOnce" ]
          storageClassName: "alicloud-disk-topology-alltype"
          resources:
            requests:
              storage: 20Gi
          dataSource:
            name: new-snapshot-demo      # Name of the VolumeSnapshot to restore from
            kind: VolumeSnapshot
            apiGroup: snapshot.storage.k8s.io
  2. Déployez le StatefulSet :

    kubectl apply -f nginx-restore.yaml
  3. Vérifiez que les données ont été restaurées :

    kubectl exec -it nginx-restore-0 -- ls /data

    Résultat attendu :

    lost+found test

Étape 6 (facultative) : Restaurer les données dans une PVC autonome

Pour restaurer les données sans déployer de charge de travail, créez directement une PVC à partir du snapshot.

  1. Créez le fichier pvc-restore.yaml avec le contenu suivant :

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-disk
      namespace: default
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
      dataSource:
        name: new-snapshot-demo      # Name of the VolumeSnapshot to restore from
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io
      storageClassName: alicloud-disk-topology-alltype
      volumeMode: Filesystem
  2. Créez la PVC :

    La StorageClass alicloud-disk-topology-alltype utilise volumeBindingMode: WaitForFirstConsumer . La PVC reste à l'état Pending jusqu'à ce qu'elle soit montée sur un pod. Ne supprimez pas le VolumeSnapshot, le VolumeSnapshotContent ou le snapshot ECS sous-jacent avant que la PVC ne soit liée.
    kubectl apply -f pvc-restore.yaml

Importer un snapshot de disque existant

Importez un snapshot de disque ECS existant dans un cluster ACK sans déployer d'application au préalable.

Étape 1 : Créer un VolumeSnapshotContent

Il s'agit d'une tâche administrative.
  1. Créez le fichier snapshot-content.yaml. Remplacez <YOUR-SNAPSHOTID> par l'ID du snapshot disponible sur la page Snapshots de la console ECS :

    Paramètre

    Description

    snapshotHandle

    ID du snapshot de disque ECS existant.

    volumeSnapshotRef.name

    Nom du VolumeSnapshot à lier. Doit correspondre à metadata.name dans le manifeste VolumeSnapshot.

    volumeSnapshotRef.namespace

    Namespace du VolumeSnapshot.

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotContent
    metadata:
      name: new-snapshot-content-test
    spec:
      deletionPolicy: Retain
      driver: diskplugin.csi.alibabacloud.com
      source:
        snapshotHandle: <YOUR-SNAPSHOTID>   # ID of the existing ECS disk snapshot
      volumeSnapshotRef:
        name: new-snapshot-demo             # Must match the VolumeSnapshot name below
        namespace: default
  2. Appliquez le manifeste :

    kubectl apply -f snapshot-content.yaml

Étape 2 : Créer un VolumeSnapshot et le lier

  1. Créez le fichier snapshot-2.yaml avec le contenu suivant :

    Paramètre

    Description

    metadata.name

    Nom du VolumeSnapshot. Doit correspondre à volumeSnapshotRef.name dans le VolumeSnapshotContent.

    volumeSnapshotContentName

    Nom du VolumeSnapshotContent à lier.

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: new-snapshot-demo       # Must match volumeSnapshotRef.name in the VolumeSnapshotContent
      namespace: default
    spec:
      source:
        volumeSnapshotContentName: new-snapshot-content-test   # Name of the VolumeSnapshotContent to bind
  2. Appliquez le manifeste :

    kubectl apply -f snapshot-2.yaml

Étape 3 (facultative) : Restaurer les données

Après la liaison, restaurez les données comme décrit à l'étape 5 et à l'étape 6 du workflow de snapshot dynamique.