Tüm Ürünler
Search
Belge Merkezi

Container Service for Kubernetes:Use dynamic volumes and cloud disks

Son Güncelleme:Oct 06, 2026

Veritabanları ve ara katmanlar gibi yoğun G/Ç gerektiren ve gecikmeye duyarlı iş yükleri için ideal olan dinamik birim mekanizması, her uygulama çoğaltması için otomatik olarak özel bir cloud disk oluşturup bağlayarak depolama yaşam döngüsü yönetimini basitleştirir.

Nasıl çalışır

StatefulSet, cloud diskleri aşağıdaki süreçle dinamik depolama birimleri olarak kullanır:

  1. Bir şablon tanımlayın veya varsayılan StorageClass'ı şablon olarak kullanarak cloud diskleri dinamik şekilde oluşturun. StorageClass; disk türü, performans ve geri alma ilkesi gibi temel parametreleri belirtir.

  2. Uygulamada depolama gereksinimlerini belirtin

    StatefulSet içinde volumeClaimTemplates tanımlayın ve PVC'ler için depolama kapasitesi ile erişim modunu belirtmek üzere StorageClass'a referans verin.

  3. Depolama birimlerini otomatik olarak oluşturun ve bağlayın StatefulSet bir Pod oluşturduğunda sistem, şablona göre Pod için benzersiz bir PVC otomatik olarak oluşturur. Ardından CSI bileşeni, StorageClass'a dayalı bir PV oluşturur, PV'yi PVC'ye bağlar ve ilgili cloud diski Pod'a monte eder.

Önkoşullar

  • Kullanılabilirlik alanı sınırlamaları: ESSD bölge yedekli cloud diskler hariç, diğer cloud disk türleri yalnızca aynı kullanılabilirlik alanındaki podlara eklenebilir.

  • Örnek tür ailesi sınırlamaları: Bazı cloud disk türleri yalnızca belirli örnek tür ailelerine eklenebilir.

  • CSI bileşen gereksinimleri: csi-plugin ve csi-provisioner bileşenlerinin yüklü olması gerekir.

    CSI bileşenleri varsayılan olarak yüklüdür. Yüklü olduklarından emin olmak için Add-ons sayfasını kontrol edin. CSI bileşenlerini en son sürüme yükseltmenizi öneririz.
  • Sanal düğüm sınırlamaları: Sanal düğümde cloud disk kullanmak için kümeniz ve kube-scheduler aşağıdaki sürüm gereksinimlerini karşılamalıdır.

    Sürüm gereksinimleri


    Küme sürümü


    Kube-scheduler sürümü


    1,28 veya üzeri


    6.9.3 veya üzeri


    1,26


    6.8.7


    1,24


    6.4.7


    1,22


    6.4.5

  • Lingjun Node sınırlamaları: Lingjun Node üzerinde cloud disk kullanmak için aşağıdaki gereksinimleri karşılamanız gerekir.

    Gereksinimler

Adım 1: Bir StorageClass seçin

ACK birkaç varsayılan StorageClass sağlar. StorageClass oluşturulduktan sonra değiştirilemediğinden, varsayılan yapılandırmalar gereksinimlerinizi karşılamıyorsa manuel olarak bir StorageClass oluşturabilirsiniz.

Varsayılan StorageClass

Aşağıdaki varsayılan StorageClass'lardan birini seçebilir ve adını uygulamanızın storageClassName alanında referans olarak kullanabilirsiniz.

Storageclass adı

Sağlanan disk türü

alicloud-disk-topology-alltype (Önerilen)

Bu StorageClass, Cloud Disk oluşturmadan önce Pod'u zamanlar; bu sayede kullanılabilirlik alanı uyumsuzluklarından kaynaklanan bağlama hatalarını önler (volumeBindingMode: WaitForFirstConsumer). Sistem, node'un kullanılabilirlik alanını ve örnek türünü mevcut Cloud Disk envanteriyle birlikte dikkate alır ve disk oluşturmayı şu sırayla dener: ESSD, SSD cloud disk ve ultra disk. Varsayılan olarak, minimum 20 GiB kapasiteli bir ESSD PL1 disk oluşturmayı önceliklendirir.

alicloud-disk-essd

Bir ESSD sağlar. Varsayılan performans düzeyi PL1'dir ve minimum disk kapasitesi 20 GiB'dir.

