Di ACK Serverless, deploy Fluid untuk menyimpan cache data OSS secara lokal sehingga pembacaan berulang oleh Job selesai dalam waktu kurang dari satu detik. Controller Fluid, sistem caching, dan pod aplikasi semuanya dapat berjalan di lingkungan Serverless.
Deploy Fluid, konfigurasikan Dataset dan JindoRuntime yang didukung oleh bucket OSS, lalu jalankan Job yang membaca data dari cache.
Prasyarat
Pastikan Anda telah memiliki:
-
Kluster ACK Serverless yang menjalankan Kubernetes 1.18 atau lebih baru dengan CoreDNS.
-
kubectl yang telah dikonfigurasi untuk terhubung ke kluster tersebut.
-
Instans OSS yang diaktifkan dengan bucket yang siap digunakan.
Batasan
Fluid bentrok dengan fitur penjadwalan virtual node pada kluster ACK Serverless — Anda tidak dapat menggunakan keduanya secara bersamaan. Lihat Aktifkan kebijakan penjadwalan virtual node untuk kluster.
Untuk menghindari hal ini, semua pod worker cache JindoRuntime dan pod aplikasi harus menyertakan anotasi alibabacloud.com/burst-resource: eci_only. Anotasi ini muncul dalam contoh YAML di bawah ini.
Deploy lapisan kontrol Fluid
Jika Fluid open-source telah terinstal, uninstal terlebih dahulu sebelum mendeploy ack-fluid.
-
Di Konsol ACK, klik Clusters pada panel navigasi.
-
Klik nama kluster tersebut. Pada panel navigasi, klik Applications > Helm.
-
Pada halaman Helm, klik Deploy.
-
Pada Basic Information, atur parameter berikut, lalu klik Next.
Nama rilis default adalah
ack-fluiddan namespace-nya adalahfluid-system. Jika Anda mengubahnya, dialog Confirm akan muncul — klik Yes untuk mengembalikan ke nilai awal.Parameter Nilai Source Marketplace Chart Cari dan pilih ack-fluid -
Pada Parameters, klik OK.
-
Verifikasi bahwa lapisan kontrol Fluid sedang berjalan:
-
Dataset Controller — mengelola siklus hidup CR Dataset.
-
Fluid Webhook — menyuntikkan sidecar caching ke dalam pod aplikasi untuk akses data transparan dalam skenario Serverless.
Lapisan kontrol Fluid juga mencakup controller untuk JindoFS, JuiceFS, dan Alluxio. Komponen-komponen ini diskalakan sesuai permintaan saat Anda mengonfigurasi masing-masing sistem caching.
kubectl get pod -n fluid-systemOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE dataset-controller-d99998f79-dgkmh 1/1 Running 0 2m48s fluid-webhook-55c6d9d497-dmrzb 1/1 Running 0 2m49sKedua komponen tersebut memiliki peran yang berbeda:
-
Mempercepat akses data
Unggah data uji ke OSS
-
Buat file uji berukuran 2 GB seperti set data sampel ini.
-
Unggah file tersebut ke bucket OSS Anda menggunakan ossutil.
Buat resource Dataset dan JindoRuntime
Contoh ini menggunakan JindoFS sebagai backend cache (JindoRuntime). Fluid merepresentasikan sumber data sebagai dua Custom Resource (CR):
-
Dataset — menunjuk ke data di sistem penyimpanan eksternal.
-
JindoRuntime — mendefinisikan konfigurasi sistem caching.
Fluid menggunakan pemuatan malas (lazy loading): akses pertama mengambil data dari OSS ke cache lokal; pembacaan berikutnya berasal dari cache. Untuk menghilangkan latensi pada eksekusi pertama, panaskan cache terlebih dahulu sebelum mengirimkan Job Anda.
-
Buat Secret untuk menyimpan kredensial OSS:
kubectl create secret generic oss-access-key \ --from-literal=fs.oss.accessKeyId=<access_key_id> \ --from-literal=fs.oss.accessKeySecret=<access_key_secret> -
Buat file bernama
dataset.yaml:Parameter Deskripsi mountPointPath mount OSS dalam format oss://<bucket_name>/<bucket_path>. Aturpathke/untuk satu titik mount.fs.oss.endpointTitik akhir bucket OSS. Gunakan titik akhir internal (misalnya, oss-cn-hangzhou-internal.aliyuncs.com) untuk akses dalam wilayah yang sama; gunakan titik akhir publik (misalnya,oss-cn-hangzhou.aliyuncs.com) jika tidak.replicasJumlah pod worker cache. Menentukan kapasitas total cache. alibabacloud.com/burst-resource: eci_onlyMenonaktifkan penjadwalan virtual node pada pod worker cache. Wajib — Fluid bentrok dengan penjadwalan virtual node (lihat Batasan). k8s.aliyun.com/eci-use-specsSpesifikasi instans ECI untuk setiap pod worker cache. k8s.aliyun.com/eci-image-cacheMengaktifkan cache image instans untuk mempercepat startup pod. tieredstore.levels.mediumtypeMedia cache. Nilai yang valid: MEM(memori),SSD,HDD. Lihat Pilih media cache.tieredstore.levels.volumeTypeJenis volume. Gunakan emptyDiruntuk memori atau disk sistem (mencegah cache sisa memengaruhi ketersediaan node). GunakanhostPathuntuk disk data dan aturpathke titik mount. Default:hostPath.tieredstore.levels.pathPath cache. Hanya satu path yang didukung. tieredstore.levels.quotaKapasitas cache maksimum per worker, misalnya 10Gi.tieredstore.levels.high/lowWatermark tinggi dan rendah untuk eviksi cache. apiVersion: data.fluid.io/v1alpha1 kind: Dataset metadata: name: demo-dataset spec: mounts: - mountPoint: oss://<bucket_name>/<bucket_path> name: demo path: / options: fs.oss.endpoint: oss-<region>.aliyuncs.com encryptOptions: - name: fs.oss.accessKeyId valueFrom: secretKeyRef: name: oss-access-key key: fs.oss.accessKeyId - name: fs.oss.accessKeySecret valueFrom: secretKeyRef: name: oss-access-key key: fs.oss.accessKeySecret --- apiVersion: data.fluid.io/v1alpha1 kind: JindoRuntime metadata: name: demo-dataset spec: # Jumlah node worker cache replicas: 2 worker: podMetadata: annotations: # Wajib: nonaktifkan penjadwalan virtual node (bentrok dengan Fluid — lihat Batasan) alibabacloud.com/burst-resource: eci_only # Spesifikasi instans ECI untuk pod worker cache JindoFS k8s.aliyun.com/eci-use-specs: <eci_instance_spec> # Aktifkan cache image instans untuk mempercepat startup pod k8s.aliyun.com/eci-image-cache: "true" tieredstore: levels: # Cache memori 10 GiB per node worker - mediumtype: MEM volumeType: emptyDir path: /dev/shm quota: 10Gi high: "0.99" low: "0.99"Parameter utama:
-
Terapkan manifes:
kubectl create -f dataset.yaml -
Tunggu satu hingga dua menit agar sistem caching selesai dideploy, lalu verifikasi status Dataset:
Jika
PHASEmenampilkanNotBound, sistem caching masih dalam proses inisialisasi. Tunggu satu hingga dua menit lalu periksa kembali.kubectl get dataset demo-datasetOutput yang diharapkan:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE demo-dataset 1.16GiB 0.00B 20.00GiB 0.0% Bound 2m58sPHASE: Boundmengonfirmasi deploy berhasil. Kolom lainnya menunjukkan ukuran data OSS, jumlah yang di-cache, dan kapasitas total cache.
Pemanasan awal cache (opsional)
Fluid menggunakan pemuatan malas, sehingga eksekusi Job pertama kali mengambil data dari OSS dan dapat memakan waktu puluhan detik untuk set data berukuran besar. Panaskan cache terlebih dahulu untuk menghilangkan latensi eksekusi pertama.
-
Buat file bernama
dataload.yaml:apiVersion: data.fluid.io/v1alpha1 kind: DataLoad metadata: name: data-warmup spec: dataset: name: demo-dataset namespace: default loadMetadata: true -
Jalankan job pemanasan cache:
kubectl create -f dataload.yamlTunggu hingga status menunjukkan
Complete:NAME DATASET PHASE AGE DURATION data-warmup demo-dataset Complete 99s 58sPemanasan cache selesai dalam waktu sekitar
58s.
Buat aplikasi Job
Gunakan kontainer aplikasi atau job pembelajaran mesin untuk mengakses data yang dipercepat melalui JindoFS. Contoh ini membuat Job yang membaca data OSS demo-dataset. PVC tersebut secara otomatis membaca dari cache JindoFS—tanpa perlu mengubah kode. Label alibabacloud.com/fluid-sidecar-target: eci memicu Fluid Webhook untuk menyuntikkan sidecar caching.
-
Buat file bernama
job.yaml:apiVersion: batch/v1 kind: Job metadata: name: demo-app spec: template: metadata: labels: alibabacloud.com/fluid-sidecar-target: eci annotations: # Wajib: nonaktifkan penjadwalan virtual node (bentrok dengan Fluid — lihat Batasan) alibabacloud.com/burst-resource: eci_only # Spesifikasi instans ECI untuk pod aplikasi k8s.aliyun.com/eci-use-specs: ecs.g7.4xlarge spec: containers: - name: demo image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 command: - /bin/bash args: - -c - du -sh /data && time cp -r /data/ /tmp volumeMounts: - mountPath: /data name: demo restartPolicy: Never volumes: - name: demo persistentVolumeClaim: claimName: demo-dataset backoffLimit: 4 -
Kirimkan Job:
kubectl create -f job.yaml -
Periksa log Job setelah selesai:
kubectl logs demo-app-jwktf -c demoOutput yang diharapkan:
1.2G /data real 0m0.992s user 0m0.004s sys 0m0.674sWaktu
realuntuk penyalinan file adalah0m0.992s.
Bersihkan
Bersihkan resource untuk menghindari biaya yang tidak perlu.
-
Hapus Job:
kubectl delete job demo-app -
Hapus Dataset. Ini juga akan menghapus komponen sistem caching terkait:
PentingPembersihan memerlukan waktu sekitar satu menit. Tunggu hingga semua pod caching terhapus sebelum melanjutkan.
kubectl delete dataset demo-dataset -
Skalakan turun lapisan kontrol Fluid:
kubectl get deployments.apps -n fluid-system | awk 'NR>1 {print $1}' | xargs kubectl scale deployments -n fluid-system --replicas=0Untuk mengaktifkan kembali akses data, skalakan kembali lapisan kontrol sebelum membuat resource Dataset dan JindoRuntime baru:
kubectl scale -n fluid-system deployment dataset-controller --replicas=1 kubectl scale -n fluid-system deployment fluid-webhook --replicas=1