全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan volume strmvol untuk mengoptimalkan kinerja baca file OSS kecil

更新时间:Jul 06, 2025

Dalam lingkungan terkontainerisasi, solusi tradisional sering menggunakan sistem berkas berbasis Filesystem in Userspace (FUSE), seperti ossfs, untuk memasang data penyimpanan objek. Namun, untuk skenario intensif membaca file kecil (seperti memuat dataset pelatihan AI, analisis log time-series, dan operasi bisnis lainnya yang memerlukan penelusuran cepat jutaan file kecil), solusi tradisional tidak dapat memenuhi persyaratan throughput tinggi dan latensi rendah. Dalam kasus ini, kami sarankan menggunakan solusi perangkat blok virtual dengan memasang data penyimpanan objek melalui volume strmvol untuk mengoptimalkan kinerja membaca file kecil.

Catatan Penggunaan

strmvol volumes

  • Hanya endpoint internal yang dapat digunakan untuk mengakses data Object Storage Service (OSS).

  • Perangkat blok virtual perlu membangun indeks metadata file lengkap selama inisialisasi, yang membutuhkan beberapa sumber daya node selama fase ini. Pod aplikasi tetap dalam status ContainerCreating. Sumber daya dan waktu yang diperlukan berkorelasi langsung dengan jumlah file di jalur pemasangan Bucket OSS.

    • Saat memilih jalur pemasangan Bucket OSS, ikuti prinsip hak istimewa minimal.

      Sebagai contoh, jika aplikasi A mengakses konten di /app/a/ dalam Bucket OSS, dan aplikasi B mengakses konten di /app/b/, kami sarankan membuat volume penyimpanan terpisah untuk A dan B dengan jalur pemasangan target masing-masing /app/a/ dan /app/b/.

    • Untuk waktu dan overhead sumber daya selama inisialisasi, lihat Pembuatan indeks metadata.

  • Sumber daya yang digunakan oleh perangkat blok virtual selama pemasangan dibatasi oleh konfigurasi pada volume persisten (PV), kecuali dalam fase inisialisasi. Cadangkan sumber daya node yang cukup.

  • Perangkat blok virtual memungkinkan Anda menyimpan hingga 16 TiB data di jalur OSS yang terpasang.

Persyaratan klaster dan node

  • Klaster harus merupakan klaster ACK managed Pro atau klaster ACK dedicated, dengan versi Kubernetes 1.20 atau lebih baru, dan jenis plugin penyimpanan harus CSI.

  • Versi kernel node adalah 4.19 atau lebih baru. Kami sarankan menetapkan spesifikasi sumber daya menjadi 4C8G atau lebih.

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

    Catatan

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

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

Persiapan

Langkah 1: Deploy strmvol-csi-driver

Volume strmvol memerlukan driver Container Storage Interface (CSI) terpisah (strmvol-csi-driver). Setelah driver CSI dideploy, ia beroperasi secara independen dari komponen csi-provisioner dan csi-plugin dalam klaster ACK.

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

  2. Di halaman Marketplace, cari strmvol-csi-driver, lalu klik kartu yang sesuai.

  3. Di halaman detail, klik Deploy di sudut kanan atas.

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

Langkah 2: Konfigurasikan izin akses OSS

  1. Buat pengguna RAM dan berikan izin.

    1. Buat pengguna RAM. Anda dapat melewati langkah ini jika sudah memiliki pengguna RAM. Untuk informasi lebih lanjut tentang cara membuat pengguna RAM, lihat Buat pengguna RAM.

    2. Buat kebijakan kustom untuk memberikan izin akses OSS kepada pengguna RAM. Untuk informasi lebih lanjut, lihat Buat kebijakan kustom.

      Pilih kebijakan hanya-baca atau kebijakan baca-tulis berdasarkan kebutuhan bisnis Anda. Ganti mybucket dengan nama bucket yang Anda buat.

      • Kebijakan yang memberikan izin hanya-baca pada OSS

        Klik untuk melihat isi kebijakan

        {
            "Statement": [
                {
                    "Action": [
                        "oss:Get*",
                        "oss:List*"
                    ],
                    "Effect": "Allow",
                    "Resource": [
                        "acs:oss:*:*:mybucket",
                        "acs:oss:*:*:mybucket/*"
                    ]
                }
            ],
            "Version": "1"
        }
      • Kebijakan yang memberikan izin baca-tulis pada OSS

        Klik untuk melihat isi kebijakan

        {
            "Statement": [
                {
                    "Action": "oss:*",
                    "Effect": "Allow",
                    "Resource": [
                        "acs:oss:*:*:mybucket",
                        "acs:oss:*:*:mybucket/*"
                    ]
                }
            ],
            "Version": "1"
        }
    3. Opsional. Jika objek dalam Bucket OSS dienkripsi menggunakan kunci master pelanggan tertentu (CMK) dalam Key Management Service (KMS), Anda perlu memberikan izin akses KMS kepada pengguna RAM. Untuk informasi lebih lanjut, lihat Enkripsi.

    4. Berikan izin akses OSS kepada pengguna RAM. Untuk informasi lebih lanjut, lihat Berikan izin kepada pengguna RAM.

    5. Buat pasangan AccessKey untuk pengguna RAM. Untuk informasi lebih lanjut, lihat Buat pasangan AccessKey.

  2. Buat Secret yang menyimpan informasi otentikasi untuk mengakses data OSS.

    Berikut adalah contoh perintah. Ganti akId dan akSecret dengan AccessKey Anda yang sebenarnya.

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

