Fluid adalah orchestrator dan akselerator dataset terdistribusi berbasis Kubernetes yang bersifat open source untuk aplikasi intensif data dalam skenario cloud-native. Fluid mendukung observabilitas, skalabilitas, dan akselerasi akses ke dataset dengan mengelola serta menjadwalkan EFCRuntimes. Topik ini menjelaskan cara menggunakan Fluid EFCRuntime untuk mempercepat akses ke File Storage NAS (NAS).
Prasyarat
Alibaba Cloud Linux 2 digunakan sebagai sistem operasi Instance ECS, dengan versi kernel minimal 4.19.91-23.
Kluster ACK Pro yang menjalankan Kubernetes 1.18 atau lebih baru telah dibuat. Untuk informasi lebih lanjut, lihat Buat Kluster ACK Pro.
NAS telah diaktifkan, dan node dalam kluster ACK Pro dapat memasang serta mengakses sistem file Capacity NAS atau Sistem File NAS Performa Standar.
CatatanDalam skenario Pelatihan AI, kami merekomendasikan Anda memilih jenis sistem file NAS berdasarkan throughput yang diperlukan oleh pekerjaan pelatihan. Untuk informasi lebih lanjut, lihat Pilih Sistem File.
Klien kubectl terhubung ke kluster ACK Pro. Untuk informasi lebih lanjut, lihat Dapatkan File kubeconfig Kluster dan Gunakan kubectl untuk Terhubung ke Kluster.
Ikhtisar EFC
Elastic File Client (EFC) adalah klien POSIX berbasis FUSE yang dikembangkan oleh tim teknis NAS. EFC dapat menggantikan klien NFS mode-kernel. Dengan EFC, Anda dapat mengakses data melalui beberapa koneksi, menyimpan metadata dalam cache, serta menyimpan data secara terdistribusi untuk meningkatkan kecepatan baca. EFC juga mendukung pemantauan kinerja menggunakan Managed Service for Prometheus. Dibandingkan dengan klien NFS mode-kernel V3 dan V4.x serta klien lain berbasis FUSE, EFC memiliki keunggulan berikut:
Konsistensi semantik kuat: EFC menggunakan mekanisme kunci terdistribusi untuk memastikan konsistensi kuat pada file dan direktori. Setelah menulis data ke file, data tersebut langsung dapat dibaca oleh klien lain. Setelah membuat file, file tersebut segera dapat diakses oleh klien lain. Keunggulan ini memungkinkan sinkronisasi data antara beberapa node.
Membaca dan menulis cache pada server individual: EFC mengoptimalkan logika caching FUSE dan menggunakan sedikit memori pada node untuk mempercepat pembacaan dan penulisan file kecil. Dibandingkan dengan klien NFS tradisional, EFC meningkatkan performa membaca dan menulis cache lebih dari 50%.
Cache baca saja terdistribusi: EFC mendukung cache baca saja terdistribusi dan menggunakan memori dari beberapa node untuk membuat pool cache yang dapat diskalakan otomatis guna memenuhi permintaan komputasi yang terus meningkat.
Pra-pemuatan file kecil: EFC melakukan pra-pemuatan data panas di direktori yang sering diakses untuk mengurangi overhead terkait pengambilan data.
Kemampuan pembaruan panas dan failover: EFC dapat melakukan failover dalam hitungan detik dan melakukan pembaruan panas tanpa mengganggu layanan Anda.
Gunakan Fluid EFCRuntime untuk mempercepat akses ke NAS sistem file
Fluid menggunakan sumber daya Kubernetes kustom terkait Fluid EFCRuntime untuk terhubung ke EFC. Ini membantu menerapkan observabilitas dan skalabilitas dataset.
Batasan
Berikut adalah batasan yang berlaku untuk Fluid EFCRuntime:
Fluid EFCRuntime tidak mendukung pra-pemuatan cache DataLoad. Fluid EFCRuntime hanya menyimpan data dalam cache saat data diakses untuk pertama kalinya.
Fluid EFCRuntime tidak menampilkan status caching dataset.
Fluid EFCRuntime hanya didukung di wilayah berikut: Cina (Zhangjiakou), Cina (Beijing), Cina (Guangzhou), Cina (Shenzhen), dan Cina (Shanghai).
Cara Kerja Fluid EFCRuntime
Gambar berikut menunjukkan cara Fluid EFCRuntime menyimpan data dari NAS ke penyimpanan lokal untuk mempercepat akses data. Bagian berikut menjelaskan cara kerja Fluid EFCRuntime:
Anda dapat membuat definisi sumber daya kustom (CRD) dataset dan EFCRuntimes untuk menentukan informasi tentang sistem file NAS sumber.
Kontroler Fluid menerapkan komponen EFC Cache Worker dan EFC FUSE berdasarkan informasi tentang sistem file sumber.
Saat membuat pod, Anda dapat menggunakan klaim volume persisten (PVC) untuk memasang target pemasangan sistem file yang diekspos oleh klien EFC FUSE ke pod.
Saat mengakses data dalam sistem file NAS yang dipasang, klien EFC FUSE meneruskan permintaan ke EFC Cache Worker. EFC Cache Worker memeriksa apakah data disimpan dalam cache di penyimpanan lokal. Jika data tersedia dalam cache, Anda dapat langsung mengaksesnya. Jika tidak, EFC Cache Worker membaca data dari sistem file NAS dan menyimpannya ke penyimpanan lokal. Kemudian, Anda dapat mengakses cache di penyimpanan lokal.
Dataset: CRD yang didefinisikan oleh Fluid. Dataset adalah kumpulan data yang saling terkait secara logis dan digunakan oleh mesin komputasi lapisan atas.
EFCRuntime: runtime yang mempercepat akses ke dataset. EFCRuntimes menggunakan EFC sebagai mesin caching. Mesin caching EFC mencakup komponen EFC Cache Worker dan EFC FUSE.
EFC Cache Worker: komponen sisi server yang memungkinkan caching berdasarkan hashing konsisten. Anda dapat menonaktifkan komponen ini sesuai kebutuhan. Saat dinonaktifkan, cache baca saja terdistribusi akan dinonaktifkan, tetapi fitur lainnya tidak terpengaruh.
EFC FUSE: komponen sisi klien EFC yang mengekspos antarmuka akses data melalui protokol POSIX.
Prosedur
Langkah 1: Instal ack-fluid
Instal suite AI cloud-native dan ack-fluid versi 0.9.10 atau lebih baru.
Jika Anda telah menginstal Fluid open source, Anda harus menghapus instalasi Fluid sebelum menginstal komponen ack-fluid.
Instal ack-fluid saat suite AI cloud-native belum diinstal
Anda dapat mengaktifkan Fluid data acceleration saat menginstal suite AI cloud-native. Untuk informasi lebih lanjut, lihat Deploy Suite AI Cloud-Native.
Instal ack-fluid saat suite AI cloud-native telah diinstal
Masuk ke Konsol ACK. Di bilah navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di bilah navigasi kiri, pilih .
Di halaman Cloud-native AI Suite, temukan ack-fluid dan klik Deploy di kolom Actions.
Di pesan Install Component, klik Confirm.
Perbarui ack-fluid ke 0.9.10 atau lebih baru
Masuk ke Konsol ACK. Di bilah navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di bilah navigasi kiri, pilih .
Di halaman Cloud-native AI Suite, temukan ack-fluid dan klik Upgrade di kolom Actions.
Di pesan Upgrade Component, klik Confirm.
Langkah 2: Tulis data ke sistem file NAS
Jika data sudah tersimpan di sistem file NAS, Anda dapat melewati langkah ini.
Pasang sistem file NAS ke instance ECS. Untuk informasi lebih lanjut, lihat Pasang Sistem File NFS di Konsol NAS.
Jalankan perintah berikut untuk memeriksa titik pemasangan sistem file CPFS:
findmnt /mntOutput yang diharapkan:
TARGET SOURCE FSTYPE OPTIONS /mnt/nfs xxxxxxxxxxx-xxxxx.cn-beijing.nas.aliyuncs.com:/ nfs rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,noJalankan perintah berikut untuk membuat file berukuran 10 GB di direktori pemasangan sistem file NAS:
dd if=/dev/zero of=/mnt/nfs/allzero-demo count=1024 bs=10MOutput yang diharapkan:
1024+0 records in 1024+0 records out 10737418240 bytes (11 GB) copied, 50.9437 s, 211 MB/s
Langkah 3: Buat dataset dan EFCRuntime
Buat file bernama dataset.yaml dan salin konten berikut ke file tersebut:
Template contoh sistem file NAS
apiVersion: data.fluid.io/v1alpha1 kind: Dataset metadata: name: efc-demo spec: mounts: - mountPoint: "nfs://<nas_url>:<nas_dir>" name: efc path: "/" --- apiVersion: data.fluid.io/v1alpha1 kind: EFCRuntime metadata: name: efc-demo spec: replicas: 3 master: networkMode: ContainerNetwork worker: networkMode: ContainerNetwork fuse: networkMode: ContainerNetwork tieredstore: levels: - mediumtype: MEM path: /dev/shm quota: 15GiFile dataset.yaml digunakan untuk membuat dataset dan EFCRuntime.
Dataset menentukan informasi tentang sistem file NAS, seperti URL sistem file NAS dan direktori yang ingin dipasang.
EFCRuntime memulai sistem caching EFC untuk menyediakan layanan caching. Anda dapat menentukan jumlah pod replika untuk komponen worker sistem caching EFC dan kapasitas cache setiap komponen worker.
Parameter
Deskripsi
mountPoint
Jika Anda menggunakan sistem file NAS, atur nilai dalam format
nfs://<nas_url>:<nas_dir>.nas_url: URL sistem file NAS.
Untuk mendapatkan URL sistem file NAS, lakukan operasi berikut: Masuk ke Konsol NAS. Di bilah navigasi kiri, pilih File System > File System List. Di halaman File System List, temukan sistem file NAS yang ingin Anda pasang dan klik Manage di kolom Tindakan. Di halaman yang muncul, klik Mount Targets. Untuk informasi lebih lanjut, lihat Kelola titik pemasangan.
nas_dir: subdirektori yang ingin Anda pasang. Dalam banyak kasus, Anda dapat mengatur nilainya ke direktori root. Misalnya, nilai
efc://xxxxxxxxxxx-xxxxx.cn-beijing.nas.aliyuncs.com:/menentukan direktori root dari sistem file NAS.
replicas
Jumlah pod replika yang dibuat untuk komponen worker sistem caching EFC. Anda dapat mengatur nilainya berdasarkan ukuran memori node komputasi dan ukuran dataset. Kami merekomendasikan agar Anda memastikan bahwa hasil kali nilai quota dan nilai replicas lebih besar dari ukuran dataset.
networkMode
Nilai valid: ContainerNetwork dan HostNetwork. Dalam lingkungan ACK, kami merekomendasikan agar Anda mengatur nilainya menjadi ContainerNetwork. Mode jaringan ini tidak mengorbankan kinerja jaringan.
mediumtype
Tipe cache. Nilai valid: HDD, SSD, dan MEM. Nilai MEM menunjukkan memori. Dalam skenario Pelatihan AI, kami merekomendasikan agar Anda mengatur parameter ini ke MEM. Jika Anda mengatur parameter ini ke MEM, Anda harus mengatur parameter path ke sistem file memori, seperti tmpfs.
path
Direktori cache dalam pod komponen worker sistem caching EFC. Kami merekomendasikan agar Anda mengatur nilai parameter ini ke /dev/shm.
quota
Kapasitas cache setiap komponen worker. Anda dapat mengatur nilainya berdasarkan ukuran memori node komputasi dan ukuran dataset. Kami merekomendasikan agar Anda memastikan bahwa hasil kali nilai quota dan nilai replicas lebih besar dari ukuran dataset.
Jalankan perintah berikut untuk membuat EFCRuntime dan dataset:
kubectl create -f dataset.yamlJalankan perintah berikut untuk memeriksa apakah Dataset telah diterapkan:
kubectl get dataset efc-demoOutput yang diharapkan:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE efc-demo Bound 24mDataset berada dalam status Bound, menunjukkan bahwa sistem caching EFC berjalan sesuai harapan di kluster dan pod aplikasi dapat mengakses data yang disediakan oleh dataset.
Jalankan perintah berikut untuk memeriksa apakah EFCRuntime telah diterapkan:
kubectl get efcruntimeOutput yang diharapkan:
NAME MASTER PHASE WORKER PHASE FUSE PHASE AGE efc-demo Ready Ready Ready 27mHasil menunjukkan bahwa komponen master, worker, dan FUSE berada dalam status Ready.
Jalankan perintah berikut untuk memeriksa apakah volume persisten (PV) dan PVC telah dibuat:
Setelah dataset dan sistem caching EFC siap, Fluid secara otomatis membuat PVC dan PV.
kubectl get pv,pvcOutput yang diharapkan:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE persistentvolume/default-efc-demo 100Gi ROX Retain Bound default/efc-demo fluid 94m NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/efc-demo Bound default-efc-demo 100Gi ROX fluid 94m
Langkah 4: Buat aplikasi untuk mengakses data
Buat aplikasi untuk memeriksa apakah akses ke data dipercepat. Dalam contoh ini, sebuah aplikasi dengan dua pod dibuat dan digunakan untuk mengakses sistem file NAS beberapa kali dari dua node. Anda dapat mengevaluasi kinerja akselerasi Fluid EFCRuntime berdasarkan waktu yang diperlukan untuk mengakses data.
Buat file bernama app.yaml dan salin konten berikut ke file tersebut.
Konten berikut mendefinisikan StatefulSet bernama efc-app. StatefulSet berisi dua pod. Setiap pod memiliki PVC efc-demo yang dipasang ke direktori /data.
apiVersion: apps/v1 kind: StatefulSet metadata: name: efc-app labels: app: nginx spec: serviceName: nginx replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: registry.openanolis.cn/openanolis/nginx:1.14.1-8.6 command: ["/bin/bash"] args: ["-c", "sleep inf"] volumeMounts: - mountPath: "/data" name: data-vol volumes: - name: data-vol persistentVolumeClaim: claimName: efc-demoJalankan perintah berikut untuk membuat StatefulSet bernama efc-app:
kubectl create -f app.yamlJalankan perintah berikut untuk memeriksa ukuran file yang ditentukan:
kubectl exec -it efc-app-0 -- du -h /data/allzero-demoOutput yang diharapkan:
10G /data/allzero-demoPeriksa waktu yang diperlukan untuk membaca file yang ditentukan dari aplikasi.
CatatanWaktu dan throughput dapat bervariasi berdasarkan lingkungan runtime dan metode pengukuran. Dalam topik ini, kluster memiliki tiga instance ECS tipe ecs.g7ne.8xlarge. EFCRuntime efc-demo memiliki tiga pod worker yang berjalan pada instance ECS yang sama. StatefulSet efc-app memiliki dua pod yang masing-masing berjalan pada dua instance ECS lainnya. Waktu akses data tidak terpengaruh oleh cache kernel node tempat klien EFC FUSE berjalan.
Jalankan perintah berikut untuk memeriksa waktu yang diperlukan membaca file yang ditentukan dari pod efc-app-0 StatefulSet:
CatatanJika ingin membaca file lain, ganti /data/allzero-demo dengan jalur file tersebut.
kubectl exec -it efc-app-0 -- bash -c "time cat /data/allzero-demo > /dev/null"Output yang diharapkan:
real 0m15.792s user 0m0.023s sys 0m2.404sHasil menunjukkan bahwa 15.792 detik diperlukan untuk membaca file berukuran 10 GB dengan kecepatan baca 648 MiB/s.
Jalankan perintah berikut untuk memeriksa waktu yang diperlukan membaca file yang sama berukuran 10 GB dari pod lain StatefulSet:
CatatanJika ingin membaca file lain, ganti
/data/allzero-demodengan jalur file tersebut.kubectl exec -it efc-app-1 -- bash -c "time cat /data/allzero-demo > /dev/null"Output yang diharapkan:
real 0m9.970s user 0m0.012s sys 0m2.283sHasil menunjukkan bahwa 9.970 detik diperlukan untuk membaca file berukuran 10 GB dengan kecepatan baca 1,034.3 MiB/s.
Setelah menggunakan Fluid EFCRuntime, kecepatan baca meningkat dari 648 MiB/s menjadi 1,034.3 MiB/s. Untuk file yang sama, Fluid EFCRuntime meningkatkan kecepatan baca sekitar 100%.