Önemli

Cloud Box'taki ESSD'ler yalnızca PL0 performans düzeyini destekler. Manuel olarak bir StorageClass oluşturmanız ve performanceLevel değerini PL0 olarak belirtmeniz gerekir.

alicloud-disk-ssd

Bir SSD cloud disk sağlar. Minimum disk kapasitesi 20 GiB'dir.

alicloud-disk-efficiency

Bir ultra disk sağlar. Minimum disk kapasitesi 20 GiB'dir.

Bir StorageClass'ın ayrıntılı yapılandırmasını görüntülemek için kubectl describe sc <storageclass-name> komutunu çalıştırabilirsiniz.

Manuel oluşturma

Kubectl

  1. disk-sc.yaml adlı bir dosya oluşturun.

    Aşağıdaki örnekte, PV bağlamayı geciktirmek için volumeBindingMode: WaitForFirstConsumer kullanan bir StorageClass gösterilmektedir.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      # Name of the StorageClass
      name: alicloud-disk-wait-for-first-consumer
    # Provisioner. This must be set to this value when using the Alibaba Cloud Disk CSI plug-in.
    provisioner: diskplugin.csi.alibabacloud.com
    parameters:
      # Cloud Disk type. The system attempts to create a disk in the specified order.
      type: cloud_auto,cloud_essd,cloud_ssd  
      # File system type
      fstype: ext4
      diskTags: "a:b,b:c"
      encrypted: "false"
      # Performance level for the ESSD
      performanceLevel: PL1 
      provisionedIops: "40000"
      burstingEnabled: "false"
    # Volume binding mode. WaitForFirstConsumer is recommended for multi-AZ scenarios.
    volumeBindingMode: WaitForFirstConsumer
    # Reclaim policy
    reclaimPolicy: Retain
    # Whether to allow volume expansion
    allowVolumeExpansion: true
    # Topology restrictions: Restricts disk creation to the specified availability zones.
    allowedTopologies:
    - matchLabelExpressions:
      - key: topology.diskplugin.csi.alibabacloud.com/zone
        values:
        # Replace with your availability zones
        - cn-hangzhou-i
        - cn-hangzhou-k

    Aşağıdaki tabloda ana parametreler açıklanmaktadır.

    Parametre

    Açıklama

    provisioner

    Sağlayıcı. Alibaba Cloud Disk CSI eklentisi kullanılırken bu zorunlu parametre diskplugin.csi.alibabacloud.com olarak ayarlanmalıdır.

    parameters

    type

    Cloud Disk türü. Bu zorunlu bir parametredir. Geçerli değerler şunlardır:

    Virgülle ayrılmış bir tür listesi belirtebilirsiniz, örneğin type: cloud_ssd,cloud_essd,cloud_auto. Sistem belirtilen sırayla disk oluşturmayı dener. Nihai disk türü, node'un örnek türü ve kullanılabilirlik alanında bulunan disk türleri gibi faktörlere bağlıdır.

    resourceGroupId

    Cloud Disk için kaynak grubu. Varsayılan: "".

    regionId

    Cloud Disk'in bölgesi; kümenin bölgesiyle aynı olmalıdır.

    fstype

    Cloud Disk için dosya sistemi. Geçerli değerler: ext4 (varsayılan) ve xfs.

    mkfsOptions

    Cloud Disk için biçimlendirme seçenekleri, örneğin mkfsOptions: "-O project,quota".

    diskTags

    Cloud Disk için etiketler. Örneğin, diskTags: "a:b,b:c". Ayrıca diskTags/a: b formatını da kullanabilirsiniz. CSI bileşen sürümü v1.30.3 veya üzeri gerektirir.

    encrypted

    Cloud Disk'in şifrelenip şifrelenmeyeceğini belirtir. Varsayılan: false.

    performanceLevel

    ESSD'nin performans düzeyi. Geçerli değerler PL0, PL1 (varsayılan), PL2 ve PL3'tür.

    Cloud Box ile kullanıldığında bu değer PL0 olarak ayarlanmalıdır.

    volumeExpandAutoSnapshot (Kullanımdan Kaldırıldı)

    CSI sürüm 1.31.4'ten itibaren kullanımdan kaldırıldı.

    provisionedIops

    Bir ESSD AutoPL cloud disk için sağlanan IOPS değerini ayarlar.

    burstingEnabled

    Bir ESSD AutoPL cloud disk için patlama özelliğinin etkinleştirilip etkinleştirilmeyeceğini belirtir. Varsayılan: false.

    multiAttach

    Cloud Disk için çoklu ekleme özelliğinin etkinleştirilip etkinleştirilmeyeceğini belirtir. Varsayılan: false.

    volumeBindingMode

    Cloud Disk için birim bağlama modu. Geçerli değerler:

    • Immediate (varsayılan): Pod oluşturulmadan önce Cloud Disk'i oluşturur.

    • WaitForFirstConsumer: Bağlamayı geciktirir. Önce Pod'u zamanlar, ardından Cloud Disk'i Pod'un kullanılabilirlik alanında oluşturur.

      Çok AZ'li kümelerde, bir Cloud Disk ile node'un farklı kullanılabilirlik alanlarında bulunmasından kaynaklanabilecek bağlama hatalarını önlemek için WaitForFirstConsumer önerilir.

      Pod'ları sanal node'lara zamanlamanız gerekiyorsa, WaitForFirstConsumer türündeki bir StorageClass kullanımı belirli zamanlama yöntemleri veya belirli açıklamalarla desteklenmez. Daha fazla bilgi için bkz. Cloud Disk içeren bir Pod sanal node'a zamanlandığında PVC neden Bekliyor durumunda kalır?.

    reclaimPolicy

    Cloud Disk için geri alma ilkesi.

    • Delete (varsayılan): PVC silindiğinde PV ve altta yatan Cloud Disk de silinir.

    • Retain: PVC silindiğinde PV ve altta yatan Cloud Disk saklanır.

      Kaza sonucu veri kaybını önlemek için Retain ilkesini kullanmanızı öneririz.

    allowVolumeExpansion

    true olarak ayarlandığında Cloud Disklerin çevrimiçi genişletilmesine olanak tanır.

    allowedTopologies

    Cloud Disk'in yalnızca belirli topolojik alanlarda sağlanmasını kısıtlar.

    • key: Topoloji alanı etiketi. Desteklenen değerler şunlardır:

      • topology.diskplugin.csi.alibabacloud.com/zone: Alibaba Cloud CSI eklentisi tarafından sağlanan özel bir topoloji anahtarı.

      • alibabacloud.com/ecs-instance-id: Elastik geçici disk kullanırken bir node belirtmek için bunu kullanabilirsiniz.

    • values: Kullanılabilirlik alanı veya node kimliklerini içeren bir liste.

  2. StorageClass'ı oluşturun.

    kubectl create -f disk-sc.yaml
  3. StorageClass'ı doğrulayın.

    kubectl get sc

    Çıktı, StorageClass'ın WaitForFirstConsumer bağlama moduyla oluşturulduğunu gösterir.

    NAME                                    PROVISIONER                       RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
    alicloud-disk-wait-for-first-consumer   diskplugin.csi.alibabacloud.com   Retain          WaitForFirstConsumer   true                   10s

