Tüm Ürünler
Search
Belge Merkezi

Container Service for Kubernetes:Optimize OSS small file reads with strmvol volumes

Son Güncelleme:Oct 06, 2026

Konteynerleştirilmiş uygulamalarda nesne depolama verilerini bağlamak için yaygın olarak ossfs gibi Kullanıcı Alanında Dosya Sistemi (FUSE) tabanlı bir dosya sistemi kullanılır. Ancak bu yaklaşım, yüksek aktarım hızı ve düşük gecikme süresinin kritik olduğu yapay zeka eğitim veri kümelerinin yüklenmesi veya zaman serisi günlüklerinin analizi gibi milyonlarca küçük dosyayı içeren okuma yoğunluklu senaryolarda yetersiz kalabilir. Bu kullanım durumları için sanal blok aygıtı çözümünü kullanmanızı öneririz. Nesne depolama verilerini doğrudan bir strmvol birimi ile bağlayarak küçük dosyalar için okuma performansını önemli ölçüde optimize edebilirsiniz.

Kullanım notları

strmvol birimleri

  • OSS verilerine erişmek için yalnızca dahili uç noktalar kullanılabilir.

  • Sanal blok aygıtı başlatıldığında tam bir dosya meta veri dizini oluşturur. Bu işlem düğüm kaynaklarını tüketir ve uygulama pod'unun ContainerCreating durumunda kalmasına neden olur. Gereken süre ve kaynaklar, OSS paketinin bağlama yolundaki dosya sayısıyla doğru orantılıdır.

    • OSS paketinin bağlama yolunu seçerken en az ayrıcalık ilkesini uygulayın.

      A İşletmesi bir OSS Paketindeki /app/a/ altındaki içeriğe erişiyor ve B İşletmesi /app/b/ altındaki içeriğe erişiyorsa, A İşletmesi ve B İşletmesi için sırasıyla /app/a/ ve /app/b/ hedef yollarına sahip ayrı birimler oluşturun.

    • Başlatma sırasında oluşan zaman ve kaynak ek yükü hakkında bilgi için bkz. Meta veri dizini oluşturma.

  • Kalıcı Birim (PV) içindeki ayarlar, başlatma aşaması hariç olmak üzere sanal blok aygıtının bağlama döngüsü sırasındaki kaynak tüketimini sınırlar. Yeterli düğüm kaynağı ayırdığınızdan emin olun.

  • Tek bir sanal blok aygıtının kapasitesi 16 TiB'dir; bu nedenle bağlı OSS yolu da 16 TiB veriyle sınırlıdır.

