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.
CatatanCentOS 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.
Masuk ke Konsol ACK. Di panel navigasi di sebelah kiri, pilih .
Di halaman Marketplace, cari strmvol-csi-driver, lalu klik kartu yang sesuai.
Di halaman detail, klik Deploy di sudut kanan atas.
Di panel yang muncul, konfigurasikan informasi dasar dan parameter, lalu klik OK.
Langkah 2: Konfigurasikan izin akses OSS
Buat pengguna RAM dan berikan izin.
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.
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
mybucketdengan nama bucket yang Anda buat.Kebijakan yang memberikan izin hanya-baca pada OSS
Kebijakan yang memberikan izin baca-tulis pada OSS
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.
Berikan izin akses OSS kepada pengguna RAM. Untuk informasi lebih lanjut, lihat Berikan izin kepada pengguna RAM.
Buat pasangan AccessKey untuk pengguna RAM. Untuk informasi lebih lanjut, lihat Buat pasangan AccessKey.
Buat Secret yang menyimpan informasi otentikasi untuk mengakses data OSS.
Berikut adalah contoh perintah. Ganti
akIddanakSecretdengan 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
Buat PV.
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"nodeStageSecretRefParameter
Wajib
Deskripsi
nameWajib
Nama Secret yang menyimpan informasi AccessKey.
namespaceWajib
Namespace Secret yang menyimpan informasi AccessKey.
volumeAttributesParameter
Wajib
Deskripsi
bucketWajib
Bucket OSS yang ingin Anda pasang.
pathOpsional
Jalur pemasangan Bucket OSS, yang mewakili struktur direktori relatif terhadap file root bucket saat pemasangan.
PentingPilih jalur pemasangan berdasarkan prinsip hak istimewa minimal.
urlWajib
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.comatauhttps://oss-{{regionName}}-internal.aliyuncs.com.PentingFormat endpoint akses internal
vpc100-oss-{{regionName}}.aliyuncs.comsudah tidak digunakan lagi. Beralihlah ke format baru sesegera mungkin.umaskOpsional
Masker izin sistem file default setelah perangkat blok virtual dipasang.
Jika Anda ingin menggunakan 755 sebagai izin sistem file default, atur umask ke 022.
directModeOpsional
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.
resourceLimitOpsional
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.CatatanMemori 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.
Buat PV.
kubectl create -f strmvol-pv.yamlPeriksa status PV.
kubectl get pv pv-strmvolKeluaran yang diharapkan:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE pv-strmvol 20Gi ROX Retain Available <unset> 18s
Buat klaim volume persisten (PVC).
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-strmvolBuat PVC.
kubectl create -f strmvol-pvc-static.yamlPeriksa status PVC.
kubectl get pvc pvc-strmvolKeluaran 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
Buat StorageClass.
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: ImmediateTabel berikut menjelaskan
parameters:Konfigurasikan Secret
Parameter
Wajib
Deskripsi
csi.storage.k8s.io/node-stage-secret-nameWajib
Nama Secret yang menyimpan informasi AccessKey.
csi.storage.k8s.io/node-stage-secret-namespaceWajib
Namespace Secret yang menyimpan informasi AccessKey.
Konfigurasikan PV
Parameter
Wajib
Deskripsi
bucketWajib
Bucket OSS yang ingin Anda pasang.
pathOpsional
Jalur pemasangan Bucket OSS, yang mewakili struktur direktori relatif terhadap file root bucket saat pemasangan.
PentingPilih jalur pemasangan berdasarkan prinsip hak istimewa minimal.
urlWajib
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.comatauhttps://oss-{{regionName}}-internal.aliyuncs.com.PentingFormat endpoint akses internal
vpc100-oss-{{regionName}}.aliyuncs.comsudah tidak digunakan lagi. Beralihlah ke format baru sesegera mungkin.umaskOpsional
Masker izin sistem file default setelah perangkat blok virtual dipasang.
Jika Anda ingin menggunakan 755 sebagai izin sistem file default, atur umask ke 022.
directModeOpsional
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.
resourceLimitOpsional
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.CatatanMemori 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.
Buat StorageClass.
kubectl create -f strmvol-sc.yaml
Buat PVC.
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: 20GiBuat PVC.
kubectl create -f strmvol-pvc-dynamic.yamlPeriksa status PVC.
kubectl get pvc pvc-strmvolKeluaran 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
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-strmvoldan 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-strmvolBuat StatefulSet dan pasang volume strmvol ke StatefulSet.
kubectl create -f strmvol-test.yamlPeriksa apakah pod yang disediakan oleh StatefulSet telah diterapkan.
kubectl get pod -l app=strmvol-testKeluaran yang diharapkan:
NAME READY STATUS RESTARTS AGE strmvol-test-0 1/1 Running 0 14sKeluaran 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>