Konsol

  1. ACK Kümeleri sayfasında kümenizin adına tıklayın. Sol gezinme bölmesinde Volumes > StorageClasses seçeneğine tıklayın.

  2. Create öğesine tıklayın, Birim Türü olarak Cloud Disk seçeneğini belirleyin, parametreleri yapılandırın ve ardından Create öğesine tıklayın.

    Parametre

    Açıklama

    Parametreler

    • Varsayılan parametre: type.

      Cloud Disk türü. Bu zorunlu bir parametredir. Geçerli değerler şunlardır:

      Virgülle ayrılmış bir tür listesi belirtebilirsiniz, örneğin type: cloud_ssd,cloud_essd,cloud_auto. Sistem belirtilen sırayla disk oluşturmayı dener. Nihai disk türü, node'un örnek türü ve kullanılabilirlik alanında bulunan disk türleri gibi faktörlere bağlıdır.

    • İsteğe Bağlı Parametreleri Göster

      • resourceGroupId: Cloud Disk için kaynak grubu. Varsayılan: "".

      • regionId: Cloud Disk'in bölgesi; kümenin bölgesiyle aynı olmalıdır.

      • fstype: Cloud Disk için dosya sistemi. Geçerli değerler: ext4 (varsayılan) ve xfs.

      • mkfsOptions: Cloud Disk için biçimlendirme seçenekleri, örneğin mkfsOptions: "-O project,quota".

      • diskTags: Cloud Disk için etiketler. Örneğin, diskTags: "a:b,b:c". Ayrıca diskTags/a: b formatını da kullanabilirsiniz. CSI bileşen sürümü v1.30.3 veya üzeri gerektirir.

      • encrypted: Cloud Disk'in şifrelenip şifrelenmeyeceğini belirtir. Varsayılan: false.

      • performanceLevel: ESSD'nin performans düzeyi. Geçerli değerler PL0, PL1 (varsayılan), PL2 ve PL3'tür.

        Cloud Box ile kullanıldığında bu değer PL0 olarak ayarlanmalıdır.
      • provisionedIops: Bir ESSD AutoPL cloud disk için sağlanan IOPS değerini ayarlar.

      • burstingEnabled: Bir ESSD AutoPL cloud disk için patlama özelliğinin etkinleştirilip etkinleştirilmeyeceğini belirtir. Varsayılan: false.

      • multiAttach: Cloud Disk için çoklu ekleme özelliğinin etkinleştirilip etkinleştirilmeyeceğini belirtir. Varsayılan: false.

    Geri alma ilkesi

    Cloud Disk için geri alma ilkesi.

    • Delete (varsayılan): PVC silindiğinde PV ve altta yatan Cloud Disk de silinir.

    • Retain: PVC silindiğinde PV ve altta yatan Cloud Disk saklanır.

      Kaza sonucu veri kaybını önlemek için Retain ilkesini kullanmanızı öneririz.

    Binding Mode

    Cloud Disk için birim bağlama modu. Geçerli değerler:

    • Immediate (varsayılan): Pod oluşturulmadan önce Cloud Disk'i oluşturur.

    • WaitForFirstConsumer: Bağlamayı geciktirir. Önce Pod'u zamanlar, ardından Cloud Disk'i Pod'un kullanılabilirlik alanında oluşturur.

      Çok AZ'li kümelerde, bir Cloud Disk ile node'un farklı kullanılabilirlik alanlarında bulunmasından kaynaklanabilecek bağlama hatalarını önlemek için WaitForFirstConsumer önerilir.

      Pod'ları sanal node'lara zamanlamanız gerekiyorsa, WaitForFirstConsumer türündeki bir StorageClass kullanımı belirli zamanlama yöntemleri veya belirli açıklamalarla desteklenmez. Daha fazla bilgi için bkz. Cloud Disk içeren bir Pod sanal node'a zamanlandığında PVC neden Bekliyor durumunda kalır?.

    Yeni StorageClass, StorageClasses sayfasında görünür.

