All Products
Search
Document Center

Container Service for Kubernetes:Optimalkan pembacaan file kecil OSS dengan volume strmvol

Last Updated:Apr 11, 2026

Pada aplikasi berbasis kontainer, metode konvensional untuk memasang data penyimpanan objek adalah menggunakan sistem file berbasis Filesystem in Userspace (FUSE), seperti ossfs. Namun, pendekatan ini sering kali tidak memadai dalam skenario yang intensif membaca dan melibatkan jutaan file kecil—misalnya saat memuat dataset pelatihan AI atau menganalisis log time-series—di mana throughput tinggi dan latensi rendah sangat penting. Untuk kasus penggunaan tersebut, kami merekomendasikan solusi perangkat blok virtual. Dengan memasang data penyimpanan objek secara langsung menggunakan volume strmvol, Anda dapat secara signifikan mengoptimalkan kinerja pembacaan file kecil.

Catatan penggunaan

volume strmvol

  • Hanya titik akhir internal yang dapat digunakan untuk mengakses data OSS.

  • Saat perangkat blok virtual diinisialisasi, indeks metadata file lengkap akan dibangun. Proses ini mengonsumsi sumber daya node dan menyebabkan pod aplikasi tetap berada dalam status ContainerCreating. Waktu dan sumber daya yang diperlukan berbanding lurus dengan jumlah file pada path pemasangan bucket OSS.

    • Saat memilih path pemasangan bucket OSS, ikuti prinsip hak istimewa minimal.

      Jika Bisnis A mengakses konten di bawah /app/a/ dalam Bucket OSS dan Bisnis B mengakses konten di bawah /app/b/, buatlah volume terpisah untuk Bisnis A dan Bisnis B dengan path titik pemasangan masing-masing /app/a/ dan /app/b/.

    • Untuk informasi mengenai overhead waktu dan sumber daya selama inisialisasi, lihat Pembangunan indeks metadata.

  • Pengaturan dalam PersistentVolume (PV) membatasi konsumsi sumber daya perangkat blok virtual selama siklus hidup pemasangannya, tidak termasuk fase inisialisasi. Pastikan Anda menyediakan sumber daya node yang cukup.

  • Satu perangkat blok virtual memiliki kapasitas 16 TiB, sehingga path OSS yang dipasang juga dibatasi hingga 16 TiB data.

Persyaratan kluster dan node

  • Kluster harus berupa ACK managed Pro cluster atau ACK dedicated cluster yang menjalankan Kubernetes 1.20 atau lebih baru. Plugin penyimpanan harus berupa plugin Container Storage Interface (CSI).

  • Node harus menggunakan kernel versi 4.19 atau lebih baru. Kami merekomendasikan spesifikasi sumber daya minimal 4 vCPU dan memori 8 GiB.

  • Sistem operasi node yang didukung: Alibaba Cloud Linux 3, Alibaba Cloud Linux 2, dan CentOS 7. Untuk mengoptimalkan kinerja akses data dengan sistem operasi erofs, kami merekomendasikan penggunaan Alibaba Cloud Linux 3.

    Catatan

    CentOS 7 dan Alibaba Cloud Linux 2 telah mencapai masa akhir dukungan (EOL). Untuk informasi lebih lanjut, lihat [Perubahan Produk] Pengumuman Penghentian Dukungan untuk Alibaba Cloud Linux 2 dan CentOS 7.

  • Anda tidak dapat memasang volume strmvol ke pod serverless yang dijadwalkan ke node virtual.

Prasyarat

Langkah 1: Deploy strmvol-csi-driver

Untuk menggunakan volume strmvol, Anda harus mendeploy driver CSI terpisah, yaitu komponen strmvol-csi-driver. Setelah deployment, driver CSI ini beroperasi secara independen dan tidak bentrok dengan komponen csi-provisioner dan csi-plugin yang dikelola oleh ACK.

  1. Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, pilih Marketplace > Marketplace.

  2. Di halaman Marketplace, cari strmvol-csi-driver dan klik kartunya.

  3. Di halaman detail aplikasi, klik Deploy di pojok kanan atas.

  4. Di panel yang muncul, konfigurasikan informasi dasar dan parameter, lalu klik OK.

