Tüm Ürünler
Search
Belge Merkezi

Container Service for Kubernetes:Create a disk volume snapshot

Son Güncelleme:Oct 06, 2026

Birim anlık görüntüleri, uygulama verilerini yedeklemenize ve geri yüklemenize olanak tanır. Bu konuda, VolumeSnapshot kaynaklarını kullanarak disk birimleri için nasıl anlık görüntü oluşturulacağı ve bu anlık görüntülerden verilerin nasıl geri yükleneceği açıklanmaktadır.

Önkoşullar

Aşağıdaki koşulların sağlandığından emin olun:

  • Kubernetes 1.18 veya sonraki bir sürümü çalıştıran ACK yönetilen kümesi

  • Etkinleştirilmiş Elastic Compute Service (ECS) Snapshot service (etkinleştirme ücretsizdir; yalnızca oluşturduğunuz anlık görüntüler için ücretlendirilirsiniz).

Çalışma prensibi

ACK kümeleri, kalıcı StatefulSet depolaması için disk birimlerini kullanır. Birim anlık görüntüleri, ECS disk anlık görüntüleri ve iki Kubernetes mekanizması üzerine kuruludur:

  • VolumeSnapshot: Disk birimi verilerini yedekler

  • DataSource: Anlık görüntü verilerini yeni bir birime geri yükleyen PersistentVolumeClaim (PVC) alanı

ACK, anlık görüntüleri üç CustomResourceDefinition (CRD) aracılığıyla uygular:


Kaynak


Açıklama


VolumeSnapshotContent


Küme yöneticisi tarafından sağlanan, küme kapsamına sahip disk anlık görüntüsü. PersistentVolume (PV) ile benzerlik gösterir.


VolumeSnapshot


Birim anlık görüntüsü için ad alanı kapsamındaki kullanıcı isteği. PVC ile benzerlik gösterir.


VolumeSnapshotClass


Anlık görüntü oluşturma için sürücüyü ve parametreleri tanımlar. StorageClass ile benzer ancak anlık görüntüye özeldir; aynı birimin farklı özniteliklere (örneğin, farklı saklama sürelerine) sahip anlık görüntüleri olabilir.

VolumeSnapshot ve VolumeSnapshotContent, tıpkı PVC ve PV gibi birebir eşleşir:

  • volumeSnapshotClassName geçerli bir VolumeSnapshotClass olarak ayarlanmışsa ACK otomatik olarak bir VolumeSnapshotContent sağlar.

  • volumeSnapshotClassName atlanırsa veya geçersizse bir VolumeSnapshotContent manuel olarak oluşturun ve bunu VolumeSnapshot ile ilişkilendirin.

Önemli

Bir VolumeSnapshotContent silindiğinde ilgili birim anlık görüntüsü de silinir.

Faturalandırma

Birim anlık görüntüleri ECS anlık görüntüleri olarak faturalandırılır. Bkz. Anlık görüntü faturalandırması.

Kısıtlamalar

Anlık görüntü oluşturmadan önce aşağıdaki kısıtlamaları gözden geçirin:


Koşul


Davranış


CSI eklenti sürümü < V1.22.12-b797ad9-aliyun


Anlık görüntüler yalnızca çalışan bir bölüme bağlı PVC içeren disk birimlerinden oluşturulabilir.


CSI eklenti sürümü >= V1.22.12-b797ad9-aliyun


Anlık görüntüler bölüm durumundan bağımsız olarak kullanılan herhangi bir disk biriminden oluşturulabilir.

  • Varsayılan olarak PL0–PL3 aralığındaki Geliştirilmiş SSD (ESSD) ve ESSD AutoPL birimlerden dinamik anlık görüntüler için örnek erişimi etkinleştirilir.

  • csdr-disk-snapshot anlık görüntü sınıfı tarafından oluşturulan VolumeSnapshot ve VolumeSnapshotContent kaynaklarının yaşam döngüsü Yedekleme merkezi tarafından yönetilir. Kaynaklarınızın yanlışlıkla silinmesini önlemek için bu anlık görüntü sınıfını değiştirmeyin veya kullanmayın.

Birim anlık görüntüsünü dinamik olarak oluşturun

Çalışan bir ACK yönetimli disk biriminin anlık görüntüsünü alın. ACK, VolumeSnapshotContent ve altta yatan ECS anlık görüntüsünü otomatik olarak sağlar.

snapshot

Genel bakış: VolumeSnapshotClass oluşturun (yönetici) → disk birimi içeren bir uygulama dağıtın → VolumeSnapshot oluşturun (ACK otomatik olarak VolumeSnapshotContent ve ECS anlık görüntüsünü oluşturur) → PVC aracılığıyla anlık görüntüden yeni bir birime veri geri yükleyin.

Adım 1: VolumeSnapshotClass oluşturun

