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.
CatatanCentOS 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.
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, pilih .
Di halaman Marketplace, cari strmvol-csi-driver dan klik kartunya.
Di halaman detail aplikasi, klik Deploy di pojok kanan atas.
Di panel yang muncul, konfigurasikan informasi dasar dan parameter, lalu klik OK.
Langkah 2: Konfigurasi izin akses OSS
Buat Pengguna RAM dan berikan izin yang diperlukan.
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
mybucketdengan nama bucket Anda.Kebijakan read-only OSS
Kebijakan read/write OSS
Klik untuk melihat kebijakan read/write
{ "Statement": [ { "Action": "oss:*", "Effect": "Allow", "Resource": [ "acs:oss:*:*:mybucket", "acs:oss:*:*:mybucket/*" ] } ], "Version": "1" }
(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.
Berikan izin OSS kepada Pengguna RAM. Untuk informasi lebih lanjut, lihat Kelola izin Pengguna RAM.
Buat secret untuk menyimpan kredensial otentikasi guna mengakses data OSS.
Berikut contoh perintahnya. Ganti
akIddanakSecretdengan 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
Buat PersistentVolume (PV).
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
nodeStageSecretRefParameter
Wajib
Deskripsi
nameYa
Nama secret yang menyimpan informasi AccessKey.
namespaceYa
Namespace secret yang berisi informasi AccessKey.
Parameter dalam
volumeAttributesParameter
Wajib
Deskripsi
bucketYa
Bucket OSS yang akan dipasang.
pathTidak
Path direktori yang akan dipasang di dalam bucket OSS. Path ini relatif terhadap root bucket.
PentingPilih path pemasangan berdasarkan prinsip hak istimewa minimal.
urlYa
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.comatauhttps://oss-{{regionName}}-internal.aliyuncs.com.PentingFormat titik akhir internal
vpc100-oss-{{regionName}}.aliyuncs.comsudah tidak digunakan lagi. Segera perbarui ke format baru.umaskTidak
Mask izin untuk sistem file setelah perangkat blok virtual dipasang.
Contohnya, untuk mengatur izin file default menjadi
755, aturumaskmenjadi022.directModeTidak
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.
resourceLimitTidak
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.CatatanMemori 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.
Buat PV tersebut.
kubectl create -f strmvol-pv.yamlPeriksa status PV.
kubectl get pv pv-strmvolOutput yang diharapkan:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE pv-strmvol 20Gi ROX Retain Available <unset> 18s
Buat PersistentVolumeClaim (PVC).
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-strmvolBuat PVC tersebut.
kubectl create -f strmvol-pvc-static.yamlPeriksa status PVC.
kubectl get pvc pvc-strmvolOutput 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
Buat StorageClass.
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: ImmediateParameter dalam
parametersdijelaskan sebagai berikut:Konfigurasi secret
Parameter
Wajib
Deskripsi
csi.storage.k8s.io/node-stage-secret-nameYa
Nama secret yang menyimpan informasi AccessKey.
csi.storage.k8s.io/node-stage-secret-namespaceYa
Namespace secret yang berisi informasi AccessKey.
Konfigurasi volume
Parameter
Wajib
Deskripsi
bucketYa
Bucket OSS yang akan dipasang.
pathTidak
Path direktori yang akan dipasang di dalam bucket OSS. Path ini relatif terhadap root bucket.
PentingPilih path pemasangan berdasarkan prinsip hak istimewa minimal.
urlYa
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.comatauhttps://oss-{{regionName}}-internal.aliyuncs.com.PentingFormat titik akhir internal
vpc100-oss-{{regionName}}.aliyuncs.comsudah tidak digunakan lagi. Segera perbarui ke format baru.umaskTidak
Mask izin untuk sistem file setelah perangkat blok virtual dipasang.
Contohnya, untuk mengatur izin file default menjadi
755, aturumaskmenjadi022.directModeTidak
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.
resourceLimitTidak
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.CatatanMemori 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.
Buat StorageClass tersebut.
kubectl create -f strmvol-sc.yaml
Buat PVC.
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: 20GiBuat PVC tersebut.
kubectl create -f strmvol-pvc-dynamic.yamlPeriksa status PVC.
kubectl get pvc pvc-strmvolOutput 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
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-strmvolBuat StatefulSet tersebut.
kubectl create -f strmvol-test.yamlPeriksa status deployment pod dalam StatefulSet.
kubectl get pod -l app=strmvol-testOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE strmvol-test-0 1/1 Running 0 14sVerifikasi 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>