Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Create a disk volume snapshot

Última actualización: Sep 21, 2026

Las instantáneas de volumen le ayudan a respaldar y restaurar los datos de sus aplicaciones. En este tema se explica cómo crear instantáneas para volúmenes de disco con recursos VolumeSnapshot y cómo restaurar datos a partir de ellas.

Requisitos previos

Asegúrese de cumplir con lo siguiente:

  • Un clúster administrado de ACK que ejecute Kubernetes 1.18 o una versión posterior.

  • El servicio Snapshot de Elastic Compute Service (ECS) debe estar activado (la activación es gratuita; solo paga por las instantáneas que cree).

Cómo funciona

Los clústeres de ACK usan volúmenes de disco para el almacenamiento persistente de StatefulSet. Las instantáneas de volumen se basan en las instantáneas de disco de ECS y en dos mecanismos de Kubernetes:

  • VolumeSnapshot: respalda los datos del volumen de disco.

  • DataSource: un campo de PersistentVolumeClaim (PVC) que restaura los datos de la instantánea en un nuevo volumen.

ACK implementa las instantáneas mediante tres CustomResourceDefinitions (CRD):

Resource

Description

VolumeSnapshotContent

Una instantánea de disco a nivel de clúster aprovisionada por un administrador. Es análoga a un PersistentVolume (PV).

VolumeSnapshot

Una solicitud de usuario a nivel de namespace para obtener una instantánea de volumen. Es análoga a un PVC.

VolumeSnapshotClass

Define el controlador y los parámetros para crear la instantánea. Es análogo a StorageClass, pero específico para instantáneas: un mismo volumen puede tener instantáneas con distintos atributos (por ejemplo, diferentes periodos de retención).

VolumeSnapshot y VolumeSnapshotContent se vinculan en una relación uno a uno, igual que PVC y PV:

  • Si volumeSnapshotClassName apunta a un VolumeSnapshotClass válido, ACK aprovisiona automáticamente un VolumeSnapshotContent.

  • Si volumeSnapshotClassName se omite o no es válido, cree manualmente un VolumeSnapshotContent y vincúlelo al VolumeSnapshot.

Importante

Si elimina un VolumeSnapshotContent, también se elimina la instantánea de volumen asociada.

Facturación

Las instantáneas de volumen se facturan como instantáneas de ECS. Consulte Snapshot billing.

Restricciones

Antes de crear una instantánea, revise las siguientes restricciones:

Condition

Behavior

Versión del complemento CSI < V1.22.12-b797ad9-aliyun

Las instantáneas solo se pueden crear a partir de volúmenes de disco cuyo PVC esté adjunto a un pod en estado Running.

Versión del complemento CSI >= V1.22.12-b797ad9-aliyun

Las instantáneas se pueden crear desde cualquier volumen de disco en uso, sin importar el estado del pod.

  • De forma predeterminada, instance access está habilitado para las instantáneas dinámicas de volúmenes Enhanced SSD (ESSD) y ESSD AutoPL en los niveles PL0 a PL3.

  • Backup center gestiona el ciclo de vida de los recursos VolumeSnapshot y VolumeSnapshotContent que crea la clase de instantánea csdr-disk-snapshot. Para evitar eliminar estos recursos por accidente, no modifique ni utilice esta clase de instantánea.

Crear una instantánea de volumen de forma dinámica

Tome una instantánea de un volumen de disco activo administrado por ACK. El sistema aprovisiona automáticamente el VolumeSnapshotContent y la instantánea de ECS subyacente.

snapshot

Descripción general: cree un VolumeSnapshotClass (tarea del administrador) → despliegue una aplicación con un volumen de disco → cree un VolumeSnapshot (ACK genera automáticamente el VolumeSnapshotContent y la instantánea de ECS) → restaure los datos en un nuevo volumen a partir de la instantánea mediante un PVC.

Paso 1: Crear un VolumeSnapshotClass

Esta tarea corresponde al administrador. Si su clúster ya cuenta con un VolumeSnapshotClass, salte al Paso 2.
  1. Cree el archivo volumesnapshotclass.yaml con el siguiente contenido:

    Parameter

    Description

    retentionDays

    Periodo de retención de la instantánea, en días.

    forceDelete

    Comportamiento al eliminar la instantánea. Con "true" se eliminan forzosamente todas las instantáneas; con "false" solo se eliminan las que no están en uso. Valor predeterminado: "false" para csi-provisioner 1.26.5-92f859a-aliyun y versiones posteriores; "true" para versiones anteriores.

    deletionPolicy

    Delete: elimina el VolumeSnapshotContent y la instantánea de ECS cuando se borra el VolumeSnapshot. Retain: conserva ambos elementos.

    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. Aplique el manifiesto:

    kubectl apply -f volumesnapshotclass.yaml