Langkah 2: Konfigurasi izin akses OSS

  1. Buat Pengguna RAM dan berikan izin yang diperlukan.

    1. Buat kebijakan kustom untuk akses OSS. Untuk informasi lebih lanjut, lihat Buat kebijakan kustom.

      Pilih salah satu kebijakan izin read-only atau read-write berikut sesuai kebutuhan Anda, dan ganti mybucket dengan nama bucket Anda.

      • Kebijakan read-only OSS

        Klik untuk melihat kebijakan read-only

        {
            "Statement": [
                {
                    "Action": [
                        "oss:Get*",
                        "oss:List*"
                    ],
                    "Effect": "Allow",
                    "Resource": [
                        "acs:oss:*:*:mybucket",
                        "acs:oss:*:*:mybucket/*"
                    ]
                }
            ],
            "Version": "1"
        }
      • Kebijakan read/write OSS

        Klik untuk melihat kebijakan read/write

        {
            "Statement": [
                {
                    "Action": "oss:*",
                    "Effect": "Allow",
                    "Resource": [
                        "acs:oss:*:*:mybucket",
                        "acs:oss:*:*:mybucket/*"
                    ]
                }
            ],
            "Version": "1"
        }
    2. (Opsional) Jika Anda mengenkripsi objek OSS dengan customer master key (CMK) dari Key Management Service (KMS), Anda juga harus memberikan izin KMS kepada Pengguna RAM. Untuk informasi lebih lanjut, lihat Enkripsi volume ossfs 1.0.

    3. Berikan izin OSS kepada Pengguna RAM. Untuk informasi lebih lanjut, lihat Kelola izin Pengguna RAM.

  2. Buat secret untuk menyimpan kredensial otentikasi guna mengakses data OSS.

    Berikut contoh perintahnya. Ganti akId dan akSecret dengan ID AccessKey dan Rahasia AccessKey Anda.

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

Pasang volume strmvol

Langkah 1: Buat volume strmvol