Adım 2: Cloud diskli bir uygulama oluşturun

Bu bölümde, bir Cloud Disk biriminin nasıl monte edileceğini göstermek için örnek olarak bir StatefulSet kullanılmaktadır.

Önemli

Cloud Disk paylaşılmayan depolama sağlar ve çoklu ekleme etkinleştirilmedikçe aynı anda yalnızca bir Pod'a monte edilebilir. Çok çoğaltmalı bir Dağıtımda bir PVC'nin paylaşılması, Cloud Disk başka bir Pod tarafından zaten kullanılıyorsa yeni Pod'ların başlatılmasını engelleyebilir.

Bir Dağıtımla birlikte hâlâ Cloud Disk kullanmanız gerekiyorsa geçici birim olarak Cloud Disk kullanmayı düşünebilirsiniz. Çoklu eklemeyi etkinleştirmek için bkz. Çoklu ekleme ve rezervasyon ile NVMe tabanlı Cloud Diskleri kullanma.

  1. statefulset.yaml adlı bir dosya oluşturun.

    Aşağıdaki örnekte iki Pod içeren bir StatefulSet oluşturulur. Her Pod için bağımsız bir kalıcı birimi otomatik olarak oluşturmak ve bağlamak amacıyla volumeClaimTemplates kullanılır.
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: web
    spec:
      serviceName: "nginx"
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          # We recommend configuring the following securityContext to optimize mount performance.
          securityContext:
            fsGroup: 1000
            fsGroupChangePolicy: "OnRootMismatch"
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80
            volumeMounts:
            # Mount the data volume to the /data directory in the container.
            # The name must match metadata.name defined in volumeClaimTemplates.
            - name: pvc-disk
              mountPath: /data
      # Define the PVC template.
      volumeClaimTemplates:
      - metadata:
          name: pvc-disk
        spec:
          # Access mode
          accessModes: [ "ReadWriteOnce" ]
          # Associate with the StorageClass created earlier.
          storageClassName: "alicloud-disk-wait-for-first-consumer"
          resources:
            requests:
              # Requested storage capacity, which is the size of the Cloud Disk.
              storage: 20Gi
    Önemli

    securityContext.fsgroup yapılandırırken, kubelet bir birimi monte ederken dosya izinlerini yinelemeli olarak değiştirir (chmod/chown). Bu durum, çok sayıda dosya içeren birimler için montaj süresini önemli ölçüde artırabilir.

    1,20 veya sonraki sürümlere sahip kümeler için fsGroupChangePolicy değerini OnRootMismatch olarak ayarlamanızı öneririz. Bu ayar, yalnızca birim ilk kez monte edildiğinde ve kök dizin izinleri eşleşmediğinde yinelemeli izin değişikliği gerçekleştirerek montaj performansını optimize eder. Performans sorunları devam ederse veya daha ayrıntılı izin denetimine ihtiyaç duyuyorsanız, uygulama konteyneri başlamadan önce izinleri yönetmek için bir initContainer kullanın.

  2. StatefulSet'i oluşturun.

    kubectl create -f statefulset.yaml
  3. Pod'ların çalıştığını doğrulayın.

    kubectl get pod -l app=nginx
  4. Cloud Disk'in monte edildiğini doğrulayın.

    Bu örnekte Pod adı web-1 şeklindedir. Bunu kendi Pod adınızla değiştirin.
    kubectl exec web-1 -- df -h /data

    Beklenen çıktı:

    Filesystem      Size  Used Avail Use% Mounted on
    /dev/vdb         20G   24K   20G   1% /data

