All Products
Search
Document Center

Container Service for Kubernetes:Buat snapshot volume disk

Last Updated:Aug 21, 2026

Snapshot volume membantu Anda mencadangkan dan memulihkan data aplikasi. Topik ini menjelaskan cara membuat snapshot untuk volume disk menggunakan resource VolumeSnapshot serta cara memulihkan data dari snapshot tersebut.

Prasyarat

Pastikan hal-hal berikut:

  • Kluster ACK yang dikelola menjalankan Kubernetes versi 1.18 atau lebih baru.

  • Layanan Snapshot Elastic Compute Service (ECS) telah diaktifkan (aktivasi gratis; Anda hanya dikenai biaya untuk snapshot yang Anda buat).

Cara kerja

Kluster ACK menggunakan volume disk untuk penyimpanan persisten StatefulSet. Snapshot volume dibangun di atas snapshot disk ECS dan dua mekanisme Kubernetes:

  • VolumeSnapshot: mencadangkan data volume disk.

  • DataSource: bidang PersistentVolumeClaim (PVC) yang memulihkan data snapshot ke volume baru.

ACK mengimplementasikan snapshot melalui tiga CustomResourceDefinitions (CRDs):

Resource

Deskripsi

VolumeSnapshotContent

Snapshot disk berskala kluster yang disediakan oleh administrator kluster. Analog dengan PersistentVolume (PV).

VolumeSnapshot

Permintaan pengguna berskala namespace untuk snapshot volume. Analog dengan PVC.

VolumeSnapshotClass

Menentukan driver dan parameter untuk pembuatan snapshot. Analog dengan StorageClass tetapi khusus snapshot—volume yang sama dapat memiliki snapshot dengan atribut berbeda (misalnya, periode retensi berbeda).

VolumeSnapshot dan VolumeSnapshotContent saling terikat satu-satu, seperti PVC dan PV:

  • Jika volumeSnapshotClassName diatur ke VolumeSnapshotClass yang valid, ACK secara otomatis menyediakan VolumeSnapshotContent.

  • Jika volumeSnapshotClassName dihilangkan atau tidak valid, buat VolumeSnapshotContent secara manual dan ikatkan ke VolumeSnapshot.

Penting

Menghapus VolumeSnapshotContent juga akan menghapus snapshot volume terkait.

Penagihan

Snapshot volume ditagih sebagai snapshot ECS. Lihat Penagihan snapshot.

Batasan

Sebelum membuat snapshot, tinjau batasan berikut:

Kondisi

Perilaku

Versi add-on CSI < V1.22.12-b797ad9-aliyun

Snapshot hanya dapat dibuat dari volume disk yang memiliki PVC terpasang pada pod Berjalan.

Versi plug-in CSI >= V1.22.12-b797ad9-aliyun

Snapshot dapat dibuat dari volume disk apa pun yang digunakan, terlepas dari status pod.

  • Secara default, akses instans diaktifkan untuk snapshot dinamis dari volume Enhanced SSD (ESSD) dan ESSD AutoPL pada PL0–PL3.

  • Siklus hidup resource VolumeSnapshot dan VolumeSnapshotContent yang dibuat oleh kelas snapshot csdr-disk-snapshot dikelola oleh Backup center. Untuk menghindari penghapusan sumber daya secara tidak sengaja, jangan mengubah atau menggunakan kelas snapshot ini.

Buat snapshot volume secara dinamis

Buat snapshot dari volume disk yang dikelola ACK secara langsung. ACK secara otomatis menyediakan VolumeSnapshotContent dan snapshot ECS yang mendasarinya.

snapshot

Ikhtisar: buat VolumeSnapshotClass (administrator) → deploy aplikasi dengan volume disk → buat VolumeSnapshot (ACK secara otomatis membuat VolumeSnapshotContent dan snapshot ECS) → pulihkan data ke volume baru dari snapshot melalui PVC.

Langkah 1: Buat VolumeSnapshotClass

Ini adalah tugas administrator. Lewati ke Langkah 2 jika kluster Anda sudah memiliki VolumeSnapshotClass.
  1. Buat file volumesnapshotclass.yaml dengan konten berikut:

    Parameter

    Deskripsi

    retentionDays

    Periode retensi snapshot, dalam hari.

    forceDelete

    Perilaku saat penghapusan snapshot. "true" menghapus paksa semua snapshot; "false" hanya menghapus snapshot yang tidak digunakan. Nilai default: "false" untuk csi-provisioner 1.26.5-92f859a-aliyun dan versi lebih baru; "true" untuk versi sebelumnya.

    deletionPolicy

    Delete: menghapus VolumeSnapshotContent dan snapshot ECS saat VolumeSnapshot dihapus. Retain: menyimpan keduanya.

    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. Terapkan manifes:

    kubectl apply -f volumesnapshotclass.yaml

