Anda dapat menggunakan Fluid untuk mempercepat akses ke data yang disimpan di ACK Serverless cluster. Semua komponen Fluid, termasuk kontroler Fluid dan mesin runtime cache, serta aplikasi Anda, dapat diterapkan di dalam ACK Serverless cluster. Topik ini menjelaskan cara mempercepat Jobs di ACK Serverless cluster.
Prasyarat
Sebuah ACK Serverless cluster telah dibuat dengan versi Kubernetes 1.18 atau lebih baru. CoreDNS juga harus sudah terinstal di dalam klaster. Untuk informasi lebih lanjut, lihat Buat sebuah ACK Serverless cluster.
Klien kubectl harus terhubung ke klaster ACK. Untuk informasi lebih lanjut, lihat Hubungkan ke klaster ACK menggunakan kubectl.
Object Storage Service (OSS) harus diaktifkan dan bucket telah dibuat. Untuk informasi lebih lanjut, lihat Aktifkan OSS dan Buat bucket.
Batasan
Fitur ini tidak kompatibel dengan fitur penjadwalan pod berbasis node virtual dari ACK Serverless cluster. Untuk informasi lebih lanjut tentang fitur penjadwalan pod berbasis node virtual, lihat Aktifkan kebijakan penjadwalan pod berbasis node virtual untuk klaster ACK.
Terapkan komponen control plane Fluid
Jika Anda telah menginstal Fluid sumber terbuka, Anda harus menghapus instalasi tersebut sebelum menginstal komponen ack-fluid.
Terapkan komponen control plane Fluid.
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, temukan klaster yang diinginkan dan klik namanya. Di panel kiri, pilih .
Pada halaman Helm, klik Deploy.
Pada halaman wizard Basic Information, konfigurasikan parameter dan klik Next.
Tabel berikut menjelaskan beberapa parameter yang ditampilkan.
Parameter
Deskripsi
Sumber
Pilih Marketplace.
Chart
Cari dan klik ack-fluid.
CatatanNama rilis default untuk chart ack-fluid adalah ack-fluid. Namespace default untuk chart ack-fluid adalah fluid-system. Klik Next. Jika nama rilis aktual dan namespace untuk chart ack-fluid berbeda dari nama rilis default dan namespace default, pesan Confirm akan muncul. Klik Yes untuk menggunakan nama rilis default dan namespace default.
Pada halaman wizard Parameters, klik OK.
Jalankan perintah berikut untuk memeriksa apakah Fluid telah diterapkan:
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 menunjukkan bahwa Fluid telah diterapkan. Berikut ini adalah deskripsi komponen control plane Fluid:
Dataset Controller: mengelola siklus hidup objek Dataset yang direferensikan oleh Fluid. Objek Dataset adalah objek resource kustom (CR).
Fluid Webhook: melakukan injeksi sidecar pada pod yang perlu mengakses data. Ini membuat akses data transparan bagi pengguna dalam skenario serverless.
CatatanSelain komponen yang disebutkan di atas, control plane Fluid juga mencakup kontroler yang digunakan untuk mengelola siklus hidup runtime cache, seperti JindoFS runtime, JuiceFS runtime, dan Alluxio runtime. Kontroler yang sesuai dengan runtime cache hanya diterapkan setelah runtime cache digunakan.
Contoh-contoh mempercepat akses data di ACK Serverless cluster
Langkah 1: Unggah dataset uji ke bucket OSS
Buat dataset uji berukuran 2 GB. Dalam contoh ini, dataset uji test digunakan.
Unggah dataset uji ke bucket OSS yang Anda buat.
Anda dapat menggunakan alat ossutil yang disediakan oleh OSS untuk mengunggah data. Untuk informasi lebih lanjut, lihat Instal ossutil.
Langkah 2: Buat objek Dataset dan objek Runtime
Setelah Anda mengunggah dataset uji ke OSS, Anda dapat menggunakan Fluid untuk mengklaim dataset tersebut. Buat objek Dataset (objek CR) dan objek Runtime (objek CR).
Objek Dataset digunakan untuk menentukan URL dataset uji yang diunggah ke OSS.
Objek Runtime digunakan untuk mendefinisikan dan mengonfigurasi sistem cache yang digunakan.
Jalankan perintah berikut untuk membuat Secret yang menyimpan kredensial yang digunakan 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 bernama dataset.yaml dan salin konten berikut ke dalam file. File ini digunakan untuk membuat objek Dataset dan objek Runtime.
Dalam topik ini, JindoRuntime digunakan untuk berinteraksi dengan JindoFS.
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 pod worker yang akan dibuat di klaster JindoFS. replicas: 2 worker: podMetadata: annotations: # Nonaktifkan kebijakan penjadwalan pod berbasis node virtual. alibabacloud.com/burst-resource: eci_only # Jenis instans yang digunakan untuk menjalankan pod worker. k8s.aliyun.com/eci-use-specs: <eci_instance_spec> # Gunakan image cache untuk mempercepat pembuatan pod. k8s.aliyun.com/eci-image-cache: "true" tieredstore: levels: # Tentukan 10 GiB memori sebagai cache untuk setiap pod worker. - mediumtype: MEM volumeType: emptyDir path: /dev/shm quota: 10Gi high: "0.99" low: "0.99"Tabel berikut menjelaskan beberapa parameter yang ditampilkan.
Parameter
Deskripsi
mountPointPath tempat UFS dipasang. Format path adalah
oss://<oss_bucket>/<bucket_dir>.Jangan sertakan informasi titik akhir dalam path. Jika Anda hanya menggunakan satu titik pemasangan, Anda dapat mengatur
pathmenjadi/.optionsInformasi tentang titik akhir bucket OSS. Anda dapat menentukan titik akhir publik atau internal.
fs.oss.endpointTitik akhir publik atau internal bucket OSS.
Anda dapat menentukan titik akhir internal bucket untuk meningkatkan keamanan data. Namun, jika Anda menentukan titik akhir internal, pastikan bahwa klaster Anda ditempatkan di wilayah tempat OSS diaktifkan. Sebagai contoh, jika bucket OSS Anda dibuat di wilayah China (Hangzhou), titik akhir publik bucket adalah
oss-cn-hangzhou.aliyuncs.comdan titik akhir internalnya adalahoss-cn-hangzhou-internal.aliyuncs.com.fs.oss.accessKeyIdID AccessKey yang digunakan untuk mengakses bucket.
fs.oss.accessKeySecretRahasia AccessKey yang digunakan untuk mengakses bucket.
replicasJumlah pod worker yang dibuat oleh JindoRuntime. Parameter ini menentukan ukuran cache maksimum yang dapat disediakan oleh runtime cache terdistribusi.
worker.podMetadata.annotationsAnda dapat menentukan jenis instans dan image cache.
tieredstore.levelsAnda dapat menggunakan bidang
quotauntuk menentukan ukuran maksimum cache yang digunakan oleh setiap pod worker.tieredstore.levels.mediumtypeJenis cache. Jenis cache yang didukung adalah HDD, SSD, dan MEM.
Untuk informasi lebih lanjut tentang konfigurasi mediumtype yang direkomendasikan, lihat Kebijakan 2: Pilih media cache yang tepat.
tieredstore.levels.volumeTypeTipe volume media cache. Nilai valid:
emptyDirdanhostPath. Nilai default:hostPath.Jika Anda menggunakan memori atau disk sistem lokal sebagai media cache, kami sarankan Anda menggunakan tipe
emptyDiruntuk menghindari data cache residu di node dan memastikan ketersediaan node.Jika Anda menggunakan disk data lokal sebagai media cache, Anda dapat menggunakan tipe
hostPathdan mengonfigurasipathuntuk menentukan jalur pemasangan disk data pada host.
Untuk informasi lebih lanjut tentang konfigurasi volumeType yang direkomendasikan, lihat Kebijakan 2: Pilih media cache yang tepat.
tieredstore.levels.pathPath cache. Anda hanya dapat menentukan satu path.
tieredstore.levels.quotaUkuran cache maksimum. Sebagai contoh, nilai 100 Gi menunjukkan bahwa ukuran cache maksimum adalah 100 GiB.
tieredstore.levels.highBatas atas penyimpanan.
tieredstore.levels.lowBatas bawah penyimpanan.
Jalankan perintah berikut untuk membuat objek Dataset dan objek JindoRuntime:
kubectl create -f dataset.yamlJalankan perintah berikut untuk memeriksa apakah objek Dataset telah dibuat.
Membutuhkan waktu 1 hingga 2 menit untuk membuat objek Dataset dan objek JindoRuntime. Setelah objek dibuat, Anda dapat menanyakan informasi tentang sistem cache dan data yang di-cache.
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 menunjukkan informasi tentang objek Dataset yang Anda buat di Fluid. Tabel berikut menjelaskan parameter dalam output.
Parameter
Deskripsi
UFS TOTAL SIZE
Ukuran dataset yang diunggah ke OSS.
CACHED
Ukuran data yang di-cache.
CACHE CAPACITY
Total ukuran cache.
CACHED PERCENTAGE
Persentase data yang di-cache dalam dataset.
PHASE
Status objek Dataset. Jika nilainya adalah Bound, objek Dataset telah dibuat.
(Opsional) Langkah 3: Pra-pemanasan data
Pra-fetching dapat secara efisien mempercepat akses data pertama kali. Kami merekomendasikan Anda menggunakan fitur ini jika ini adalah pertama kalinya Anda mengambil data.
Buat file bernama dataload.yaml berdasarkan konten berikut:
apiVersion: data.fluid.io/v1alpha1 kind: DataLoad metadata: name: data-warmup spec: dataset: name: demo-dataset namespace: default loadMetadata: trueJalankan perintah berikut untuk membuat objek DataLoad:
kubectl create -f dataload.yamlOutput yang diharapkan:
NAME DATASET PHASE AGE DURATION data-warmup demo-dataset Complete 99s 58sOutput menunjukkan bahwa durasi pra-pemanasan data adalah
58 detik.
Langkah 4: Buat Job untuk menguji akselerasi akses data
Anda dapat membuat aplikasi untuk menguji apakah akses data dipercepat oleh JindoFS, atau mengirimkan Jobs pembelajaran mesin untuk menggunakan fitur terkait. Bagian ini menjelaskan cara menggunakan Job untuk mengakses data yang disimpan di OSS.
Buat file bernama job.yaml dan salin konten berikut ke dalam file:
apiVersion: batch/v1 kind: Job metadata: name: demo-app spec: template: metadata: labels: alibabacloud.com/fluid-sidecar-target: eci annotations: # Nonaktifkan kebijakan penjadwalan pod berbasis node virtual. alibabacloud.com/burst-resource: eci_only # Pilih jenis instans untuk pod. 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: 4Jalankan perintah berikut untuk membuat Job:
kubectl create -f job.yamlJalankan perintah berikut untuk menanyakan log boot dari pod yang dibuat oleh Job:
kubectl logs demo-app-jwktf -c demoOutput yang diharapkan:
1.2G /data real 0m0.992s user 0m0.004s sys 0m0.674sBidang
realdalam output menunjukkan bahwa dibutuhkan waktu 0,992 detik (0m0.992s) untuk mereplikasi file.
Langkah 5: Bersihkan data
Setelah Anda menguji akselerasi akses data, bersihkan data terkait sesegera mungkin.
Jalankan perintah berikut untuk menghapus pod dari Job:
kubectl delete job demo-appJalankan perintah berikut untuk menghapus objek Dataset dan komponen yang sesuai dengan runtime cache.
kubectl delete dataset demo-datasetPentingMembutuhkan sekitar 1 menit untuk menghapus komponen. Sebelum melakukan langkah berikutnya, pastikan bahwa komponen telah dihapus.
Jalankan perintah berikut untuk menghapus komponen control plane Fluid:
kubectl get deployments.apps -n fluid-system | awk 'NR>1 {print $1}' | xargs kubectl scale deployments -n fluid-system --replicas=0Untuk mengaktifkan akselerasi akses data lagi, Anda harus menjalankan perintah berikut untuk membuat komponen control plane Fluid sebelum membuat objek Dataset dan objek Runtime:
kubectl scale -n fluid-system deployment dataset-controller --replicas=1 kubectl scale -n fluid-system deployment fluid-webhook --replicas=1