Adım 3: Kalıcı depolamayı doğrulayın

Cloud diskteki verilerin kalıcı olduğunu doğrulamak için diske veri yazacak, Pod'u silecek ve ardından Pod yeniden oluşturulduktan sonra verilerin korunduğunu kontrol edeceksiniz.

  1. Pod'a test verileri yazın.

    web-1 Pod'unda, cloud disk için bağlama noktası olan /data dizininde test adlı bir dosya oluşturun.

    kubectl exec web-1 -- touch /data/test
    kubectl exec web-1 -- ls /data

    Beklenen çıktı:

    lost+found
    test
  2. Pod'u silerek bir Pod arızasını simüle edin.

    kubectl delete pod web-1

    Tekrar kubectl get pod -l app=nginx komutunu çalıştırın. Aynı ada sahip yeni bir Pod olan web-1 otomatik olarak oluşturulur.

  3. Yeni Pod'daki verileri doğrulayın.

    Yeni web-1 Pod'unda /data dizinini tekrar kontrol edin.

    kubectl exec web-1 -- ls /data

    Çıktı, test dosyasının hâlâ mevcut olduğunu doğrular. Bu durum, Pod silinip yeniden oluşturulsa bile kalıcı depolamanın verileri koruduğunu gösterir.

    lost+found
    test