Bu bir yönetici görevidir. Kümeniz zaten bir VolumeSnapshotClass içeriyorsa Adım 2 adımına geçin.
  1. Aşağıdaki içeriğe sahip volumesnapshotclass.yaml dosyasını oluşturun:


    Parametre


    Açıklama


    retentionDays


    Gün cinsinden anlık görüntü saklama süresi.


    forceDelete


    Anlık görüntü silme davranışı. "true" tüm anlık görüntüleri zorla siler; "false" yalnızca kullanılmayan anlık görüntüleri siler. Varsayılan: csi-provisioner 1.26.5-92f859a-aliyun ve sonraki sürümler için "false"; önceki sürümler için "true".


    deletionPolicy

    Delete: VolumeSnapshot silindiğinde VolumeSnapshotContent ve ECS anlık görüntüsünü siler. Retain: Her ikisini de korur.

    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. Manifestoyu uygulayın:

    kubectl apply -f volumesnapshotclass.yaml

Adım 2: Uygulama dağıtın ve veri yazın

  1. Aşağıdaki içeriğe sahip nginx.yaml dosyasını oluşturun:

    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. StatefulSet'i dağıtın:

    kubectl apply -f nginx.yaml
  3. Podun çalıştığını doğrulayın:

    kubectl get pod -l app=nginx

    Beklenen çıktı:

    NAME        READY   STATUS    RESTARTS   AGE
    nginx-0     1/1     Running   0          82s
  4. Birime test verileri yazın:

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

    Beklenen çıktı:

    lost+found test

Adım 3: VolumeSnapshot oluşturun

  1. Aşağıdaki içeriğe sahip snapshot-1.yaml dosyasını oluşturun:

    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. Manifestoyu uygulayın:

    kubectl apply -f snapshot-1.yaml

Adım 4: Anlık görüntüyü doğrulayın

  1. VolumeSnapshot durumunu kontrol edin:

    kubectl get volumesnapshots

    Beklenen çıktı:

    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

    READYTOUSE değeri true olduğunda anlık görüntü hazırdır.

  2. VolumeSnapshotContent değerini kontrol edin:

    kubectl get VolumeSnapshotContent

    Beklenen çıktı:

    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
ECS disk anlık görüntüsü ayrıca ECS konsolunda bulunan Snapshots sayfasında da görünür.

Adım 5 (isteğe bağlı): Verileri yeni bir uygulamaya geri yükleyin

Verileri yeni bir birime geri yüklemek için StatefulSet'in volumeClaimTemplates bölümünde anlık görüntüye başvurun.

  1. nginx-restore.yaml dosyasını oluşturun. dataSource bloğu oluşturduğunuz anlık görüntüye başvurur:

    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. StatefulSet'i dağıtın:

    kubectl apply -f nginx-restore.yaml
  3. Verilerin geri yüklendiğini doğrulayın:

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

    Beklenen çıktı:

    lost+found test

Adım 6 (isteğe bağlı): Verileri bağımsız bir PVC'ye geri yükleyin

Bir iş yükü dağıtmadan verileri geri yüklemek için doğrudan anlık görüntüden bir PVC oluşturun.

  1. Aşağıdaki içeriğe sahip pvc-restore.yaml dosyasını oluşturun:

    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. PVC'yi oluşturun:

    alicloud-disk-topology-alltype StorageClass volumeBindingMode: WaitForFirstConsumer kullanır. PVC bir bölüme bağlanana kadar Pending durumunda kalır. PVC bağlanmadan önce VolumeSnapshot, VolumeSnapshotContent veya altta yatan ECS anlık görüntüsünü silmeyin.
    kubectl apply -f pvc-restore.yaml

Mevcut bir disk anlık görüntüsünü içe aktarın

Önce bir uygulama dağıtmadan mevcut bir ECS disk anlık görüntüsünü bir ACK kümesine içe aktarın.

Adım 1: VolumeSnapshotContent oluşturun

Bu bir yönetici görevidir.
  1. snapshot-content.yaml dosyasını oluşturun. Snapshots sayfasından alınan anlık görüntü kimliğiyle <YOUR-SNAPSHOTID> ifadesini değiştirin: ECS konsolu


    Parametre


    Açıklama


    snapshotHandle


    Mevcut ECS disk anlık görüntüsünün kimliği.


    volumeSnapshotRef.name


    İlişkilendirilecek VolumeSnapshot adı. VolumeSnapshot manifestosundaki metadata.name ile eşleşmelidir.


    volumeSnapshotRef.namespace


    VolumeSnapshot ad alanı.

    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. Manifestoyu uygulayın:

    kubectl apply -f snapshot-content.yaml

Adım 2: VolumeSnapshot oluşturun ve ilişkilendirin

  1. Aşağıdaki içeriğe sahip snapshot-2.yaml dosyasını oluşturun:


    Parametre


    Açıklama


    metadata.name


    VolumeSnapshot adı. VolumeSnapshotContent içindeki volumeSnapshotRef.name ile eşleşmelidir.


    volumeSnapshotContentName


    İlişkilendirilecek VolumeSnapshotContent adı.

    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. Manifestoyu uygulayın:

    kubectl apply -f snapshot-2.yaml

Adım 3 (isteğe bağlı): Verileri geri yükleyin

İlişkilendirmeden sonra dinamik anlık görüntü iş akışının Adım 5 ve Adım 6 bölümlerinde açıklandığı gibi verileri geri yükleyin.