Volume statis

  1. Buat PersistentVolume (PV).

    1. Buat file bernama strmvol-pv.yaml dengan konten berikut.

      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: pv-strmvol
      spec:
        capacity:
        # Path OSS yang dipasang dapat menyimpan maksimal 16 TiB data.
          storage: 20Gi
        # Hanya mode akses ReadOnlyMany yang didukung.
        accessModes:
          - ReadOnlyMany
        # Untuk mencegah kehilangan data akibat kesalahan, hanya kebijakan Retain yang didukung. 
        persistentVolumeReclaimPolicy: Retain
        csi:
          driver: strmvolplugin.csi.alibabacloud.com
          volumeHandle: pv-strmvol
          # Gunakan secret yang dibuat pada langkah prasyarat.
          nodeStageSecretRef:
            name: strmvol-secret
            namespace: default
          volumeAttributes:
            bucket: cnfs-oss-test
            path: /subpath
            # Volume strmvol hanya mendukung akses data OSS melalui jaringan internal.
            url: oss-cn-hangzhou-internal.aliyuncs.com
            umask: "000"
            directMode: "false"
            resourceLimit: "2c4g"
      • Parameter dalam nodeStageSecretRef

        Parameter

        Wajib

        Deskripsi

        name

        Ya

        Nama secret yang menyimpan informasi AccessKey.

        namespace

        Ya

        Namespace secret yang berisi informasi AccessKey.

      • Parameter dalam volumeAttributes

        Parameter

        Wajib

        Deskripsi

        bucket

        Ya

        Bucket OSS yang akan dipasang.

        path

        Tidak

        Path direktori yang akan dipasang di dalam bucket OSS. Path ini relatif terhadap root bucket.

        Penting

        Pilih path pemasangan berdasarkan prinsip hak istimewa minimal.

        url

        Ya

        Titik akhir internal untuk OSS. Nilai ini harus sesuai dengan titik akhir yang ditampilkan di halaman Ikhtisar bucket di Konsol OSS. Format umum titik akhir internal meliputi:

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

        Penting

        Format titik akhir internal vpc100-oss-{{regionName}}.aliyuncs.com sudah tidak digunakan lagi. Segera perbarui ke format baru.

        umask

        Tidak

        Mask izin untuk sistem file setelah perangkat blok virtual dipasang.

        Contohnya, untuk mengatur izin file default menjadi 755, atur umask menjadi 022.

        directMode

        Tidak

        Menentukan apakah mode langsung diaktifkan.

        • "true": Mengaktifkan mode langsung, yang menonaktifkan pra-ambil data dan caching lokal. Cocok untuk skenario pembacaan acak, seperti pembacaan batch acak pada training dataset.

        • "false": Menonaktifkan mode langsung (default). Cocok untuk skenario umum, seperti pembacaan berurutan file kecil atau pembacaan file besar. Jika aplikasi Anda tidak memiliki pola akses data tertentu, biarkan mode ini dinonaktifkan.

        resourceLimit

        Tidak

        Sumber daya node maksimum yang dapat dikonsumsi oleh perangkat blok virtual.

        Contohnya, "2c4g" berarti perangkat blok virtual dapat menggunakan hingga 2 vCPU dan memori 4 GiB dari node.

        Catatan
        • Memori terutama digunakan untuk pra-ambil data dan caching lokal. Saat mode langsung diaktifkan, penggunaan memori jauh lebih rendah daripada nilai yang ditetapkan.

        • Untuk sistem operasi selain Alibaba Cloud Linux 3, kinerja pembacaan mirip terlepas dari konfigurasi. Oleh karena itu, batas sumber daya tinggi tidak disarankan. Untuk informasi lebih lanjut, lihat Uji kinerja pembacaan data.

    2. Buat PV tersebut.

      kubectl create -f strmvol-pv.yaml
    3. Periksa status PV.

      kubectl get pv pv-strmvol

      Output yang diharapkan:

      NAME         CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
      pv-strmvol   20Gi       ROX            Retain           Available                          <unset>                          18s
  2. Buat PersistentVolumeClaim (PVC).

    1. Buat file bernama strmvol-pvc-static.yaml dengan konten berikut.

      kind: PersistentVolumeClaim
      apiVersion: v1
      metadata:
        name: pvc-strmvol
        namespace: default
      spec:
        # Pengaturan berikut harus sesuai dengan konfigurasi PV.
        accessModes:
          - ReadOnlyMany
        resources:
          requests:
            storage: 20Gi
        volumeName: pv-strmvol
    2. Buat PVC tersebut.

      kubectl create -f strmvol-pvc-static.yaml
    3. Periksa status PVC.

      kubectl get pvc pvc-strmvol

      Output yang diharapkan menunjukkan bahwa PVC kini terikat ke PV.

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