Üretim dağıtımı

  • Yüksek kullanılabilirlik

    • Cloud disk seçimi

      Pod'larınızın uyumlu node'lara zamanlandığından emin olmak için performans, faturalama, kullanılabilirlik alanları ve örnek tür aileleri gibi faktörleri değerlendirin.

      Bir cloud disk türü seçerken SSD cloud disklerin ve Ultra cloud disklerin kullanımının aşamalı olarak durdurulduğunu unutmayın. Ultra cloud disklerin yerine ESSD PL0 cloud diskleri veya ESSD Entry cloud diskleri, SSD cloud disklerin yerine ise ESSD AutoPL cloud diskleri kullanmanızı öneririz.

    • AZ'ler arası olağanüstü durum kurtarma

      • Uygulama düzeyinde olağanüstü durum kurtarma: Veritabanları gibi kritik iş yükleri için uygulama örneklerini birden fazla kullanılabilirlik alanında dağıtın ve yüksek kullanılabilirlik için uygulamanın yerel veri senkronizasyon mekanizmasını kullanın.

      • Depolama düzeyinde olağanüstü durum kurtarma: Çok AZ'li olağanüstü durum kurtarmayı destekleyen bir cloud disk türü seçin. Bu özellik, verileri aynı bölgedeki farklı kullanılabilirlik alanlarına eşzamanlı olarak yazar ve AZ'ler arası yük devretmeyi etkinleştirir. Daha fazla bilgi için bkz. ESSD Birlikte Konumlandırılmış Yedekli Diskleri Kullanma.

  • Veri güvenliği ve yedekleme

    • Kaza sonucu veri silmeyi önleme:

      Veri kaybını önlemek için StorageClass'ın reclaimPolicy değerini Retain olarak ayarlayın. Bu sayede PVC silindiğinde altta yatan cloud disk saklanır ve veri kurtarma işlemi kolaylaşır.

    • Düzenli yedeklemeler

      Dinamik birimler kaynak sağlamayı basitleştirir ancak veri yedeklemelerinin yerine geçmez. Kritik iş yükleri için verilerinizi yedeklemek ve geri yüklemek amacıyla Yedekleme Merkezi kullanın.

    • Durağan halde şifreleme: Hassas verilerle çalışan uygulamalar için cloud diskleri şifrelemek üzere StorageClass'ta encrypted: "true" yapılandırmasını yapın.

  • Performans ve maliyet optimizasyonu

Faturalama

Bir StorageClass tarafından dinamik olarak sağlanan cloud diskler kullandıkça öde faturalandırma modelini kullanır. Daha fazla bilgi için bkz. blok depolama faturalandırması ve blok depolama fiyatlandırması.

Kaynakları temizleyin

Beklenmeyen ücretlendirmeleri önlemek ve veri güvenliğini sağlamak için kullanılmayan kaynakları serbest bırakmak üzere aşağıdaki adımları izleyin.

  1. İş yükünü silin

    • Eylem: İlişkili Kalıcı Birim Talebini (PVC) kullanan Dağıtımlar ve StatefulSet'ler gibi tüm uygulamaları silin. Bu işlem çalışan Pod'ları durdurur ve ilişkili birimleri söker.

      Örnek komut: kubectl delete deployment <your-deployment-name>

  2. PVC'yi silin

    • Eylem: Uygulamanızla ilişkili PVC'yi silin. StorageClass'ın reclaimPolicy değeri, bağlı Kalıcı Birimin (PV) ve altta yatan cloud diskin serbest bırakılmasını belirler.

      • Delete: İlke Delete ise PVC'yi silmek, buna bağlı PV'yi ve altta yatan cloud diski de siler. Bu işlem geri alınamaz. Dikkatli ilerleyin.

        Kaza sonucu veri kaybını önlemek için silmeden önce cloud diski yedeklemek üzere otomatik anlık görüntü ilkesi oluşturabilirsiniz .
      • Retain: İlke Retain ise PVC'yi silmek, buna bağlı PV'nin durumunu Released olarak değiştirir ancak PV nesnesi ve altta yatan cloud disk saklanır. Cloud diske ve üzerindeki verilere artık ihtiyacınız yoksa diski silmek için Cloud disk serbest bırakma bölümündeki talimatları izleyin. Bu işlem geri alınamaz. Dikkatli ilerleyin.

      Örnek komut: kubectl delete pvc <your-pvc-name>

  3. Kubernetes depolama kaynak tanımlarını silin. Bu işlem yalnızca kaynak tanımlarını kümeden kaldırır ve altta yatan cloud diski silmez.

    • PV'yi silin

      • Eylem: Released durumundaki bir PV için kaynak tanımını manuel olarak silebilirsiniz.

      • Örnek komut: kubectl delete pv <your-pv-name>

    • StorageClass'ı silin

      • Eylem: Bu tür bir depolamaya artık ihtiyacınız yoksa ilgili StorageClass'ı silebilirsiniz.

      • Örnek komut: kubectl delete sc <your-storageclass-name>

SSS

PVC, sanal node'a zamanlandığında Pending durumunda takılı kalıyor