Langkah 2: Deploy aplikasi dan tulis data

  1. Buat file nginx.yaml dengan konten berikut:

    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. Deploy StatefulSet:

    kubectl apply -f nginx.yaml
  3. Verifikasi pod sedang berjalan:

    kubectl get pod -l app=nginx

    Output yang diharapkan:

    NAME        READY   STATUS    RESTARTS   AGE
    nginx-0     1/1     Running   0          82s
  4. Tulis data uji ke volume:

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

    Output yang diharapkan:

    lost+found test

Langkah 3: Buat VolumeSnapshot

  1. Buat file snapshot-1.yaml dengan konten berikut:

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: new-snapshot-demo
      namespace: default
    spec:
      volumeSnapshotClassName: default-snapclass   # VolumeSnapshotClass yang digunakan oleh VolumeSnapshot.
      source:
        persistentVolumeClaimName: disk-nginx-0
  2. Terapkan manifes:

    kubectl apply -f snapshot-1.yaml

Langkah 4: Verifikasi snapshot

  1. Periksa status VolumeSnapshot:

    kubectl get volumesnapshots

    Output yang diharapkan:

    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

    Saat READYTOUSE bernilai true, snapshot siap digunakan.

  2. Periksa VolumeSnapshotContent:

    kubectl get VolumeSnapshotContent

    Output yang diharapkan:

    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
Snapshot disk ECS juga muncul di halaman Snapshots di Konsol ECS.

Langkah 5 (opsional): Pulihkan data ke aplikasi baru

Referensikan snapshot dalam volumeClaimTemplates StatefulSet untuk memulihkan data ke volume baru.

  1. Buat file nginx-restore.yaml. Blok dataSource mereferensikan snapshot yang telah Anda buat:

    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      # Nama VolumeSnapshot yang akan dipulihkan
            kind: VolumeSnapshot
            apiGroup: snapshot.storage.k8s.io
  2. Deploy StatefulSet:

    kubectl apply -f nginx-restore.yaml
  3. Verifikasi data telah dipulihkan:

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

    Output yang diharapkan:

    lost+found test

Langkah 6 (opsional): Pulihkan data ke PVC mandiri

Untuk memulihkan data tanpa mendeploy workload, buat PVC langsung dari snapshot.

  1. Buat file pvc-restore.yaml dengan konten berikut:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-disk
      namespace: default
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
      dataSource:
        name: new-snapshot-demo      # Nama VolumeSnapshot yang akan dipulihkan
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io
      storageClassName: alicloud-disk-topology-alltype
      volumeMode: Filesystem
  2. Buat PVC:

    StorageClass alicloud-disk-topology-alltype menggunakan volumeBindingMode: WaitForFirstConsumer. PVC akan tetap berstatus Pending hingga dipasang ke pod. Jangan hapus VolumeSnapshot, VolumeSnapshotContent, atau snapshot ECS yang mendasarinya sebelum PVC terikat.
    kubectl apply -f pvc-restore.yaml

Impor snapshot disk yang sudah ada

Impor snapshot disk ECS yang sudah ada ke dalam kluster ACK tanpa perlu mendeploy aplikasi terlebih dahulu.

Langkah 1: Buat VolumeSnapshotContent

Ini adalah tugas administrator.
  1. Buat file snapshot-content.yaml. Ganti <YOUR-SNAPSHOTID> dengan ID snapshot dari halaman Snapshots di Konsol ECS:

    Parameter

    Deskripsi

    snapshotHandle

    ID snapshot disk ECS yang sudah ada.

    volumeSnapshotRef.name

    Nama VolumeSnapshot yang akan diikat. Harus sesuai dengan metadata.name dalam manifes VolumeSnapshot.

    volumeSnapshotRef.namespace

    Namespace 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 snapshot disk ECS yang sudah ada
      volumeSnapshotRef:
        name: new-snapshot-demo             # Harus sesuai dengan nama VolumeSnapshot di bawah
        namespace: default
  2. Terapkan manifes:

    kubectl apply -f snapshot-content.yaml

Langkah 2: Buat VolumeSnapshot dan ikatkan

  1. Buat file snapshot-2.yaml dengan konten berikut:

    Parameter

    Deskripsi

    metadata.name

    Nama VolumeSnapshot. Harus sesuai dengan volumeSnapshotRef.name dalam VolumeSnapshotContent.

    volumeSnapshotContentName

    Nama VolumeSnapshotContent yang akan diikat.

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: new-snapshot-demo       # Harus sesuai dengan volumeSnapshotRef.name dalam VolumeSnapshotContent
      namespace: default
    spec:
      source:
        volumeSnapshotContentName: new-snapshot-content-test   # Nama VolumeSnapshotContent yang akan diikat
  2. Terapkan manifes:

    kubectl apply -f snapshot-2.yaml

Langkah 3 (opsional): Pulihkan data

Setelah pengikatan selesai, pulihkan data seperti yang dijelaskan dalam Langkah 5 dan Langkah 6 pada alur kerja snapshot dinamis.