Küme ve düğüm gereksinimleri

  • Küme, Kubernetes 1.20 veya sonraki bir sürümü çalıştıran ACK yönetilen Pro kümesi veya ACK özel kümesi olmalıdır. Depolama eklentisi bir Konteyner Depolama Arayüzü (CSI) eklentisi olmalıdır.

  • Düğümler 4,19 veya sonraki çekirdek sürümünü kullanmalıdır. En az 4 vCPU ve 8 GiB bellek içeren teknik özellikler önerilir.

  • Desteklenen düğüm işletim sistemleri: Alibaba Cloud Linux 3, Alibaba Cloud Linux 2 ve CentOS 7. erofs işletim sistemi ile veri erişim performansını optimize etmek için Alibaba Cloud Linux 3 kullanmanızı öneririz.

    Not

    CentOS 7 ve Alibaba Cloud Linux 2 yaşam döngüsü sonuna (EOL) ulaşmıştır. Daha fazla bilgi için bkz. [[Ürün Değişikliği] Alibaba Cloud Linux 2 ve CentOS 7 Desteğinin Sonlandırılmasına İlişkin Duyuru](t2602809.xdita#).

  • Sanal düğüme zamanlanan sunucusuz bir poda strmvol birimleri bağlayamazsınız.

Ön koşullar

Adım 1: strmvol-csi-driver'ı dağıtın

strmvol birimlerini kullanmak için ayrı bir CSI sürücüsü olan strmvol-csi-driver bileşenini dağıtmanız gerekir. Dağıtımdan sonra bu CSI sürücüsü bağımsız olarak çalışır ve ACK tarafından yönetilen csi-provisioner ve csi-plugin bileşenleriyle çakışmaz.

  1. ACK konsolu üzerinde oturum açın. Sol gezinme bölmesinde Marketplace > Marketplace seçeneğini belirleyin.

  2. Marketplace sayfasında strmvol-csi-driver öğesini arayın ve kartına tıklayın.

  3. Uygulama ayrıntıları sayfasında sağ üst köşede bulunan Deploy öğesine tıklayın.

  4. Görüntülenen panelde temel bilgileri ve parametreleri yapılandırın, ardından OK öğesine tıklayın.

Adım 2: OSS erişim izinlerini yapılandırın

  1. Bir RAM kullanıcısı oluşturun ve gerekli izinleri verin.

    1. Bir RAM kullanıcısı oluşturun. Zaten bir RAM kullanıcınız varsa bu adımı atlayabilirsiniz.

      RAM Konsolunda Create User sayfasına gidin ve ekrandaki talimatları izleyerek bir RAM kullanıcısı oluşturun. Oturum açma adı ve parola gibi parametreleri belirtmeniz gerekir.

    2. OSS erişimi için özel bir ilke oluşturun. Daha fazla bilgi için bkz. Özel ilke oluşturma.

      Gereksinimlerinize göre aşağıdaki salt okunur ve okuma/yazma izin ilkelerinden birini seçin ve mybucket ifadesini paketinizin adıyla değiştirin.

      • OSS salt okunur ilkesi

        Salt okunur ilkeyi görüntülemek için tıklayın

        {
            "Statement": [
                {
                    "Action": [
                        "oss:Get*",
                        "oss:List*"
                    ],
                    "Effect": "Allow",
                    "Resource": [
                        "acs:oss:*:*:mybucket",
                        "acs:oss:*:*:mybucket/*"
                    ]
                }
            ],
            "Version": "1"
        }
      • OSS okuma/yazma ilkesi

        Okuma/yazma ilkesini görüntülemek için tıklayın

        {
            "Statement": [
                {
                    "Action": "oss:*",
                    "Effect": "Allow",
                    "Resource": [
                        "acs:oss:*:*:mybucket",
                        "acs:oss:*:*:mybucket/*"
                    ]
                }
            ],
            "Version": "1"
        }
    3. (İsteğe bağlı) OSS nesnelerini Key Management Service (KMS) üzerinden bir müşteri ana şifreleme anahtarı (CMK) ile şifreliyorsanız RAM kullanıcısına KMS izinleri de vermeniz gerekir. Daha fazla bilgi için bkz. ossfs 1,0 birimlerini şifreleme.

    4. OSS izinlerini RAM kullanıcısına verin. Daha fazla bilgi için bkz. RAM kullanıcı izinlerini yönetme.

    5. Oluşturduğunuz AccessKey, PV için bir Secret olarak saklanır.

      1. RAM Konsolunda Users sayfasına gidin, RAM kullanıcınızın adına tıklayın ve ardından AccessKey bölümünde Create AccessKey öğesine tıklayın.

      2. Ekrandaki talimatları izleyerek bir AccessKey oluşturun. AccessKey ID ve AccessKey Secret değerlerini kopyalayın ve güvenli bir şekilde saklayın.

  2. OSS verilerine erişmek için kimlik doğrulama kimlik bilgilerini saklayan bir secret oluşturun.

    Aşağıda örnek bir komut gösterilmektedir. akId ve akSecret ifadelerini kendi AccessKey ID ve AccessKey Secret değerlerinizle değiştirin.

    kubectl create -n default secret generic strmvol-secret --from-literal='akId=xxxxxx' --from-literal='akSecret=xxxxxx'

strmvol birimi bağlama

Adım 1: strmvol birimi oluşturun

Statik birim

  1. Kalıcı Birim (PV) oluşturun.

    1. Aşağıdaki içeriğe sahip strmvol-pv.yaml adlı bir dosya oluşturun.

      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: pv-strmvol
      spec:
        capacity:
        # The mounted OSS path can store a maximum of 16 TiB of data.
          storage: 20Gi
        # Only the ReadOnlyMany access mode is supported.
        accessModes:
          - ReadOnlyMany
        # To prevent accidental data loss, only the Retain policy is supported. 
        persistentVolumeReclaimPolicy: Retain
        csi:
          driver: strmvolplugin.csi.alibabacloud.com
          volumeHandle: pv-strmvol
          # Use the secret created in the prerequisite steps.
          nodeStageSecretRef:
            name: strmvol-secret
            namespace: default
          volumeAttributes:
            bucket: cnfs-oss-test
            path: /subpath
            # strmvol volumes only support accessing OSS data over an internal network.
            url: oss-cn-hangzhou-internal.aliyuncs.com
            umask: "000"
            directMode: "false"
            resourceLimit: "2c4g"
      • nodeStageSecretRef içindeki parametreler


        Parametre


        Zorunlu


        Açıklama


        name


        Evet


        AccessKey bilgilerini saklayan secret'ın adı.


        namespace


        Evet


        AccessKey bilgilerini içeren secret'ın ad alanı.

      • volumeAttributes içindeki parametreler

        Parametre

        Zorunlu

        Açıklama

        bucket

        Evet

        Bağlanacak OSS paketi.

        path

        Hayır

        OSS paketi içinde bağlanacak dizinin yolu. Bu yol paketin köküne görelidir.

        Önemli

        En az ayrıcalık ilkesine dayalı bir bağlama yolu seçin.

        url

        Evet

        OSS için dahili uç nokta. Bu, OSS konsolundaki paketin Genel Bakış sayfasında gösterilen uç nokta ile eşleşmelidir. Dahili uç noktalar için yaygın biçimler şunlardır:

        http://oss-{{regionName}}-internal.aliyuncs.com veya https://oss-{{regionName}}-internal.aliyuncs.com.

        Önemli

        vpc100-oss-{{regionName}}.aliyuncs.com dahili uç nokta biçimi kullanım dışı bırakılmıştır. En kısa sürede yeni bir biçime geçiş yapın.

        umask

        Hayır

        Sanal blok aygıtı bağlandıktan sonraki dosya sistemi için izin maskesi.

        Örneğin, varsayılan dosya izinlerini 755 olarak ayarlamak için umask değerini 022 olarak ayarlayın.

        directMode

        Hayır

        Doğrudan modun etkinleştirilip etkinleştirilmeyeceğini belirtir.

        • "true": Veri önbelleğe almayı ve yerel önbelleğe almayı devre dışı bırakan doğrudan modu etkinleştirir. Bu, eğitim veri kümelerinin rastgele toplu okuma işlemleri gibi rastgele okuma senaryoları için uygundur.

        • "false": Doğrudan modu devre dışı bırakır (varsayılan). Bu, küçük dosyaların sıralı okunması veya büyük dosyaların okunması gibi genel amaçlı senaryolar için uygundur. Uygulamanız belirli bir veri erişim düzenine sahip değilse bu modu devre dışı bırakın.

        resourceLimit

        Hayır

        Sanal blok aygıtının tüketebileceği maksimum düğüm kaynakları.

        Örneğin, "2c4g" ifadesi sanal blok aygıtının düğümden en fazla 2 vCPU ve 4 GiB bellek kullanabileceğini gösterir.

        Not
        • Bellek öncelikli olarak veri önbelleğe alma ve yerel önbelleğe alma için kullanılır. Doğrudan mod etkinleştirildiğinde bellek kullanımı önceden belirlenen değerden önemli ölçüde daha düşüktür.

        • Alibaba Cloud Linux 3 dışındaki işletim sistemleri için okuma performansı yapılandırmadan bağımsız olarak benzerdir. Bu nedenle yüksek kaynak sınırları önerilmez. Daha fazla bilgi için bkz. Veri okuma performans testleri.

    2. PV'yi oluşturun.

      kubectl create -f strmvol-pv.yaml
    3. PV'nin durumunu kontrol edin.

      kubectl get pv pv-strmvol

      Beklenen çıktı:

      NAME         CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
      pv-strmvol   20Gi       ROX            Retain           Available                          <unset>                          18s
    4. Kalıcı Birim Talebi (PVC) oluşturun.

      1. Aşağıdaki içeriğe sahip strmvol-pvc-static.yaml adlı bir dosya oluşturun.

        kind: PersistentVolumeClaim
        apiVersion: v1
        metadata:
          name: pvc-strmvol
          namespace: default
        spec:
          # The following settings must match the PV configuration.
          accessModes:
            - ReadOnlyMany
          resources:
            requests:
              storage: 20Gi
          volumeName: pv-strmvol
      2. PVC'yi oluşturun.

        kubectl create -f strmvol-pvc-static.yaml
      3. PVC'nin durumunu kontrol edin.

        kubectl get pvc pvc-strmvol

        Beklenen çıktıda PVC'nin artık PV'ye bağlı olduğu gösterilir.

        NAME            STATUS   VOLUME       CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
        pvc-strmvol-2   Bound    pv-strmvol   20Gi       ROX                           <unset>                 16s

    Dinamik birim

    1. StorageClass oluşturun.

      1. Aşağıdaki içeriğe sahip strmvol-sc.yaml adlı bir dosya oluşturun.

        apiVersion: storage.k8s.io/v1
        kind: StorageClass
        metadata:
          name: strmvol-test
        parameters:
          # Use the secret created in the prerequisite steps.
          csi.storage.k8s.io/node-stage-secret-name: strmvol-secret  
          csi.storage.k8s.io/node-stage-secret-namespace: default
          bucket: cnfs-oss-test 
          path: /subpath
          # strmvol volumes only support accessing OSS data over an internal network.
          url: oss-cn-hangzhou-internal.aliyuncs.com 
          umask: "000"
          directMode: "false"
          resourceLimit: "2c4g"
        provisioner: strmvolplugin.csi.alibabacloud.com
        # To prevent accidental data loss, only the Retain policy is supported. 
        reclaimPolicy: Retain
        volumeBindingMode: Immediate

        parameters içindeki parametreler aşağıda açıklanmıştır:

        • Secret yapılandırması


          Parametre


          Zorunlu


          Açıklama


          csi.storage.k8s.io/node-stage-secret-name


          Evet


          AccessKey bilgilerini saklayan secret'ın adı.


          csi.storage.k8s.io/node-stage-secret-namespace


          Evet


          AccessKey bilgilerini içeren secret'ın ad alanı.

        • Birim yapılandırması

          Parametre

          Zorunlu

          Açıklama

          bucket

          Evet

          Bağlanacak OSS paketi.

          path

          Hayır

          OSS paketi içinde bağlanacak dizinin yolu. Bu yol paketin köküne görelidir.

          Önemli

          En az ayrıcalık ilkesine dayalı bir bağlama yolu seçin.

          url

          Evet

          OSS için dahili uç nokta. Bu, OSS konsolundaki paketin Genel Bakış sayfasında gösterilen uç nokta ile eşleşmelidir. Dahili uç noktalar için yaygın biçimler şunlardır:

          http://oss-{{regionName}}-internal.aliyuncs.com veya https://oss-{{regionName}}-internal.aliyuncs.com.

          Önemli

          vpc100-oss-{{regionName}}.aliyuncs.com dahili uç nokta biçimi kullanım dışı bırakılmıştır. En kısa sürede yeni bir biçime geçiş yapın.

          umask

          Hayır

          Sanal blok aygıtı bağlandıktan sonraki dosya sistemi için izin maskesi.

          Örneğin, varsayılan dosya izinlerini 755 olarak ayarlamak için umask değerini 022 olarak ayarlayın.

          directMode

          Hayır

          Doğrudan modun etkinleştirilip etkinleştirilmeyeceğini belirtir.

          • "true": Veri önbelleğe almayı ve yerel önbelleğe almayı devre dışı bırakan doğrudan modu etkinleştirir. Bu, eğitim veri kümelerinin rastgele toplu okuma işlemleri gibi rastgele okuma senaryoları için uygundur.

          • "false": Doğrudan modu devre dışı bırakır (varsayılan). Bu, küçük dosyaların sıralı okunması veya büyük dosyaların okunması gibi genel amaçlı senaryolar için uygundur. Uygulamanız belirli bir veri erişim düzenine sahip değilse bu modu devre dışı bırakın.

          resourceLimit

          Hayır

          Sanal blok aygıtının tüketebileceği maksimum düğüm kaynakları.

          Örneğin, "2c4g" ifadesi sanal blok aygıtının düğümden en fazla 2 vCPU ve 4 GiB bellek kullanabileceğini gösterir.

          Not
          • Bellek öncelikli olarak veri önbelleğe alma ve yerel önbelleğe alma için kullanılır. Doğrudan mod etkinleştirildiğinde bellek kullanımı önceden belirlenen değerden önemli ölçüde daha düşüktür.

          • Alibaba Cloud Linux 3 dışındaki işletim sistemleri için okuma performansı yapılandırmadan bağımsız olarak benzerdir. Bu nedenle yüksek kaynak sınırları önerilmez. Daha fazla bilgi için bkz. Veri okuma performans testleri.

      2. StorageClass'ı oluşturun.

        kubectl create -f strmvol-sc.yaml
    2. PVC oluşturun.

      1. Aşağıdaki içeriğe sahip strmvol-pvc-dynamic.yaml adlı bir dosya oluşturun.

        kind: PersistentVolumeClaim
        apiVersion: v1
        metadata:
          name: pvc-strmvol
          namespace: default
        spec:
          # Only the ReadOnlyMany access mode is supported.
          accessModes:
            - ReadOnlyMany
          # Specify the StorageClass.
          storageClassName: strmvol-test
          resources:
            requests:
              # The mounted OSS path can store a maximum of 16 TiB of data.
              storage: 20Gi
      2. PVC'yi oluşturun.

        kubectl create -f strmvol-pvc-dynamic.yaml
      3. PVC'nin durumunu kontrol edin.

        kubectl get pvc pvc-strmvol

        Beklenen çıktıda PVC'nin CSI sürücüsü tarafından otomatik olarak sağlanan bir PV'ye bağlı olduğu gösterilir.

        NAME          STATUS   VOLUME                                         CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
        pvc-strmvol   Bound    strmvol-d8d1d22a-e1d7-4caa-b875-54f378dec769   20Gi       ROX            strmvol-test   <unset>                 3m

    Adım 2: Uygulama oluşturun ve birimi bağlayın

    1. Aşağıdaki içeriğe sahip strmvol-test.yaml adlı bir dosya oluşturun.

      Aşağıdaki YAML örneği tek bir pod içeren bir StatefulSet oluşturur. Pod, pvc-strmvol adlı bir PVC kullanarak depolama kaynaklarını talep eder ve bağlama yolu /data şeklindedir.

      apiVersion: apps/v1
      kind: StatefulSet
      metadata:
        name: strmvol-test
        namespace: default
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: strmvol-test
        template:
          metadata:
            labels:
              app: strmvol-test
          spec:
            containers:
            - name: nginx
              image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
              ports:
              - containerPort: 80
              volumeMounts:
              - name: pvc-strmvol
                mountPath: /data
            volumes:
              - name: pvc-strmvol
                persistentVolumeClaim:
                  claimName: pvc-strmvol
    2. StatefulSet'i oluşturun.

      kubectl create -f strmvol-test.yaml
    3. StatefulSet içindeki pod'un dağıtım durumunu kontrol edin.

      kubectl get pod -l app=strmvol-test

      Beklenen çıktı:

      NAME             READY   STATUS    RESTARTS   AGE
      strmvol-test-0   1/1     Running   0          14s
    4. Bağlama noktasının bir blok aygıtı olduğunu ve uygulamanın OSS'deki verilere erişebildiğini doğrulayın.

      kubectl exec -it strmvol-test-0 -- sh -c "df /data && ls /data"

      Beklenen çıktı:

      Filesystem     1K-blocks  Used Available Use% Mounted on
      /dev/ublkb1        24812 24812         0 100% /data
      <data in OSS mount path>

    İlgili belgeler

    strmvol istemci performans testleri