Volume dinamis

  1. Buat StorageClass.

    1. Buat file bernama strmvol-sc.yaml dengan konten berikut.

      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
        name: strmvol-test
      parameters:
        # Gunakan secret yang dibuat pada langkah prasyarat.
        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
        # Volume strmvol hanya mendukung akses data OSS melalui jaringan internal.
        url: oss-cn-hangzhou-internal.aliyuncs.com 
        umask: "000"
        directMode: "false"
        resourceLimit: "2c4g"
      provisioner: strmvolplugin.csi.alibabacloud.com
      # Untuk mencegah kehilangan data akibat kesalahan, hanya kebijakan Retain yang didukung. 
      reclaimPolicy: Retain
      volumeBindingMode: Immediate

      Parameter dalam parameters dijelaskan sebagai berikut:

      • Konfigurasi secret

        Parameter

        Wajib

        Deskripsi

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

        Ya

        Nama secret yang menyimpan informasi AccessKey.

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

        Ya

        Namespace secret yang berisi informasi AccessKey.

      • Konfigurasi volume

        Parameter

        Wajib

        Deskripsi

        bucket

        Ya

        Bucket OSS yang akan dipasang.

        path

        Tidak

        Path direktori yang akan dipasang di dalam bucket OSS. Path ini relatif terhadap root bucket.

        Penting

        Pilih path pemasangan berdasarkan prinsip hak istimewa minimal.

        url

        Ya

        Titik akhir internal untuk OSS. Nilai ini harus sesuai dengan titik akhir yang ditampilkan di halaman Ikhtisar bucket di Konsol OSS. Format umum titik akhir internal meliputi:

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

        Penting

        Format titik akhir internal vpc100-oss-{{regionName}}.aliyuncs.com sudah tidak digunakan lagi. Segera perbarui ke format baru.

        umask

        Tidak

        Mask izin untuk sistem file setelah perangkat blok virtual dipasang.

        Contohnya, untuk mengatur izin file default menjadi 755, atur umask menjadi 022.

        directMode

        Tidak

        Menentukan apakah mode langsung diaktifkan.

        • "true": Mengaktifkan mode langsung, yang menonaktifkan pra-ambil data dan caching lokal. Cocok untuk skenario pembacaan acak, seperti pembacaan batch acak pada training dataset.

        • "false": Menonaktifkan mode langsung (default). Cocok untuk skenario umum, seperti pembacaan berurutan file kecil atau pembacaan file besar. Jika aplikasi Anda tidak memiliki pola akses data tertentu, biarkan mode ini dinonaktifkan.

        resourceLimit

        Tidak

        Sumber daya node maksimum yang dapat dikonsumsi oleh perangkat blok virtual.

        Contohnya, "2c4g" berarti perangkat blok virtual dapat menggunakan hingga 2 vCPU dan memori 4 GiB dari node.

        Catatan
        • Memori terutama digunakan untuk pra-ambil data dan caching lokal. Saat mode langsung diaktifkan, penggunaan memori jauh lebih rendah daripada nilai yang ditetapkan.

        • Untuk sistem operasi selain Alibaba Cloud Linux 3, kinerja pembacaan mirip terlepas dari konfigurasi. Oleh karena itu, batas sumber daya tinggi tidak disarankan. Untuk informasi lebih lanjut, lihat Uji kinerja pembacaan data.

    2. Buat StorageClass tersebut.

      kubectl create -f strmvol-sc.yaml
  2. Buat PVC.

    1. Buat file bernama strmvol-pvc-dynamic.yaml dengan konten berikut.

      kind: PersistentVolumeClaim
      apiVersion: v1
      metadata:
        name: pvc-strmvol
        namespace: default
      spec:
        # Hanya mode akses ReadOnlyMany yang didukung.
        accessModes:
          - ReadOnlyMany
        # Tentukan StorageClass.
        storageClassName: strmvol-test
        resources:
          requests:
            # Path OSS yang dipasang dapat menyimpan maksimal 16 TiB data.
            storage: 20Gi
    2. Buat PVC tersebut.

      kubectl create -f strmvol-pvc-dynamic.yaml
    3. Periksa status PVC.

      kubectl get pvc pvc-strmvol

      Output yang diharapkan menunjukkan bahwa PVC terikat ke PV yang diprovisikan secara otomatis oleh driver CSI.

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

Langkah 2: Buat aplikasi dan pasang volumenya

  1. Buat file bernama strmvol-test.yaml dengan konten berikut.

    Contoh YAML berikut membuat StatefulSet dengan satu pod. Pod tersebut meminta sumber daya penyimpanan menggunakan PVC bernama pvc-strmvol, dan path pemasangannya adalah /data.

    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. Buat StatefulSet tersebut.

    kubectl create -f strmvol-test.yaml
  3. Periksa status deployment pod dalam StatefulSet.

    kubectl get pod -l app=strmvol-test

    Output yang diharapkan:

    NAME             READY   STATUS    RESTARTS   AGE
    strmvol-test-0   1/1     Running   0          14s
  4. Verifikasi bahwa titik pemasangan merupakan perangkat blok dan aplikasi dapat mengakses data di OSS.

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

    Output yang diharapkan:

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

Dokumentasi terkait

Uji kinerja klien strmvol