All Products
Search
Document Center

Container Service for Kubernetes:Mempercepat akses ke file OSS dengan menggunakan JindoFS

Last Updated:Aug 21, 2026

JindoRuntime adalah execution engine dari JindoFS yang dikembangkan oleh tim Alibaba Cloud E-MapReduce (EMR) dan diimplementasikan dalam C++. JindoRuntime menyediakan manajemen dataset dan caching untuk data Object Storage Service (OSS) dalam kluster Kubernetes. Alibaba Cloud menyediakan dukungan layanan cloud tingkat enterprise untuk JindoFS. Fluid mengelola dan menjadwalkan JindoRuntime guna memberikan observabilitas, auto scaling, dan portabilitas dataset.

Topik ini memandu Anda melalui proses mengunggah dataset uji ke OSS, membuat Dataset dan JindoRuntime, serta memverifikasi efek akselerasi cache menggunakan pod benchmark.

Batasan

  • JindoRuntime memerlukan kluster ACK Pro yang menjalankan sistem operasi non-ContainerOS. Komponen ack-fluid saat ini tidak mendukung ContainerOS.

  • Jika Anda telah menginstal Fluid versi open-source, uninstal terlebih dahulu sebelum men-deploy komponen ack-fluid. Menjalankan keduanya secara bersamaan tidak didukung.

Prasyarat

Sebelum memulai, pastikan Anda telah:

  • Kluster ACK Pro dengan sistem operasi non-ContainerOS, menjalankan Kubernetes 1.18 atau yang lebih baru. Lihat Buat kluster ACK Pro.

  • Komponen ack-fluid telah dideploy di kluster:

    • Jika suite AI cloud-native belum diinstal, aktifkan Fluid acceleration saat menginstal suite tersebut. Lihat Deploy suite AI cloud-native.

    • Jika suite AI cloud-native sudah diinstal, buka halaman Cloud-native AI Suite di Konsol ACK dan deploy komponen ack-fluid.

  • Klien kubectl yang terhubung ke kluster ACK Pro Anda. Lihat Hubungkan ke kluster menggunakan kubectl.

  • OSS telah diaktifkan. Lihat Aktifkan OSS.

Langkah 1: Unggah data ke OSS

Langkah-langkah berikut menggunakan instance Elastic Compute Service (ECS) yang menjalankan Alibaba Cloud Linux 3.2104 LTS 64-bit untuk mengunggah dataset uji. Untuk sistem operasi lainnya, lihat ossutil dan ossutil 1.0.

  1. Unduh dataset uji ke instance ECS Anda.

    wget https://archive.apache.org/dist/spark/spark-3.0.1/spark-3.0.1-bin-hadoop2.7.tgz
  2. Instal ossutil pada instance ECS.

  3. Buat bucket OSS bernama examplebucket.

    ossutil64 mb oss://examplebucket

    Output yang diharapkan:

    0.668238(s) elapsed
  4. Unggah dataset uji ke bucket tersebut.

    ossutil64 cp spark-3.0.1-bin-hadoop2.7.tgz oss://examplebucket

Langkah 2: Buat dataset dan JindoRuntime

JindoRuntime membaca kredensial OSS dari Secret Kubernetes, sehingga buat Secret terlebih dahulu sebelum membuat Dataset.

  1. Buat file bernama mySecret.yaml dengan konten berikut. Ganti xxx dengan ID AccessKey dan Rahasia AccessKey yang memiliki akses baca ke bucket OSS yang Anda buat pada Langkah 1.

    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret
    stringData:
      fs.oss.accessKeyId: xxx
      fs.oss.accessKeySecret: xxx
  2. Terapkan Secret tersebut. Kubernetes mengenkripsi nilai yang disimpan sehingga tidak terekspos sebagai teks biasa.

    kubectl create -f mySecret.yaml
  3. Buat file bernama resource.yaml dengan konten berikut. File ini mendefinisikan Dataset (yang mengarah ke data OSS Anda) dan JindoRuntime (yang meluncurkan kluster caching).

    apiVersion: data.fluid.io/v1alpha1
    kind: Dataset
    metadata:
      name: hadoop
    spec:
      mounts:
        - mountPoint: oss://<oss_bucket>/<bucket_dir>
          options:
            fs.oss.endpoint: <oss_endpoint>
          name: hadoop
          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
    ---
    apiVersion: data.fluid.io/v1alpha1
    kind: JindoRuntime
    metadata:
      name: hadoop
    spec:
      replicas: 2
      tieredstore:
        levels:
          - mediumtype: MEM
            path: /dev/shm
            volumeType: emptyDir
            quota: 2Gi
            high: "0.99"
            low: "0.95"

    Tabel berikut menjelaskan parameter utama.

    Parameter

    Deskripsi

    Wajib

    Default

    mountPoint

    Jalur ke underlying file system (UFS) dalam format oss://<oss_bucket>/<bucket_dir>. Titik akhir OSS tidak disertakan di sini.

    Ya

    fs.oss.endpoint

    Titik akhir publik atau internal dari bucket OSS. Lihat Wilayah dan titik akhir.

    Ya

    replicas

    Jumlah worker dalam kluster caching JindoFS.

    Ya

    mediumtype

    Media penyimpanan cache. Nilai yang valid: HDD, SSD, MEM.

    Ya

    path

    Jalur penyimpanan lokal pada node pekerja. Hanya satu jalur yang diizinkan. Wajib ditentukan ketika mediumtype bernilai MEM untuk menyimpan data seperti log.

    Ya

    quota

    Ukuran cache maksimum per worker.

    Ya

    high

    Ambang batas eviksi cache (watermark tinggi). Ketika penggunaan melebihi rasio ini, eviksi dimulai.

    Tidak

    low

    Ambang batas retensi cache (watermark rendah). Eviksi berhenti ketika penggunaan turun ke rasio ini.

    Tidak

  4. Buat Dataset dan JindoRuntime.

    kubectl create -f resource.yaml
  5. Verifikasi bahwa Dataset telah terikat.

    kubectl get dataset hadoop

    Output yang diharapkan:

    NAME     UFS TOTAL SIZE   CACHED   CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
    hadoop        210MiB       0.00B    4.00GiB              0.0%          Bound   1h
  6. Verifikasi bahwa JindoRuntime siap digunakan.

    kubectl get jindoruntime hadoop

    Output yang diharapkan:

    NAME     MASTER PHASE   WORKER PHASE   FUSE PHASE   AGE
    hadoop   Ready          Ready          Ready        4m45s
  7. Verifikasi bahwa persistent volume (PV) dan persistent volume claim (PVC) telah dibuat.

    kubectl get pv,pvc

    Output yang diharapkan:

    NAME                              CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM            STORAGECLASS   REASON   AGE
    persistentvolume/default-hadoop   100Pi      ROX            Retain           Bound    default/hadoop                           52m
    
    NAME                           STATUS   VOLUME            CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    persistentvolumeclaim/hadoop   Bound    default-hadoop    100Pi      ROX                           52m

