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:
|
|
|
|
|
|
|
|
|
|
|
|
VolumeSnapshot ve VolumeSnapshotContent, tıpkı PVC ve PV gibi birebir eşleşir:
volumeSnapshotClassNamegeçerli bir VolumeSnapshotClass olarak ayarlanmışsa ACK otomatik olarak bir VolumeSnapshotContent sağlar.volumeSnapshotClassNameatlanırsa veya geçersizse bir VolumeSnapshotContent manuel olarak oluşturun ve bunu VolumeSnapshot ile ilişkilendirin.
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:
|
|
|
|
|
|
|
|
|
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.

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.
-
Aşağıdaki içeriğe sahip
volumesnapshotclass.yamldosyasını oluşturun:
Parametre
AçıklamaretentionDays
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".deletionPolicyDelete: 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 -
Manifestoyu uygulayın:
kubectl apply -f volumesnapshotclass.yaml
Adım 2: Uygulama dağıtın ve veri yazın
-
Aşağıdaki içeriğe sahip
nginx.yamldosyası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 -
StatefulSet'i dağıtın:
kubectl apply -f nginx.yaml -
Podun çalıştığını doğrulayın:
kubectl get pod -l app=nginxBeklenen çıktı:
NAME READY STATUS RESTARTS AGE nginx-0 1/1 Running 0 82s -
Birime test verileri yazın:
kubectl exec -it nginx-0 -- touch /data/test kubectl exec -it nginx-0 -- ls /dataBeklenen çıktı:
lost+found test
Adım 3: VolumeSnapshot oluşturun
-
Aşağıdaki içeriğe sahip
snapshot-1.yamldosyası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 -
Manifestoyu uygulayın:
kubectl apply -f snapshot-1.yaml
Adım 4: Anlık görüntüyü doğrulayın
-
VolumeSnapshot durumunu kontrol edin:
kubectl get volumesnapshotsBeklenen çı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 28sREADYTOUSEdeğeritrueolduğunda anlık görüntü hazırdır. -
VolumeSnapshotContent değerini kontrol edin:
kubectl get VolumeSnapshotContentBeklenen çı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.
-
nginx-restore.yamldosyasını oluşturun.dataSourcebloğ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 -
StatefulSet'i dağıtın:
kubectl apply -f nginx-restore.yaml -
Verilerin geri yüklendiğini doğrulayın:
kubectl exec -it nginx-restore-0 -- ls /dataBeklenen çı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.
-
Aşağıdaki içeriğe sahip
pvc-restore.yamldosyası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 -
PVC'yi oluşturun:
alicloud-disk-topology-alltypeStorageClassvolumeBindingMode: WaitForFirstConsumerkullanır. PVC bir bölüme bağlanana kadarPendingdurumunda 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.
-
snapshot-content.yamldosyası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çıklamasnapshotHandle
Mevcut ECS disk anlık görüntüsünün kimliği.volumeSnapshotRef.name
İlişkilendirilecek VolumeSnapshot adı. VolumeSnapshot manifestosundakimetadata.nameile 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 -
Manifestoyu uygulayın:
kubectl apply -f snapshot-content.yaml
Adım 2: VolumeSnapshot oluşturun ve ilişkilendirin
-
Aşağıdaki içeriğe sahip
snapshot-2.yamldosyasını oluşturun:
Parametre
Açıklamametadata.name
VolumeSnapshot adı. VolumeSnapshotContent içindekivolumeSnapshotRef.nameile 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 -
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.