全部产品
Search
文档中心

Container Service for Kubernetes:Gunakan JindoRuntime untuk penyimpanan persisten untuk master JindoFS

更新时间:Jul 02, 2025

Untuk menghindari kehilangan metadata akibat restart master JindoFS, Fluid memungkinkan Anda menggunakan JindoRuntime untuk menyimpan metadata yang dikelola oleh master JindoFS. Hal ini meningkatkan ketersediaan kluster JindoFS dalam skenario caching terdistribusi.

Deskripsi fitur

JindoFS adalah mesin eksekusi untuk manajemen dataset dan caching yang dikembangkan oleh tim Alibaba Cloud E-MapReduce (EMR) berbasis C++. Anda dapat menggunakan JindoFS untuk menyimpan cache data dari berbagai sumber, termasuk Object Storage Service (OSS), OSS-Hadoop Distributed File System (HDFS), dan persistent volume claims (PVC). Untuk informasi lebih lanjut, lihat Ikhtisar JindoData.

JindoFS menggunakan arsitektur master-worker di mana master memelihara metadata dan titik mount data yang di-cache, sedangkan worker mengelola data yang di-cache. Anda dapat menampung master dan worker JindoFS dalam kluster Kubernetes. Ketika kontainer tempat master JindoFS berjalan di-restart atau di-reschedule, metadata dan titik mount mungkin hilang, sehingga kluster JindoFS menjadi tidak tersedia. Untuk meningkatkan ketersediaan kluster JindoFS, Anda dapat menggunakan Fluid JindoRuntime untuk menyimpan metadata master JindoFS ke volume persisten Kubernetes (PV).

Prasyarat

Langkah 1: Siapkan volume disk

  1. Buat file bernama pvc.yaml. File ini digunakan untuk membuat PVC yang dapat Anda gunakan untuk memasang volume disk.

    Catatan

    Untuk informasi lebih lanjut tentang parameter dalam PVC, lihat Gunakan Volume Disk yang Diproses Secara Dinamis.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: demo-jindo-master-meta
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: alicloud-disk-topology-alltype
      resources:
        requests:
          storage: 30Gi
  2. Jalankan perintah berikut untuk membuat PVC:

    kubectl create -f pvc.yaml

    Output yang Diharapkan:

    persistentvolumeclaim/demo-jindo-master-meta created

Langkah 2: Buat Dataset dan JindoRuntime

  1. Buat file bernama secret.yaml. File ini digunakan untuk menyimpan ID AccessKey dan Rahasia AccessKey yang digunakan oleh pengguna RAM untuk mengakses Bucket OSS.

    apiVersion: v1
    kind: Secret
    metadata:
      name: access-key
    stringData:
      fs.oss.accessKeyId: ****** # Tentukan ID AccessKey.
      fs.oss.accessKeySecret: ****** # Tentukan Rahasia AccessKey.

  2. Jalankan perintah berikut untuk membuat Secret:

    kubectl create -f secret.yaml

    Output yang Diharapkan:

    secret/access-key created
  3. Buat file bernama dataset.yaml. File ini digunakan untuk mengonfigurasi Dataset dan JindoRuntime.

    apiVersion: data.fluid.io/v1alpha1
    kind: Dataset
    metadata:
      name: demo
    spec:
      mounts: 
        - mountPoint: oss://<OSS_BUCKET>/<BUCKET_DIR>
          name: demo
          path: /
          options:
            fs.oss.endpoint: <OSS_BUCKET_ENDPOINT>
          encryptOptions:
            - name: fs.oss.accessKeyId
              valueFrom:
                secretKeyRef:
                  name: access-key
                  key: fs.oss.accessKeyId
            - name: fs.oss.accessKeySecret
              valueFrom:
                secretKeyRef:
                  name: access-key
                  key: fs.oss.accessKeySecret
    ---
    apiVersion: data.fluid.io/v1alpha1
    kind: JindoRuntime
    metadata:
      name: demo
    spec:
      replicas: 2
      volumes:
        - name: meta-vol
          persistentVolumeClaim:
            claimName: demo-jindo-master-meta
      master:
        volumeMounts:
          - name: meta-vol
            mountPath: /root/jindofsx-meta
        properties:
          namespace.meta-dir: "/root/jindofsx-meta"
      tieredstore:
        levels:
          - mediumtype: MEM
            path: /dev/shm
            volumeType: emptyDir
            quota: 12Gi
            high: "0.99"
            low: "0.99"

    Tabel berikut menjelaskan parameter dalam blok kode sebelumnya.

    Parameter

    Deskripsi

    JindoRuntime

    volumes

    Parameter ini menentukan volume yang dipasang ke komponen JindoRuntime. Tentukan PVC yang Anda buat di Langkah 1: Siapkan volume disk.

    master.volumeMounts

    Parameter ini menentukan nama volume yang dipasang ke master JindoRuntime dan jalur pemasangan volume tersebut.

    master.properties

    Parameter ini menentukan detail master JindoRuntime. Untuk menyimpan metadata yang dikelola oleh master JindoRuntime, Anda harus menentukan namespace.meta-dir: "<path>". Ganti <path> dengan mount path yang Anda tentukan dalam parameter master.volumeMounts.

  4. Jalankan perintah berikut untuk membuat Dataset dan JindoRuntime:

    kubectl create -f dataset.yaml

    Output yang Diharapkan:

    dataset.data.fluid.io/demo created
    jindoruntime.data.fluid.io/demo created
  5. Jalankan perintah berikut untuk memeriksa apakah Dataset telah dibuat:

    kubectl get dataset

    Output yang Diharapkan:

    NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE
    demo 531.89MiB      0.00B  24.00GiB       0.0%              Bound 5m35s

    Jika Bound ditampilkan di kolom PHASE, Dataset dan JindoRuntime telah dibuat. Setelah Dataset memasuki status Bound, Fluid secara otomatis membuat PVC yang dinamai sesuai dengan Dataset. Anda dapat memasang PVC ke pod aplikasi untuk memungkinkan pod mengakses data dalam sumber data yang ditentukan dalam titik mount (Dataset.spec.mountPoint) Dataset.

