Konteynerler başarısız olduğunda, konteyner depolamasında saklanan stateful uygulama verileri kaybolabilir veya güvenilirliğini yitirebilir. Kalıcı depolama bu riski ortadan kaldırır. Bu konu, kalıcı depolamayı uygulamak amacıyla dinamik olarak sağlanan disklerin nasıl kullanılacağını açıklar.
Çalışma mantığı
Bir StorageClass'a başvuran bir PVC oluşturun.
PVC'ye başvuran bir birim içeren uygulamanızı dağıtın.
Sağlayıcı, otomatik olarak bir disk oluşturur ve bunu PV olarak PVC'ye bağlar.
Her ACK kümesi varsayılan olarak bir sağlayıcı içerir.
Ön koşullar
Bir ACK yönetilen kümesi oluşturulmuştur.
kubectl, kümeye bağlıdır.
Kümede bir disk sağlayıcısı yüklüdür.
Varsayılan StorageClass'lar
ACK, küme başlatma sırasında dört varsayılan StorageClass oluşturur. Bunlar yalnızca tek alanlı kümeler için çalışır. Çok alanlı kümeler için özel bir StorageClass oluşturun.
| StorageClass adı | Disk türü | Açıklama |
|---|---|---|
alicloud-disk-common |
Temel disk | Standart temel depolama |
alicloud-disk-efficiency |
Gelişmiş SSD (ESSD) | Dengeli performans ve maliyet |
alicloud-disk-ssd |
SSD | Yüksek performanslı depolama |
alicloud-disk-available |
Yüksek kullanılabilirlik | Müsaitse SSD oluşturur; yoksa ultra diske geri döner. |
Özel bir StorageClass oluşturma
Varsayılanlar ihtiyaçlarınızı karşılamıyorsa (örneğin çok alanlı kümelerde) özel bir StorageClass oluşturun.
-
storageclass.yamladlı bir dosya oluşturun:kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: alicloud-disk-ssd-hangzhou-b provisioner: alicloud/disk reclaimPolicy: Retain parameters: type: cloud_ssd regionId: cn-hangzhou zoneId: cn-hangzhou-b fstype: "ext4" readonly: "false" -
StorageClass'ı oluşturun:
kubectl create -f storageclass.yaml
StorageClass parametreleri
| Parametre | Açıklama |
|---|---|
provisioner |
Disk sağlayıcı eklentisi. alicloud/disk olarak ayarlayın. |
reclaimPolicy |
PVC silindiğinde disk davranışı. Geçerli değerler: Delete, Retain. Varsayılan: Delete. |
type |
Disk türü. Geçerli değerler: cloud, cloud_efficiency, cloud_ssd, available. |
regionId |
Disk bölgesi. Küme bölgesiyle eşleşmelidir. İsteğe bağlı. |
zoneId |
Disk alanı. İsteğe bağlı. Tek alanlı küme: alan kimliği. Çok alanlı küme: virgülle ayrılmış kimlikler (örneğin, cn-hangzhou-a,cn-hangzhou-b,cn-hangzhou-c). |
fstype |
Dosya sistemi türü. İsteğe bağlı. Varsayılan: ext4. |
readonly |
Diskin salt okunur olup olmadığı. İsteğe bağlı. Geçerli değerler: true, false. Varsayılan: false. |
encrypted |
Diskin şifrelenip şifrelenmeyeceği. İsteğe bağlı. Geçerli değerler: true, false. Varsayılan: false. |
reclaimPolicy değerini Delete olarak ayarlarsanız, PVC'yi sildiğinizde disk otomatik olarak silinir. Disk verileri kurtarılamaz.
PVC oluşturma
-
pvc-ssd.yamladlı bir dosya oluşturun:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: disk-ssd spec: accessModes: - ReadWriteOnce storageClassName: alicloud-disk-ssd-hangzhou-b resources: requests: storage: 20Gi -
PVC'yi oluşturun:
kubectl create -f pvc-ssd.yaml
Deployment oluşturma
-
pvc-dynamic.yamladlı bir dosya oluşturun:apiVersion: apps/v1 kind: Deployment metadata: name: nginx-dynamic labels: app: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx volumeMounts: - name: disk-pvc mountPath: "/data" volumes: - name: disk-pvc persistentVolumeClaim: claimName: disk-ssd -
Deployment'ı oluşturun:
kubectl create -f nginx-dynamic.yaml
Kalıcı depolamayı doğrulama
Diskin bağlandığını ve pod yeniden başlatmaları arasında verilerin korunduğunu onaylayın.
Diskin bağlı olduğunu onaylama
-
Pod adını bulun:
kubectl get pod | grep dynamicBeklenen çıktı:
nginx-dynamic-5c74594ccb-zl9pf 2/2 Running 0 3m -
Diskin
/datakonumuna bağlı olduğunu doğrulayın:kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- df | grep dataBeklenen çıktı:
/dev/vdh 20511312 45080 20449848 1% /data -
/dataiçindeki dosyaları listeleyin:kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- ls /dataBeklenen çıktı:
lost+found
Test verisi yazma ve kalıcılığı doğrulama
-
Disk üzerinde bir test dosyası oluşturun:
kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- touch /data/dynamic -
Dosyanın var olduğunu onaylayın:
kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- ls /dataBeklenen çıktı:
dynamic lost+found -
Yeni bir pod tetiklemek için mevcut pod'u silin:
kubectl delete pod nginx-dynamic-5c74594ccb-zl9pfBeklenen çıktı:
pod "nginx-dynamic-5c74594ccb-zl9pf" deleted -
Ayrı bir terminalde pod yaşam döngüsünü izleyin:
kubectl get pod -w -l app=nginxBeklenen çıktı:
NAME READY STATUS RESTARTS AGE nginx-dynamic-5c74594ccb-zl9pf 2/2 Running 0 6m48s nginx-dynamic-5c74594ccb-zl9pf 2/2 Terminating 0 7m32s nginx-dynamic-5c74594ccb-45sd4 0/2 Pending 0 0s nginx-dynamic-5c74594ccb-45sd4 0/2 Pending 0 0s nginx-dynamic-5c74594ccb-45sd4 0/2 Init:0/1 0 0s nginx-dynamic-5c74594ccb-zl9pf 0/2 Terminating 0 7m32s nginx-dynamic-5c74594ccb-zl9pf 0/2 Terminating 0 7m33s nginx-dynamic-5c74594ccb-zl9pf 0/2 Terminating 0 7m33s nginx-dynamic-5c74594ccb-45sd4 0/2 PodInitializing 0 5s nginx-dynamic-5c74594ccb-45sd4 2/2 Running 0 22s -
Yeni pod'un adını alın:
kubectl get podBeklenen çıktı:
NAME READY STATUS RESTARTS AGE nginx-dynamic-5c74594ccb-45sd4 2/2 Running 0 2m -
Test dosyasının yeni pod'da hala var olduğunu doğrulayın:
kubectl exec nginx-dynamic-5c74594ccb-45sd4 -- ls /dataBeklenen çıktı:
dynamic lost+founddynamicdosyası, pod yeniden oluşturulduğunda da korunur; bu durum diskin kalıcı depolama sağladığını doğrular.