Saat data sumber di OSS berubah secara berkala, Pod aplikasi yang mengandalkan cache JindoRuntime dapat menyajikan data lama antara penyegaran cache. Gunakan pekerjaan DataLoad terjadwal untuk menarik data terbaru dari OSS ke dalam cache JindoRuntime secara otomatis—tanpa me-restart Pod aplikasi. Topik ini menggunakan JindoFS sebagai contoh.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Kluster ACK yang dikelola Edisi Pro versi 1.18 atau lebih baru. Untuk informasi selengkapnya, lihat Buat Kluster ACK yang Dikelola Edisi Pro.
Suite AI cloud-native telah diinstal dengan komponen ack-fluid (versi 1.0.3) dideploy.
PentingJika Anda telah menginstal Fluid open-source, uninstal terlebih dahulu sebelum mendeploy ack-fluid. Untuk menginstal ack-fluid, lihat Instal suite AI cloud-native, atau deploy dari halaman Cloud-native AI Suite di Konsol ACK.
kubectl dikonfigurasi untuk terhubung ke kluster Anda. Untuk informasi selengkapnya, lihat Hubungkan ke kluster menggunakan tool kubectl.
ossutil diinstal dan bucket OSS telah dibuat. Untuk informasi selengkapnya, lihat Instal ossutil.
Langkah 1: Siapkan data di bucket OSS
Unduh file uji.
wget https://archive.apache.org/dist/hbase/2.5.2/RELEASENOTES.mdUnggah file tersebut ke bucket OSS Anda.
ossutil64 cp RELEASENOTES.md oss://<bucket>/<path>/RELEASENOTES.md
Langkah 2: Buat Dataset dan JindoRuntime
Buat file bernama
mySecret.yamldengan konten berikut untuk menyimpan kredensial OSS Anda.apiVersion: v1 kind: Secret metadata: name: mysecret stringData: fs.oss.accessKeyId: ****** # Masukkan ID AccessKey Anda. fs.oss.accessKeySecret: ****** # Masukkan rahasia AccessKey Anda.Buat Secret tersebut.
kubectl create -f mySecret.yamlOutput yang diharapkan:
secret/mysecret createdBuat file bernama
dataset.yamldengan konten berikut.apiVersion: data.fluid.io/v1alpha1 kind: Dataset metadata: name: demo spec: mounts: - mountPoint: oss://<bucket-name>/<path> options: fs.oss.endpoint: <oss-endpoint> name: hbase path: "/" encryptOptions: - name: fs.oss.accessKeyId valueFrom: secretKeyRef: name: mysecret key: fs.oss.accessKeyId - name: fs.oss.accessKeySecret valueFrom: secretKeyRef: name: mysecret key: fs.oss.accessKeySecret accessModes: - ReadOnlyMany --- apiVersion: data.fluid.io/v1alpha1 kind: JindoRuntime metadata: name: demo spec: replicas: 1 tieredstore: levels: - mediumtype: MEM path: /dev/shm quota: 2Gi high: "0.99" low: "0.8" fuse: args: - -okernel_cache - -oro - -oattr_timeout=60 - -oentry_timeout=60 - -onegative_timeout=60Tabel berikut menjelaskan parameter utama.
Sumber Daya Parameter Deskripsi Dataset mountPointPath ke sistem file dasar (UFS), dalam format oss://<bucket>/<path>. Path ini tidak mencakup informasi endpoint.Dataset fs.oss.endpointEndpoint bucket OSS. Endpoint publik maupun pribadi didukung. Dataset accessModesMode akses Dataset. JindoRuntime replicasJumlah node pekerja di kluster JindoFS. JindoRuntime mediumtypeMedia penyimpanan cache. Nilai yang valid: HDD,SSD,MEM.JindoRuntime pathPath penyimpanan lokal. Jika mediumtypeadalahMEM, tentukan path lokal untuk file seperti log.JindoRuntime quotaKapasitas cache maksimum. Atur berdasarkan ukuran data di UFS. JindoRuntime highWatermark tinggi untuk kapasitas penyimpanan cache. JindoRuntime lowWatermark rendah untuk kapasitas penyimpanan cache. JindoRuntime fuse.argsParameter mount klien FUSE opsional. Konfigurasi bergantung pada mode akses Dataset:
- ReadOnlyMany: Aktifkankernel_cacheuntuk menggunakan cache kernel demi performa baca. Aturattr_timeout(cache atribut file),entry_timeout(cache pencarian nama file), dannegative_timeout(cache pencarian nama file gagal). Nilai default untuk semuanya: 7200 detik.
- ReadWriteMany: Gunakan konfigurasi default:-oauto_cache,-oattr_timeout=0,-oentry_timeout=0,-onegative_timeout=0. Opsiauto_cachemembatalkan cache saat ukuran file atau waktu modifikasi berubah.Deploy
dataset.yamluntuk membuat Dataset dan JindoRuntime.kubectl create -f dataset.yamlOutput yang diharapkan:
dataset.data.fluid.io/demo created jindoruntime.data.fluid.io/demo createdVerifikasi bahwa Dataset siap digunakan.
kubectl get datasetOutput yang diharapkan:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE demo 588.90KiB 0.00B 10.00GiB 0.0% Bound 2m7sBidang
PHASEmenampilkanBound, yang berarti Dataset siap digunakan.
Langkah 3: Buat pekerjaan DataLoad terjadwal
Secara default, pekerjaan DataLoad memuat semua data dalam Dataset target. Untuk kontrol detail halus—seperti hanya memuat path tertentu atau menyinkronkan metadata sebelum memuat—lihat Konfigurasi DataLoad lanjutan.
DataLoad mendukung dua kebijakan eksekusi:
Once: Pekerjaan hanya dijalankan sekali.
Cron: Pekerjaan dijalankan sesuai jadwal berulang.
Buat file bernama
dataload.yamldengan konten berikut.apiVersion: data.fluid.io/v1alpha1 kind: DataLoad metadata: name: cron-dataload spec: dataset: name: demo namespace: default policy: Cron schedule: "*/2 * * * *" # Jalankan setiap 2 menitTabel berikut menjelaskan parameter-parameter tersebut.
Parameter Deskripsi datasetNama dan namespace Dataset yang akan dimuat. policyKebijakan eksekusi. Atur ke Cronuntuk pekerjaan terjadwal.scheduleEkspresi cron untuk jadwal pekerjaan. Untuk informasi selengkapnya, lihat Sintaks jadwal Cron. Deploy pekerjaan DataLoad.
kubectl apply -f dataload.yamlOutput yang diharapkan:
dataload.data.fluid.io/cron-dataload createdPeriksa status pekerjaan DataLoad.
kubectl get dataloadSaat
PHASEmenampilkanComplete, data telah dimuat ke dalam cache.NAME DATASET PHASE AGE DURATION cron-dataload demo Complete 68s 8sKonfirmasi bahwa data telah dicache.
kubectl get datasetOutput yang diharapkan:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE demo 588.90KiB 588.90KiB 10.00GiB 100.0% Bound 5m50sCACHED PERCENTAGEsebesar 100% mengonfirmasi bahwa semua data dari OSS telah dimuat ke dalam cache.
Langkah 4: Akses data dari Pod aplikasi
Buat file bernama
app.yamldengan konten berikut.apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx volumeMounts: - mountPath: /data name: demo-vol volumes: - name: demo-vol persistentVolumeClaim: claimName: demoBuat Pod aplikasi.
kubectl create -f app.yamlOutput yang diharapkan:
pod/nginx createdSetelah Pod siap, daftar data di OSS.
kubectl exec -it nginx -- ls -lh /dataOutput yang diharapkan:
total 589K -rwxrwxr-x 1 root root 589K Jul 31 04:20 RELEASENOTES.mdTambahkan baris ke
RELEASENOTES.mduntuk mensimulasikan pembaruan.echo "hello, crondataload." >> RELEASENOTES.mdUnggah ulang file yang telah diperbarui ke OSS.
ossutil64 cp RELEASENOTES.md oss://<bucket-name>/<path>/RELEASENOTES.mdSaat diminta, masukkan
yuntuk mengonfirmasi. Output yang diharapkan:cp: overwrite "oss://<bucket-name>/<path>/RELEASENOTES.md"(y or N)? y Succeed: Total num: 1, size: 21. OK num: 1(upload 1 files).Tunggu hingga eksekusi DataLoad terjadwal berikutnya, lalu periksa status pekerjaan.
kubectl describe dataload cron-dataloadOutput yang diharapkan (bidang relevan):
Status: Conditions: Last Probe Time: 2023-08-24T06:44:08Z Last Transition Time: 2023-08-24T06:44:08Z Status: True Type: Complete Duration: 8s Last Schedule Time: 2023-08-24T06:44:00Z # Waktu penjadwalan pekerjaan DataLoad terakhir. Last Successful Time: 2023-08-24T06:44:08Z # Waktu penyelesaian pekerjaan DataLoad terakhir. Phase: CompleteKonfirmasi bahwa file yang diperbarui telah dicache.
kubectl get datasetOutput yang diharapkan:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE demo 588.90KiB 1.15MiB 10.00GiB 100.0% Bound 10mNilai
CACHEDmeningkat, mencerminkan file yang diperbarui telah dimuat ke dalam cache.Verifikasi bahwa Pod aplikasi dapat membaca konten yang diperbarui.
kubectl exec -it nginx -- tail /data/RELEASENOTES.mdOutput yang diharapkan:
hello, crondataload.
Konfigurasi DataLoad lanjutan
Konfigurasi berikut memungkinkan Anda mengontrol perilaku DataLoad di luar pengaturan default.
Sinkronkan metadata sebelum memuat
Saat file di OSS berubah, JindoFS mungkin menyajikan data lama karena tampilan metadatanya tidak sinkron. Atur loadMetadata: true untuk menyinkronkan metadata sebelum pekerjaan DataLoad dijalankan.
spec:
...
loadMetadata: trueMuat hanya path tertentu
Secara default, DataLoad memuat semua data dalam Dataset. Untuk memuat hanya sebagian, tentukan satu atau beberapa path target.
spec:
...
target:
- path: <path1>
replicas: 1
- path: <path2>
replicas: 2Bidang replicas di bawah setiap target menetapkan jumlah replika cache untuk path tersebut.
Konfigurasi lanjutan gabungan
Contoh berikut menunjukkan semua bidang lanjutan secara bersamaan sebagai referensi.
apiVersion: data.fluid.io/v1alpha1
kind: DataLoad
metadata:
name: cron-dataload
spec:
dataset:
name: demo
namespace: default
policy: Cron
schedule: "* * * * *"
loadMetadata: true
target:
- path: <path1>
replicas: 1
- path: <path2>
replicas: 2(Opsional) Bersihkan
Jika Anda tidak lagi memerlukan pengaturan akselerasi data ini, hapus Pod aplikasi dan Dataset.
kubectl delete -f app.yaml
kubectl delete -f dataset.yamlOutput yang diharapkan:
pod "nginx" deleted
dataset.data.fluid.io "demo" deleted
jindoruntime.data.fluid.io "demo" deleted