Fluid mendukung percepatan akses data pada kluster ACK Serverless. Anda dapat menjalankan semua komponen Fluid—termasuk controller Fluid, komponen sistem caching, dan aplikasi Anda—pada kluster ACK Serverless. Topik ini menjelaskan cara mempercepat akses data untuk aplikasi Job di kluster ACK Serverless.
Prasyarat
-
Anda telah membuat kluster ACK Serverless yang menjalankan Kubernetes versi 1.18 atau lebih baru dan telah menginstal komponen CoreDNS. Untuk informasi selengkapnya, lihat Create a cluster.
-
Anda telah terhubung ke kluster Kubernetes menggunakan kubectl. Untuk informasi selengkapnya, lihat Obtain the KubeConfig of a cluster and use kubectl to connect to the cluster.
-
Anda telah mengaktifkan Object Storage Service (OSS) dan membuat sebuah bucket. Untuk informasi selengkapnya, lihat Mengaktifkan OSS dan Membuat bucket di Konsol.
Batasan
Fitur ini tidak kompatibel dengan fitur virtual node scheduling pada kluster ACK Serverless. Anda tidak dapat menggunakan kedua fitur tersebut secara bersamaan. Untuk informasi selengkapnya tentang virtual node scheduling, lihat Enable the virtual node scheduling policy for a cluster.
Deploy komponen control plane Fluid
Jika Anda telah menginstal Fluid open-source, Anda harus menguninstall-nya terlebih dahulu sebelum melakukan deploy komponen ack-fluid.
-
Deploy komponen lapisan kontrol Fluid.
Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik .
-
Pada halaman Helm, klik Deploy.
-
Pada wizard konfigurasi Basic Information, konfigurasikan parameter terkait, lalu klik Next.
Tabel berikut menjelaskan parameter utama.
Parameter
Deskripsi
Source
Pilih Marketplace.
Chart
Cari dan pilih ack-fluid.
CatatanNama release default adalah ack-fluid dan namespace default adalah fluid-system. Jika Anda menentukan nama release atau namespace yang berbeda, kotak dialog Confirm akan muncul saat Anda mengklik Next. Kami menyarankan agar Anda mengklik Yes di kotak dialog tersebut untuk menggunakan nilai default.
-
Pada wizard Parameters, klik OK.
-
Jalankan perintah berikut untuk memeriksa apakah Fluid berhasil dideploy.
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 2m49sOutput serupa menunjukkan bahwa Fluid berhasil dideploy. Komponen-komponen tersebut dijelaskan sebagai berikut:
-
Dataset Controller: Mengelola siklus hidup lengkap dari Custom Resource (CR) Dataset yang diperkenalkan oleh Fluid.
-
Fluid Webhook: Menyuntikkan kontainer sidecar ke dalam pod aplikasi yang perlu mengakses data. Hal ini memungkinkan akses data transparan dalam skenario serverless.
CatatanSelain dua komponen ini, control plane Fluid juga mencakup komponen controller untuk mengelola sistem caching seperti JindoFS, JuiceFS, dan Alluxio. Komponen-komponen ini tidak dibuat saat deployment awal. Pod untuk controller sistem caching tertentu hanya diskalakan sesuai permintaan ketika Anda menentukan ingin menggunakan sistem tersebut.
-
Mempercepat akses data dalam kluster ACK Serverless
Langkah 1: Unggah data uji ke bucket OSS
-
Buat file uji berukuran 2 GB. Topik ini menggunakan test sebagai contoh.
-
Unggah file uji ke bucket Anda di OSS.
Anda dapat menggunakan ossutil, alat client yang disediakan oleh OSS, untuk mengunggah data. Untuk informasi selengkapnya, lihat Install ossutil.
Langkah 2: Buat resource Fluid Dataset dan Runtime
Setelah menyiapkan dan mengunggah data, Anda harus mendeklarasikan data yang akan diakses dalam Fluid dengan mengirimkan CR Dataset dan CR Runtime.
-
CR Dataset: Mendeskripsikan URL data dalam sistem penyimpanan eksternal.
-
CR Runtime: Mendeskripsikan sistem caching dan konfigurasinya.
-
Jalankan perintah berikut untuk membuat resource Secret yang menyimpan kredensial yang diperlukan untuk mengakses bucket 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 dataset.yaml dengan konten berikut untuk mendefinisikan CR Dataset dan CR Runtime.
Contoh ini menggunakan JindoFS sebagai backend sistem caching, yang sesuai dengan JindoRuntime.
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 # Titik akhir bucket OSS. 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 pekerja cache. replicas: 2 worker: podMetadata: annotations: # Nonaktifkan fitur virtual node scheduling. alibabacloud.com/burst-resource: eci_only # Spesifikasi instans ECI untuk pod JindoFS. k8s.aliyun.com/eci-use-specs: <eci_instance_spec> # Aktifkan cache gambar instans untuk mempercepat startup pod. k8s.aliyun.com/eci-image-cache: "true" tieredstore: levels: # Gunakan 10 GiB memori sebagai media cache untuk setiap node pekerja cache. - mediumtype: MEM volumeType: emptyDir path: /dev/shm quota: 10Gi high: "0.99" low: "0.99"Tabel berikut menjelaskan parameter utama.
Parameter
Deskripsi
mountPointJalur untuk memasang file system dasar (UFS). Formatnya adalah
oss://<oss_bucket>/<bucket_dir>.Jalur ini tidak perlu mencantumkan informasi endpoint. Jika Anda menggunakan satu titik pemasangan, Anda dapat mengatur
pathke/.optionsMenentukan titik akhir bucket OSS. Anda dapat mengatur ini ke titik akhir internal atau titik akhir publik.
fs.oss.endpointTitik akhir bucket OSS. Anda dapat menggunakan titik akhir publik atau internal.
Menggunakan titik akhir internal dapat meningkatkan kinerja akses data, tetapi memerlukan agar kluster Kubernetes dan bucket OSS berada di wilayah yang sama. Misalnya, jika bucket Anda berada di wilayah China (Hangzhou), titik akhir publik adalah
oss-cn-hangzhou.aliyuncs.comdan titik akhir internal adalahoss-cn-hangzhou-internal.aliyuncs.com.fs.oss.accessKeyIdID AccessKey yang memiliki izin untuk mengakses bucket OSS.
fs.oss.accessKeySecretAccessKey Secret yang sesuai dengan ID AccessKey.
replicasJumlah pod pekerja cache JindoRuntime. Jumlah ini memengaruhi kapasitas maksimum yang tersedia dari sistem caching terdistribusi.
worker.podMetadata.annotationsAnda dapat menentukan spesifikasi instans ECI dan cache gambar instans.
tieredstore.levelsAnda dapat menggunakan bidang
quotauntuk menentukan kapasitas cache maksimum yang dapat disediakan oleh setiap pod pekerja cache.tieredstore.levels.mediumtypeMedia cache. Nilai yang didukung adalah HDD (hard disk drive), SSD (solid-state drive), dan MEM (memory).
Untuk konfigurasi yang direkomendasikan untuk
mediumtype, lihat Strategy 2: Select a cache medium.tieredstore.levels.volumeTypeJenis volume dari media cache. Hanya emptyDir dan hostPath yang didukung. Nilai default-nya adalah hostPath.
-
Jika Anda menggunakan memori atau disk sistem penyimpanan lokal sebagai media cache, kami menyarankan agar Anda memilih emptyDir untuk mencegah data cache sisa di node memengaruhi ketersediaan node.
-
Jika Anda menggunakan disk data penyimpanan lokal sebagai media cache, Anda dapat menggunakan hostPath dan mengatur
pathke titik pemasangan disk data pada host machine.
Untuk konfigurasi yang direkomendasikan untuk
volumeType, lihat Strategy 2: Select a cache medium.tieredstore.levels.pathHanya mendukung satu jalur.
tieredstore.levels.quotaKapasitas cache maksimum. Misalnya,
100Gimenentukan kapasitas maksimum 100 GiB.tieredstore.levels.highWatermark tinggi untuk kapasitas penyimpanan.
tieredstore.levels.lowWatermark rendah untuk kapasitas penyimpanan.
-
-
Jalankan perintah berikut untuk membuat resource Dataset dan JindoRuntime.
kubectl create -f dataset.yaml -
Jalankan perintah berikut untuk memeriksa status deployment dataset.
Setelah Anda membuat CR Dataset dan JindoRuntime, sistem caching dideploy dalam waktu sekitar satu hingga dua menit. Anda kemudian dapat melihat informasi tentang sistem caching dan data dalam sistem penyimpanan backend.
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 2m58sOutput ini menampilkan informasi tentang Dataset Fluid. Tabel berikut menjelaskan item output utama.
Item keluaran
Deskripsi
UFS TOTAL SIZE
Ukuran total dataset di OSS.
CACHED
Ukuran data yang saat ini di-cache.
CACHE CAPACITY
Kapasitas sistem caching.
CACHED PERCENTAGE
Persentase dataset yang di-cache.
PHASE
Status dataset. Bound menunjukkan bahwa dataset berhasil dideploy.
(Opsional) Langkah 3: Lakukan pemanasan cache data
Untuk kinerja akses data pertama kali yang optimal, kami menyarankan untuk melakukan pemanasan cache data terlebih dahulu.
-
Gunakan konten berikut untuk membuat file dataload.yaml.
apiVersion: data.fluid.io/v1alpha1 kind: DataLoad metadata: name: data-warmup spec: dataset: name: demo-dataset namespace: default loadMetadata: true -
Jalankan perintah berikut untuk melakukan deploy Dataload.
kubectl create -f dataload.yamlOutput yang diharapkan:
NAME DATASET PHASE AGE DURATION data-warmup demo-dataset Complete 99s 58sOutput ini menunjukkan bahwa pemanasan cache data memakan waktu sekitar
58s.
Langkah 4: Buat aplikasi pekerjaan
Anda dapat menggunakan layanan percepatan akses data JindoFS dengan membuat kontainer aplikasi atau mengirimkan tugas pembelajaran mesin. Contoh ini menunjukkan cara membuat aplikasi Job untuk mengakses data di OSS.
-
Buat file bernama job.yaml dengan konten berikut untuk mendefinisikan resource Job.
apiVersion: batch/v1 kind: Job metadata: name: demo-app spec: template: metadata: labels: alibabacloud.com/fluid-sidecar-target: eci annotations: # Nonaktifkan fitur virtual node scheduling. 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 args: - -c - du -sh /data && time cp -r /data/ /tmp command: - /bin/bash volumeMounts: - mountPath: /data name: demo restartPolicy: Never volumes: - name: demo persistentVolumeClaim: claimName: demo-dataset backoffLimit: 4 -
Jalankan perintah berikut untuk membuat Job.
kubectl create -f job.yaml -
Jalankan perintah berikut untuk melihat log awal Job Pod.
kubectl logs demo-app-jwktf -c demoOutput yang diharapkan:
1.2G /data real 0m0.992s user 0m0.004s sys 0m0.674sOutput ini menunjukkan bahwa waktu
realuntuk menyalin file hanya0m0.992s.
Langkah 5: Bersihkan lingkungan
Ketika Anda tidak lagi memerlukan fitur akses data, bersihkan lingkungan untuk menghindari biaya yang tidak perlu.
-
Jalankan perintah berikut untuk menghapus Job application.
kubectl delete job demo-app -
Jalankan perintah berikut untuk menghapus dataset dan komponen sistem caching terkaitnya.
kubectl delete dataset demo-datasetPentingDiperlukan waktu sekitar satu menit untuk membersihkan komponen sistem caching. Pastikan semua pod untuk komponen sistem caching telah sepenuhnya dihapus sebelum melanjutkan.
-
Jalankan perintah berikut untuk menskalakan turun komponen control plane Fluid.
kubectl get deployments.apps -n fluid-system | awk 'NR>1 {print $1}' | xargs kubectl scale deployments -n fluid-system --replicas=0Jika Anda ingin menggunakan kembali fitur akses data, Anda harus menjalankan perintah berikut terlebih dahulu untuk menskalakan naik komponen control plane Fluid sebelum membuat resource Fluid Dataset dan Runtime.
kubectl scale -n fluid-system deployment dataset-controller --replicas=1 kubectl scale -n fluid-system deployment fluid-webhook --replicas=1