Pasang volume strmvol

Langkah 1: Buat volume strmvol

Pasang volume strmvol yang diprovision secara statis

  1. Buat PV.

    1. Modifikasi file YAML berikut dan simpan sebagai strmvol-pv.yaml.

      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: pv-strmvol
      spec:
        capacity:
        # Target pemasangan OSS dapat menyimpan hingga 16 TiB data.
          storage: 20Gi
        # Hanya mode akses ReadOnlyMany yang didukung.
        accessModes:
          - ReadOnlyMany
        # Untuk mencegah data jarak jauh dihapus, hanya Retain yang didukung. 
        persistentVolumeReclaimPolicy: Retain
        csi:
          driver: strmvolplugin.csi.alibabacloud.com
          volumeHandle: pv-strmvol
          # Gunakan Secret yang telah dibuat.
          nodeStageSecretRef:
            name: strmvol-secret
            namespace: default
          volumeAttributes:
            bucket: cnfs-oss-test
            path: /subpath
            # Volume strmvol hanya dapat mengakses data OSS melalui jaringan internal.
            url: oss-cn-hangzhou-internal.aliyuncs.com
            umask: "000"
            directMode: "false"
            resourceLimit: "2c4g"
      • nodeStageSecretRef

        Parameter

        Wajib

        Deskripsi

        name

        Wajib

        Nama Secret yang menyimpan informasi AccessKey.

        namespace

        Wajib

        Namespace Secret yang menyimpan informasi AccessKey.

      • volumeAttributes

        Parameter

        Wajib

        Deskripsi

        bucket

        Wajib

        Bucket OSS yang ingin Anda pasang.

        path

        Opsional

        Jalur pemasangan Bucket OSS, yang mewakili struktur direktori relatif terhadap file root bucket saat pemasangan.

        Penting

        Pilih jalur pemasangan berdasarkan prinsip hak istimewa minimal.

        url

        Wajib

        Endpoint internal yang digunakan untuk memasang OSS. Anda dapat melihat endpoint internal di halaman Bucket dalam konsol OSS. Format endpoint umum:

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

        Penting

        Format endpoint akses internal vpc100-oss-{{regionName}}.aliyuncs.com sudah tidak digunakan lagi. Beralihlah ke format baru sesegera mungkin.

        umask

        Opsional

        Masker izin sistem file default setelah perangkat blok virtual dipasang.

        Jika Anda ingin menggunakan 755 sebagai izin sistem file default, atur umask ke 022.

        directMode

        Opsional

        Menentukan apakah akan mengaktifkan mode langsung.

        • "true": Saat Anda mengaktifkan mode langsung, prefetching dan caching data lokal dinonaktifkan. Mode ini cocok untuk pembacaan acak file kecil, seperti pembacaan batch acak dataset pelatihan.

        • "false": Secara default, mode langsung dinonaktifkan. Mode ini cocok untuk skenario umum seperti pembacaan berurutan file kecil dan besar. Jika bisnis Anda tidak memiliki fitur pembacaan data yang jelas, nonaktifkan mode langsung.

        resourceLimit

        Opsional

        Batas sumber daya maksimum node setelah perangkat blok virtual dipasang.

        Sebagai contoh, "2c4g" menunjukkan bahwa perangkat blok virtual dapat menggunakan hingga 2 vCPU dan 4 GiB memori dari node.

        Catatan
        • Memori digunakan untuk prefetching data dan caching lokal. Saat Anda mengaktifkan mode langsung, memori yang diperlukan jauh lebih rendah daripada nilai default.

        • Sistem operasi selain Alibaba Cloud Linux 3 memiliki batas atas kinerja pembacaan data yang sama. Oleh karena itu, kami tidak merekomendasikan Anda menggunakan konfigurasi performa tinggi. Untuk informasi lebih lanjut, lihat Tes kinerja pembacaan data.

    2. Buat PV.

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

      kubectl get pv pv-strmvol

      Keluaran yang diharapkan:

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

    1. Modifikasi file YAML berikut dan simpan sebagai strmvol-pvc-static.yaml.

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

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

      kubectl get pvc pvc-strmvol

      Keluaran berikut menunjukkan bahwa PV terikat ke PVC.

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