Langkah 3: Periksa apakah penyimpanan persisten diaktifkan untuk master JindoFS

Pada langkah ini, pod tempat master JindoFS berjalan di-reschedule untuk memeriksa apakah penyimpanan persisten diaktifkan.

  1. Buat file bernama pod.yaml dan tentukan PVC dalam blok kode.

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
    spec:
      containers:
        - name: nginx
          image: registry.openanolis.cn/openanolis/nginx:1.14.1-8.6
          volumeMounts:
            - mountPath: /data
              name: data-vol
      volumes:
        - name: data-vol
          persistentVolumeClaim:
            claimName: demo
  2. Jalankan perintah berikut untuk menerapkan aplikasi NGINX di kluster Anda:

    kubectl create -f pod.yaml

    Output yang Diharapkan:

    pod/nginx created
  3. Jalankan perintah berikut untuk mengakses data dari pod aplikasi:

    kubectl exec -it nginx -- ls /data

    Data dalam Bucket OSS yang ditentukan dalam titik mount (Dataset.spec.mountPoint) Dataset diharapkan akan dikembalikan dalam output.

  4. Jalankan perintah berikut untuk menanyakan node tempat master JindoFS diterapkan:

    master_node=$(kubectl get pod -o wide | awk '/demo-jindofs-master-0/ {print $7}')
  5. Jalankan perintah berikut untuk menambah taint pada node yang dikembalikan di Langkah 4 untuk mencegah pod baru dijadwalkan ke node tersebut.

    kubectl taint node $master_node test-jindofs-master=reschedule:NoSchedule

    Output yang Diharapkan:

    node/cn-beijing.192.168.xx.xx tainted
  6. Jalankan perintah berikut untuk menghapus pod tempat JindoFS master berjalan dan tunggu sistem merecreate pod tersebut:

    kubectl delete pod demo-jindofs-master-0

    Output yang Diharapkan:

    pod "demo-jindofs-master-0" deleted 

    Pod demo-jindofs-master-0 direcreate dan dijadwalkan ke node lain dalam kluster. Volume disk dipasang ke pod. Oleh karena itu, pod direcreate dan dipulihkan ke status sebelum penghapusan.

    Catatan

    Untuk mencapai tujuan ini, pod yang direcreate harus dijadwalkan ke node baru di zona yang sama dengan node asli tempat pod diterapkan. Ini karena disk tidak dapat dipasang lintas zona. Oleh karena itu, Anda harus memastikan bahwa kluster berisi setidaknya dua node di zona tempat pod awalnya diterapkan.

  7. Jalankan perintah berikut untuk menghapus pod aplikasi dan tunggu sistem merecreate pod tersebut:

    kubectl delete -f pod.yaml && kubectl create -f pod.yaml

    Output yang Diharapkan:

    pod "nginx" deleted
    pod/nginx created
  8. Jalankan perintah berikut untuk mengakses data dari pod aplikasi yang direcreate:

    kubectl exec -it nginx -- ls /data

    Data dalam Bucket OSS yang ditentukan dalam titik mount (Dataset.spec.mountPoint) Dataset diharapkan akan dikembalikan dalam output.

Langkah 4: Bersihkan lingkungan

  1. Jalankan perintah berikut untuk menghapus pod aplikasi:

    kubectl delete -f pod.yaml

    Output yang Diharapkan:

    pod "nginx" deleted
  2. Jalankan perintah berikut untuk menghapus taint dari node:

    kubectl taint node $master_node test-jindofs-master-

    Output yang Diharapkan:

    node/cn-beijing.192.168.xx.xx untainted
  3. (Opsional) Jalankan perintah berikut secara berurutan untuk menghapus sumber daya terkait volume disk.

    Penting
    • Setelah Anda membuat volume disk, Anda akan dikenakan biaya untuk disk yang dibuat untuk volume tersebut. Jika Anda tidak lagi memerlukan percepatan data, bersihkan lingkungan. Untuk informasi lebih lanjut tentang biaya yang dikenakan oleh volume disk, lihat Volume Disk.

    • Sebelum Anda membersihkan sumber daya, pastikan tidak ada aplikasi yang menggunakan Dataset dan tidak ada operasi I/O yang dilakukan pada Dataset.

    kubectl delete -f dataset.yaml
    kubectl delete -f pvc.yaml