Tüm Ürünler
Search
Belge Merkezi

Container Service for Kubernetes:Use dynamically provisioned disks for stateful applications

Son Güncelleme:Oct 06, 2026

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ığı

  1. Bir StorageClass'a başvuran bir PVC oluşturun.

  2. PVC'ye başvuran bir birim içeren uygulamanızı dağıtın.

  3. 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

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.

  1. storageclass.yaml adlı 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"
  2. 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.
Not

reclaimPolicy değerini Delete olarak ayarlarsanız, PVC'yi sildiğinizde disk otomatik olarak silinir. Disk verileri kurtarılamaz.

PVC oluşturma

  1. pvc-ssd.yaml adlı 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
  2. PVC'yi oluşturun:

        kubectl create -f pvc-ssd.yaml

Deployment oluşturma

  1. pvc-dynamic.yaml adlı 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
  2. 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

  1. Pod adını bulun:

        kubectl get pod | grep dynamic

    Beklenen çıktı:

        nginx-dynamic-5c74594ccb-zl9pf     2/2     Running     0          3m
  2. Diskin /data konumuna bağlı olduğunu doğrulayın:

        kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- df | grep data

    Beklenen çıktı:

        /dev/vdh        20511312    45080  20449848   1% /data
  3. /data içindeki dosyaları listeleyin:

        kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- ls /data

    Beklenen çıktı:

        lost+found

Test verisi yazma ve kalıcılığı doğrulama

  1. Disk üzerinde bir test dosyası oluşturun:

        kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- touch /data/dynamic
  2. Dosyanın var olduğunu onaylayın:

        kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- ls /data

    Beklenen çıktı:

        dynamic
        lost+found
  3. Yeni bir pod tetiklemek için mevcut pod'u silin:

        kubectl delete pod nginx-dynamic-5c74594ccb-zl9pf

    Beklenen çıktı:

        pod "nginx-dynamic-5c74594ccb-zl9pf" deleted
  4. Ayrı bir terminalde pod yaşam döngüsünü izleyin:

        kubectl get pod -w -l app=nginx

    Beklenen çı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
  5. Yeni pod'un adını alın:

        kubectl get pod

    Beklenen çıktı:

        NAME                               READY   STATUS      RESTARTS   AGE
        nginx-dynamic-5c74594ccb-45sd4     2/2     Running     0          2m
  6. Test dosyasının yeni pod'da hala var olduğunu doğrulayın:

        kubectl exec nginx-dynamic-5c74594ccb-45sd4 -- ls /data

    Beklenen çıktı:

        dynamic
        lost+found

    dynamic dosyası, pod yeniden oluşturulduğunda da korunur; bu durum diskin kalıcı depolama sağladığını doğrular.