Bu sorun, sanal node'lara zamanlamayı desteklemeyen bir StorageClass kullandığınızda ortaya çıkabilir. Belirli etiketler veya açıklamalar kullanarak bir pod'u sanal node'a zamanladığınızda volumeBindingMode: WaitForFirstConsumer ile yapılandırılmış bir StorageClass kullanamazsınız.

  • Neden:WaitForFirstConsumer modu, bir Pod için fiziksel bir node seçmek üzere kube-scheduler'a dayanır. Bu seçim kullanılabilirlik alanını belirler ve ardından o kullanılabilirlik alanında bir cloud disk oluşturulur. Ancak sanal node'lar için zamanlama mekanizması bu süreci takip etmez. Bu durum CSI'nin kullanılabilirlik alanı bilgilerini almasını engeller ve sonuçta PV oluşturulamaz, bu da PVC'nin Bekliyor durumunda kalmasına neden olur.

  • Bu sorunla karşılaşırsanız pod'unuzun veya ad alanınızın aşağıdaki yapılandırmalardan herhangi birine sahip olup olmadığını kontrol edin:

    • Etiket:

      • alibabacloud.com/eci: "true": Pod'u ECI üzerinde çalışacak şekilde zamanlar.

      • alibabacloud.com/acs: "true": Pod'u bir ACS pod'una zamanlar.

    • Node sabitleme:

      • spec.nodeName değerini virtual-kubelet önekine sahip bir node adına ayarlamak pod'u o node'a sabitler.

    • Açıklama:

      • k8s.aliyun.com/eci-vswitch: ECI pod'u için vSwitch'i belirtir.

      • k8s.aliyun.com/eci-fail-strategy: "fail-fast": ECI pod'u için hata stratejisini fail-fast olarak ayarlar.

Tek pod veya tek çoğaltmalı dağıtım için cloud disk monte etme

Çok çoğaltmalı ölçeklendirme veya kararlı ağ tanımlayıcıları gerektirmeyen basit uygulamalar için manuel olarak bir Kalıcı Birim Talebi oluşturabilir ve bunu kalıcı depolama için bir pod'a veya Dağıtıma monte edebilirsiniz.