Pasang volume strmvol yang diprovision secara dinamis

  1. Buat StorageClass.

    1. Modifikasi file YAML berikut dan simpan sebagai strmvol-sc.yaml.

      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
        name: strmvol-test
      parameters:
        # Gunakan Secret yang telah dibuat.
        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 dapat mengakses 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 data jarak jauh dihapus, hanya Retain yang didukung 
      reclaimPolicy: Retain
      volumeBindingMode: Immediate

      Tabel berikut menjelaskan parameters:

      • Konfigurasikan Secret

        Parameter

        Wajib

        Deskripsi

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

        Wajib

        Nama Secret yang menyimpan informasi AccessKey.

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

        Wajib

        Namespace Secret yang menyimpan informasi AccessKey.

      • Konfigurasikan PV

        Parameter

        Wajib

        Deskripsi

        bucket

        Wajib

        Bucket OSS yang ingin Anda pasang.

        path

        Opsional

        Jalur pemasangan Bucket OSS, yang mewakili struktur direktori relatif terhadap file root bucket saat pemasangan.

        Penting

        Pilih jalur pemasangan berdasarkan prinsip hak istimewa minimal.

        url

        Wajib

        Endpoint internal yang digunakan untuk memasang OSS. Anda dapat melihat endpoint internal di halaman Bucket dalam konsol OSS. Format endpoint umum:

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

        Penting

        Format endpoint akses internal vpc100-oss-{{regionName}}.aliyuncs.com sudah tidak digunakan lagi. Beralihlah ke format baru sesegera mungkin.

        umask

        Opsional

        Masker izin sistem file default setelah perangkat blok virtual dipasang.

        Jika Anda ingin menggunakan 755 sebagai izin sistem file default, atur umask ke 022.

        directMode

        Opsional

        Menentukan apakah akan mengaktifkan mode langsung.

        • "true": Saat Anda mengaktifkan mode langsung, prefetching dan caching data lokal dinonaktifkan. Mode ini cocok untuk pembacaan acak file kecil, seperti pembacaan batch acak dataset pelatihan.

        • "false": Secara default, mode langsung dinonaktifkan. Mode ini cocok untuk skenario umum seperti pembacaan berurutan file kecil dan besar. Jika bisnis Anda tidak memiliki fitur pembacaan data yang jelas, nonaktifkan mode langsung.

        resourceLimit

        Opsional

        Batas sumber daya maksimum node setelah perangkat blok virtual dipasang.

        Sebagai contoh, "2c4g" menunjukkan bahwa perangkat blok virtual dapat menggunakan hingga 2 vCPU dan 4 GiB memori dari node.

        Catatan
        • Memori digunakan untuk prefetching data dan caching lokal. Saat Anda mengaktifkan mode langsung, memori yang diperlukan jauh lebih rendah daripada nilai default.

        • Sistem operasi selain Alibaba Cloud Linux 3 memiliki batas atas kinerja pembacaan data yang sama. Oleh karena itu, kami tidak merekomendasikan Anda menggunakan konfigurasi performa tinggi. Untuk informasi lebih lanjut, lihat Tes kinerja pembacaan data.

    2. Buat StorageClass.

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

    1. Modifikasi file YAML berikut dan simpan sebagai strmvol-pvc-dynamic.yaml.

      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:
            # Target pemasangan OSS dapat menyimpan hingga 16 TiB data
            storage: 20Gi
    2. Buat PVC.

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

      kubectl get pvc pvc-strmvol

      Keluaran berikut menunjukkan bahwa PV dibuat secara otomatis oleh plugin CSI dan terikat ke PVC.

      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 volume strmvol

  1. Buat file bernama strmvol-test.yaml dan salin konten berikut ke dalam file:

    Contoh YAML berikut membuat StatefulSet dengan satu pod. Pod tersebut meminta sumber daya penyimpanan melalui PVC bernama pvc-strmvol dan memasang volume ke jalur /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 dan pasang volume strmvol ke StatefulSet.

    kubectl create -f strmvol-test.yaml
  3. Periksa apakah pod yang disediakan oleh StatefulSet telah diterapkan.

    kubectl get pod -l app=strmvol-test

    Keluaran yang diharapkan:

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

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

    Respon serupa dengan keluaran perintah berikut dikembalikan:

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

Referensi

Pengujian kinerja untuk volume strmvol