Dataset dan JindoRuntime siap digunakan ketika semua fase menunjukkan Ready dan status PVC adalah Bound.

Langkah 3: Uji akselerasi data

Deploy pod yang memasang PVC Dataset dan bandingkan waktu baca file sebelum dan sesudah data di-cache.

  1. Buat file bernama app.yaml dengan konten berikut.

    apiVersion: v1
    kind: Pod
    metadata:
      name: demo-app
    spec:
      containers:
        - name: demo
          image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
          volumeMounts:
            - mountPath: /data
              name: hadoop
      volumes:
        - name: hadoop
          persistentVolumeClaim:
            claimName: hadoop
  2. Deploy pod tersebut.

    kubectl create -f app.yaml
  3. Buka shell di dalam pod dan periksa ukuran file.

    kubectl exec -it demo-app -- bash
    du -sh /data/hadoop/spark-3.0.1-bin-hadoop2.7.tgz

    Output yang diharapkan:

    210M    /data/hadoop/spark-3.0.1-bin-hadoop2.7.tgz
  4. Ukur waktu baca awal. Akses ini langsung berasal dari OSS, tanpa cache.

    time cp /data/hadoop/spark-3.0.1-bin-hadoop2.7.tgz /dev/null

    Output yang diharapkan:

    real    0m18.386s
    user    0m0.002s
    sys    0m0.105s

    Membaca file membutuhkan waktu sekitar 18 detik.

  5. Periksa data yang telah di-cache setelah pembacaan.

    kubectl get dataset hadoop

    Output yang diharapkan:

    NAME     UFS TOTAL SIZE   CACHED   CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
    hadoop   210.00MiB       210.00MiB    4.00GiB        100.0%           Bound   1h

    Seluruh 210 MiB kini telah di-cache di penyimpanan lokal.

  6. Hapus dan buat ulang pod untuk membersihkan cache halaman OS, sehingga pembacaan berikutnya berasal dari cache JindoFS, bukan dari memori.

    kubectl delete -f app.yaml && kubectl create -f app.yaml
  7. Ukur kembali waktu baca dengan data yang disajikan dari cache.

    kubectl exec -it demo-app -- bash
    time cp /data/hadoop/spark-3.0.1-bin-hadoop2.7.tgz /dev/null

    Output yang diharapkan:

    real    0m0.048s
    user    0m0.001s
    sys     0m0.046s

    Dengan cache JindoFS, pembacaan file yang sama selesai dalam 48 milidetik — lebih dari 300 kali lebih cepat dibandingkan akses langsung ke OSS.

(Opsional) Pembersihan

Jika akselerasi data tidak lagi diperlukan, hapus pod, Dataset, dan JindoRuntime.

Hapus pod:

kubectl delete pod demo-app

Hapus Dataset dan JindoRuntime:

kubectl delete dataset hadoop

Langkah selanjutnya

  • Untuk mengirimkan pekerjaan pelatihan machine learning yang menggunakan data yang dipercepat oleh JindoFS, lihat dokumentasi suite AI cloud-native.

  • Untuk mengeksplorasi opsi media penyimpanan cache lainnya (HDD, SSD), perbarui bidang mediumtype dan path dalam file resource.yaml.