Paso 2: Desplegar una aplicación y escribir datos

  1. Cree el archivo nginx.yaml con el siguiente contenido:

    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. Despliegue el StatefulSet:

    kubectl apply -f nginx.yaml
  3. Compruebe que el pod se esté ejecutando:

    kubectl get pod -l app=nginx

    Resultado esperado:

    NAME        READY   STATUS    RESTARTS   AGE
    nginx-0     1/1     Running   0          82s
  4. Escriba datos de prueba en el volumen:

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

    Resultado esperado:

    lost+found test

Paso 3: Crear un VolumeSnapshot

  1. Cree el archivo snapshot-1.yaml con el siguiente contenido:

    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. Aplique el manifiesto:

    kubectl apply -f snapshot-1.yaml

Paso 4: Comprobar la instantánea

  1. Revise el estado del VolumeSnapshot:

    kubectl get volumesnapshots

    Resultado esperado:

    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

    Cuando READYTOUSE muestra true, la instantánea está lista.

  2. Revise el VolumeSnapshotContent:

    kubectl get VolumeSnapshotContent

    Resultado esperado:

    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
La instantánea de disco de ECS también aparece en la página Snapshots de la consola de ECS.

Paso 5 (opcional): Restaurar datos en una nueva aplicación

Para restaurar datos en un nuevo volumen, haga referencia a la instantánea en el bloque volumeClaimTemplates de un StatefulSet.

  1. Cree el archivo nginx-restore.yaml. El bloque dataSource hace referencia a la instantánea que creó:

    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. Despliegue el StatefulSet:

    kubectl apply -f nginx-restore.yaml
  3. Compruebe que los datos se hayan restaurado:

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

    Resultado esperado:

    lost+found test

Paso 6 (opcional): Restaurar datos en un PVC independiente

Si necesita restaurar datos sin desplegar una carga de trabajo, cree un PVC directamente a partir de la instantánea.

  1. Cree el archivo pvc-restore.yaml con el siguiente contenido:

    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. Cree el PVC:

    La StorageClass alicloud-disk-topology-alltype utiliza volumeBindingMode: WaitForFirstConsumer. Por ello, el PVC permanece en estado Pending hasta que se monta en un pod. No elimine el VolumeSnapshot, el VolumeSnapshotContent ni la instantánea de ECS subyacente antes de que el PVC se vincule.
    kubectl apply -f pvc-restore.yaml

Importar una instantánea de disco existente

Importe una instantánea de disco de ECS existente a un clúster de ACK sin necesidad de desplegar primero una aplicación.

Paso 1: Crear un VolumeSnapshotContent

Esta tarea corresponde al administrador.
  1. Cree el archivo snapshot-content.yaml. Reemplace <YOUR-SNAPSHOTID> con el ID de la instantánea que obtuvo en la página Snapshots de la consola de ECS:

    Parameter

    Description

    snapshotHandle

    El ID de la instantánea de disco de ECS existente.

    volumeSnapshotRef.name

    El nombre del VolumeSnapshot que se va a vincular. Debe coincidir con metadata.name en el manifiesto del VolumeSnapshot.

    volumeSnapshotRef.namespace

    El namespace del 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. Aplique el manifiesto:

    kubectl apply -f snapshot-content.yaml

Paso 2: Crear un VolumeSnapshot y vincularlo

  1. Cree el archivo snapshot-2.yaml con el siguiente contenido:

    Parameter

    Description

    metadata.name

    El nombre del VolumeSnapshot. Debe coincidir con volumeSnapshotRef.name en el VolumeSnapshotContent.

    volumeSnapshotContentName

    El nombre del VolumeSnapshotContent que se va a vincular.

    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. Aplique el manifiesto:

    kubectl apply -f snapshot-2.yaml

Paso 3 (opcional): Restaurar datos

Una vez establecido el vínculo, restaure los datos tal como se describe en el Paso 5 y el Paso 6 del flujo de trabajo de instantáneas dinámicas.