İş akışı şu şekildedir: Bir StorageClass Seçin -> Bir Kalıcı Birim Talebi Oluşturun -> Kalıcı Birim Talebini uygulamanıza monte edin.

  1. Bir StorageClass hazırlayın.

  2. Depolama kaynaklarını talep etmek için bir Kalıcı Birim Talebi oluşturun.

    kubectl

    1. disk-pvc.yaml adlı bir dosya oluşturun.

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: disk-pvc
      spec:
        # Access mode
        accessModes:
        - ReadWriteOnce
        volumeMode: Filesystem
        resources:
          requests:
            # Requested storage capacity, which is the size of the cloud disk
            storage: 20Gi
        # Associate with the StorageClass created earlier
        storageClassName: alicloud-disk-topology-alltype 

      Aşağıdaki tabloda parametreler açıklanmaktadır.

      Parametre

      Açıklama

      accessModes

      Birim için erişim modları. Geçerli değerler ReadWriteOnce, ReadOnlyMany ve ReadWriteMany'dir. Desteklenen erişim modları, StorageClass'taki multiAttach ayarına ve Kalıcı Birim Talebindeki volumeMode ayarına bağlıdır.

      multiAttach, cloud disk çoklu eklemeyi etkinleştirip etkinleştirmediğini belirtir. Varsayılan değer false'tur; bu, özelliğin devre dışı olduğu anlamına gelir.
      • multiAttach değeri false ve volumeMode herhangi bir değere ayarlandığında desteklenen tek erişim modu ReadWriteOnce'dir.

      • multiAttach değeri true ve volumeMode değeri Filesystem olduğunda desteklenen erişim modları ReadWriteOnce ve ReadOnlyMany'dir.

      • multiAttach değeri true ve volumeMode değeri Block olarak ayarlandığında üç erişim modunun tümü desteklenir.

      Önemli

      Bu senaryoda erişim modu genellikle ReadWriteOnce (RWO) olur; bu, birimin aynı anda yalnızca bir Pod tarafından monte edilebileceği anlamına gelir. Bu nedenle Dağıtım çoğaltma sayısı 1'den büyük olamaz. Ölçeklendirmeye çalışırsanız yeni Pod'lar, zaten kullanımda olan cloud diski monte edemedikleri için Pending durumunda kalır.

      volumeMode

      Birim modu. Geçerli değerler:

      • Filesystem (varsayılan): Birim bir dizin olarak biçimlendirilir ve monte edilir.

      • Block: Birim pod'a ham, biçimlendirilmemiş bir blok aygıtı olarak sağlanır.

      storage

      Talep edilen depolama kapasitesi. Farklı cloud disk türlerinin farklı kapasite aralıkları vardır. Cloud disk oluşturmanın başarısız olmasını önlemek için storage değerinin, başvurulan StorageClass'a karşılık gelen cloud disk türünün kapasite sınırları içinde olduğundan emin olun.

      storageClassName

      Bu talep için kullanılacak StorageClass'ın adı.

    2. Kalıcı Birim Talebini oluşturun.

      kubectl create -f disk-pvc.yaml
    3. Kalıcı Birim Talebini kontrol edin.

      kubectl get pvc

      Çıktıda, StorageClass WaitForFirstConsumer modunu kullandığından PVC, onu kullanan ilk Pod başarıyla zamanlanana kadar Pending durumunda kalır.

      NAME       STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS                            VOLUMEATTRIBUTESCLASS   AGE
      disk-pvc   Pending                                      alicloud-disk-wait-for-first-consumer   <unset>                 14s

    Konsol

    1. Küme yönetimi sayfasının sol gezinme bölmesinde Volumes > Persistent Volume Claims seçeneğine tıklayın.

    2. Persistent Volume Claims sayfasında Create öğesine tıklayın. PVC Type olarak Cloud Disk seçeneğini belirleyin ve istendiği gibi parametreleri yapılandırın.

      Parametre

      Açıklama

      Allocation Mode

      Use StorageClass seçeneğini belirleyin.

      Existing Storage Class

      Varsayılan veya manuel olarak oluşturulmuş bir StorageClass seçin.

      Kapasite

      Talep edilen depolama kapasitesi. Farklı cloud disk türlerinin farklı kapasite aralıkları vardır. Cloud disk oluşturmanın başarısız olmasını önlemek için storage değerinin, başvurulan StorageClass'a karşılık gelen cloud disk türünün kapasite sınırları içinde olduğundan emin olun.

      Access Mode

      Bu senaryo yalnızca ReadWriteOnce erişim modunu destekler; bu, tek bir pod'un birime okuma-yazma erişimiyle monte edebileceği anlamına gelir.

      Kalıcı Birim Talebini oluşturduktan sonra bunu Persistent Volume Claims sayfasında görüntüleyebilirsiniz.

  3. Kalıcı Birim Talebini uygulamanıza monte edin.

    1. disk-deployment.yaml adlı bir dosya oluşturun.

      Örnek YAML'yi görüntülemek için genişletin

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: single-pod-app
      spec:
        # Ensure the replica count is 1
        replicas: 1
        selector:
          matchLabels:
            app: nginx-single
        template:
          metadata:
            labels:
              app: nginx-single
          spec:
            containers:
            - name: nginx
              image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
              ports:
              - containerPort: 80
              # Define the mount point in the container
              volumeMounts:
              - name: my-persistent-storage  # Must match the name defined in volumes below
                mountPath: /data  # Mount to the /data directory in the container
            # Declare and reference the PVC at the pod level
            volumes:
            - name: my-persistent-storage # Volume to be referenced by the container
              persistentVolumeClaim:
                claimName: disk-pvc # Reference the PVC created earlier
    2. Dağıtımı dağıtın.

      kubectl create -f disk-deployment.yaml
  4. Montaj sonucunu doğrulayın.

    1. Pod'un çalıştığını onaylayın.

      kubectl get pods -l app=nginx-single
    2. Pod'a bağlanın ve cloud diskin /data dizinine monte edildiğini doğrulayın.

      # Get the pod name
      POD_NAME=$(kubectl get pods -l app=nginx-single -o jsonpath='{.items[0].metadata.name}')
      
      # Run the df -h command on the mount point
      kubectl exec $POD_NAME -- df -h /data

      Aşağıdaki çıktı, 20 GiB cloud diskin başarıyla monte edildiğini gösterir.

      Filesystem      Size  Used Avail Use% Mounted on
      /dev/vdb         20G   24K   20G   1% /data

Referanslar