全部产品
Search
文档中心

Container Service for Kubernetes:Aktifkan fitur pemulihan otomatis untuk titik pemasangan FUSE

更新时间:Nov 11, 2025

Selama siklus hidup Pod aplikasi, daemon Filesystem in Userspace (FUSE) dapat mengalami crash secara tak terduga, sehingga Pod aplikasi tidak lagi dapat menggunakan sistem file FUSE untuk mengakses data. Topik ini menjelaskan cara mengaktifkan fitur pemulihan otomatis untuk titik pemasangan sistem file FUSE guna memulihkan akses ke data aplikasi tanpa harus me-restart Pod aplikasi.

Prasyarat

  • Kluster Container Service for Kubernetes (ACK) Pro dengan non-containerOS telah dibuat, dan versi Kubernetes kluster tersebut adalah 1.18 atau lebih baru. Untuk informasi selengkapnya, lihat Buat kluster ACK Pro.

    Penting

    Komponen ack-fluid saat ini tidak didukung pada ContainerOS.

  • Suite AI cloud-native telah diinstal dan komponen ack-fluid telah dideploy.

    Penting

    Jika Anda telah menginstal Fluid open source, uninstall Fluid sebelum mendeploy komponen ack-fluid.

    • Jika Anda belum menginstal suite AI cloud-native: Deploy Fluid dan aktifkan akselerasi caching data. Untuk informasi selengkapnya, lihat Deploy suite AI cloud-native.

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

  • Node virtual telah dideploy di kluster ACK Pro. Untuk informasi selengkapnya, lihat Jadwalkan pod ke instans kontainer elastis.

  • Klien kubectl telah terhubung ke kluster ACK Pro. Untuk informasi selengkapnya, lihat Hubungkan ke kluster menggunakan kubectl.

  • Object Storage Service (OSS) telah diaktifkan dan bucket telah dibuat. Untuk informasi selengkapnya, lihat Aktifkan OSS dan Buat bucket.

Ikhtisar

Pod aplikasi yang menggunakan dataset Fluid mengakses data dalam sistem cache terdistribusi melalui sistem file FUSE. Setiap sistem file FUSE dikaitkan dengan proses daemon FUSE yang memproses permintaan akses file ke sistem file tersebut.

Selama siklus hidup Pod aplikasi, daemon FUSE dapat mengalami crash secara tak terduga—misalnya, ketika penggunaan memorinya melebihi batas, sehingga proses tersebut dihentikan. Akibatnya, Pod aplikasi akan menerima error "Transport Endpoint is Not Connected" saat mengakses file dalam sistem file FUSE. Untuk mengatasi masalah ini, Anda biasanya harus me-restart atau membangun ulang Pod aplikasi secara manual agar akses ke sistem file FUSE dapat dipulihkan.

Fluid menyediakan fitur pemulihan otomatis untuk titik pemasangan sistem file FUSE. Dengan melakukan kueri berkala terhadap status sistem file FUSE yang dipasang ke setiap Pod aplikasi pada suatu node, Fluid memungkinkan pemulihan akses data tanpa perlu me-restart atau membangun ulang Pod tersebut.

Batasan

  • Proses pemulihan otomatis memiliki jeda waktu dan tidak mendukung pemulihan tanpa gangguan bagi aplikasi bisnis. Aplikasi bisnis harus mampu menoleransi kegagalan akses data dan terus mencoba hingga akses data dipulihkan.

  • Fitur ini hanya dapat diaktifkan untuk dataset read-only. Jika kluster berisi dataset yang dapat dibaca dan ditulis, pastikan fitur ini dinonaktifkan untuk mencegah penulisan data yang tidak diinginkan ke dataset tersebut.

  • Fitur ini tidak mendukung pemasangan Pod aplikasi ke klaim volume persisten (PVC) dataset dalam mode subPath.

  • Fitur pemulihan otomatis untuk FUSE harus diaktifkan setelah daemon FUSE di-restart secara otomatis. Daemon FUSE berjalan dalam sebuah kontainer; ketika sering mengalami crash, interval waktu Kubernetes untuk me-restart kontainer tersebut meningkat secara eksponensial, sehingga memperpanjang durasi pemulihan otomatis untuk FUSE.

Aktifkan pemulihan otomatis untuk titik pemasangan FUSE di kluster ACK

Langkah 1: Aktifkan pemulihan otomatis untuk titik pemasangan FUSE

Jalankan perintah berikut untuk mengaktifkan pemulihan otomatis untuk titik pemasangan FUSE:

kubectl get ds -n fluid-system csi-nodeplugin-fluid -oyaml | sed 's/FuseRecovery=false/FuseRecovery=true/g' | kubectl apply -f -

Output yang diharapkan:

daemonset.apps/csi-nodeplugin-fluid configured

Jalankan perintah berikut untuk memeriksa apakah pemulihan otomatis telah diaktifkan untuk titik pemasangan FUSE:

kubectl get ds -n fluid-system csi-nodeplugin-fluid -oyaml | grep '\- \-\-feature-gates='

Jika output berikut dikembalikan, pemulihan otomatis telah diaktifkan untuk titik pemasangan FUSE:

- --feature-gates=FuseRecovery=true

Langkah 2: Buat dataset Fluid

Pada contoh ini, JindoFS dideploy untuk mempercepat akses ke OSS.

  1. Buat file bernama secret.yaml dan salin konten berikut ke dalam file tersebut:

    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret
    stringData:
      fs.oss.accessKeyId: <YOUR_ACCESS_KEY_ID>
      fs.oss.accessKeySecret: <YOUR_ACCESS_KEY_SECRET>

    fs.oss.accessKeyId dan fs.oss.accessKeySecret menentukan ID AccessKey dan AccessKey Secret yang digunakan untuk mengakses OSS.

  2. Jalankan perintah berikut untuk membuat Secret:

    kubectl create -f secret.yaml
  3. Buat file bernama dataset.yaml dan salin konten berikut ke dalam file tersebut:

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

    Tabel berikut menjelaskan parameter-parameter tersebut.

    Parameter

    Deskripsi

    mountPoint

    oss://<oss_bucket>/<bucket_dir> menentukan path ke UFS yang dipasang. Titik akhir tidak diperlukan dalam path tersebut.

    fs.oss.endpoint

    Titik akhir publik atau privat dari bucket OSS. Untuk informasi selengkapnya, lihat Wilayah dan titik akhir.

    replicas

    Jumlah worker dalam kluster JindoFS.

    mediumtype

    Jenis cache. Saat membuat templat JindoRuntime, JindoFS hanya mendukung salah satu jenis cache berikut: HDD, SSD, dan MEM.

    path

    Path penyimpanan. Anda hanya dapat menentukan satu path. Jika Anda mengatur mediumtype ke MEM, Anda harus menentukan path penyimpanan lokal untuk menyimpan data seperti log.

    quota

    Ukuran maksimum data yang di-cache. Satuan: GB.

    high

    Batas atas kapasitas penyimpanan.

    low

    Batas bawah kapasitas penyimpanan.

  4. Jalankan perintah berikut untuk membuat objek Dataset dan objek JindoRuntime:

    kubectl create -f dataset.yaml

Langkah 3: Buat Pod aplikasi dan pasang dataset Fluid

Pada contoh ini, dataset Fluid dipasang ke Pod NGINX dan Pod tersebut digunakan untuk mengakses data dalam dataset.

  1. Buat file bernama app.yaml dan salin konten berikut ke dalam file tersebut:

    apiVersion: v1
    kind: Pod
    metadata:
      name: demo-app
      labels:
        fuse.serverful.fluid.io/inject: "true"
    spec:
      containers:
        - name: demo
          image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
          volumeMounts:
            - mountPath: /data
              name: data-vol
      volumes:
        - name: data-vol
          persistentVolumeClaim:
            claimName: demo-dataset   # Nilai parameter ini harus sama dengan nama Dataset.

    Label fuse.serverful.fluid.io/inject=true digunakan untuk mengaktifkan pemulihan otomatis untuk titik pemasangan FUSE Pod tersebut.

  2. Jalankan perintah berikut untuk membuat kontainer aplikasi:

    kubectl create -f app.yaml
  3. Jalankan perintah berikut untuk melihat status kontainer aplikasi:

    kubectl get pod demo-app
  4. Jika kolom STATUS kontainer tersebut adalah Running, kontainer aplikasi berhasil dijalankan.

    NAME       READY   STATUS    RESTARTS   AGE
    demo-app   1/1     Running   0          16s

Langkah 4: Verifikasi fitur pemulihan otomatis untuk titik pemasangan FUSE

  1. Jalankan perintah berikut untuk login ke kontainer aplikasi dan menjalankan skrip yang secara berkala mengakses metadata file. Skrip tersebut akan mencantumkan file-file dalam dataset Fluid yang dipasang setiap detik.

    kubectl exec -it demo-app -- bash -c 'while true; do ls -l /data; sleep 1; done'
  2. Biarkan skrip di atas tetap berjalan di latar belakang dan jalankan perintah berikut untuk mensimulasikan crash pada komponen FUSE:

    # Dapatkan node tempat demo-pod berada.
    demo_pod_node_name=$(kubectl get pod demo-app -ojsonpath='{.spec.nodeName}')
    # Dapatkan nama Pod FUSE pada node yang sama dengan demo-pod.
    fuse_pod_name=$(kubectl get pod --field-selector spec.nodeName=$demo_pod_node_name --selector role=jindofs-fuse,release=demo-dataset -oname)
    # Simulasikan crash pada Pod FUSE.
    kubectl exec -it $fuse_pod_name -- bash -c 'kill 1'
  3. Lihat output skrip yang dijalankan di demo-app. Jika output berikut dikembalikan, titik pemasangan FUSE berhasil dipulihkan.

    ...
    total 172
    -rwxrwxr-x 1 root root          18 Jul  1 15:17 myfile
    -rwxrwxr-x 1 root root         154 Jul  1 17:06 myfile.txt
    total 172
    -rwxrwxr-x 1 root root          18 Jul  1 15:17 myfile
    -rwxrwxr-x 1 root root         154 Jul  1 17:06 myfile.txt
    ls: cannot access '/data/': Transport endpoint is not connected
    ls: cannot access '/data/': Transport endpoint is not connected
    ls: cannot access '/data/': Transport endpoint is not connected
    ls: cannot access '/data/': Transport endpoint is not connected
    ls: cannot access '/data/': Transport endpoint is not connected
    ls: cannot access '/data/': Transport endpoint is not connected
    ls: cannot access '/data/': Transport endpoint is not connected
    ls: cannot access '/data/': Transport endpoint is not connected
    total 172
    -rwxrwxr-x 1 root root          18 Jul  1 15:17 myfile
    -rwxrwxr-x 1 root root         154 Jul  1 17:06 myfile.txt
    total 172
    -rwxrwxr-x 1 root root          18 Jul  1 15:17 myfile
    -rwxrwxr-x 1 root root         154 Jul  1 17:06 myfile.txt
    ...

Aktifkan pemulihan otomatis untuk titik pemasangan FUSE di lingkungan serverless

Anda telah membuat kluster ACK Serverless Pro yang menggunakan sistem operasi selain ContainerOS, dan versi kluster tersebut adalah 1.18 atau lebih baru. Untuk informasi selengkapnya, lihat Buat kluster ACK Serverless.

Langkah 1: Buat dataset Fluid

Pada contoh ini, JindoFS dideploy untuk mempercepat akses ke OSS.

  1. Buat file bernama secret.yaml dan salin konten berikut ke dalam file tersebut:

    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret
    stringData:
      fs.oss.accessKeyId: <YOUR_ACCESS_KEY_ID>
      fs.oss.accessKeySecret: <YOUR_ACCESS_KEY_SECRET>

    fs.oss.accessKeyId dan fs.oss.accessKeySecret menentukan ID AccessKey dan AccessKey Secret yang digunakan untuk mengakses OSS.

  2. Jalankan perintah berikut untuk membuat Secret:

    kubectl create -f secret.yaml
  3. Buat file bernama dataset.yaml dan salin konten berikut ke dalam file tersebut:

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

    Tabel berikut menjelaskan parameter-parameter tersebut.

    Parameter

    Deskripsi

    mountPoint

    oss://<oss_bucket>/<bucket_dir> menentukan path ke UFS yang dipasang. Titik akhir tidak diperlukan dalam path tersebut.

    fs.oss.endpoint

    Titik akhir publik atau privat dari bucket OSS. Untuk informasi selengkapnya, lihat Wilayah dan titik akhir.

    replicas

    Jumlah worker dalam kluster JindoFS.

    mediumtype

    Jenis cache. Saat membuat templat JindoRuntime, JindoFS hanya mendukung salah satu jenis cache berikut: HDD, SSD, dan MEM.

    path

    Path penyimpanan. Anda hanya dapat menentukan satu path. Jika Anda mengatur mediumtype ke MEM, Anda harus menentukan path penyimpanan lokal untuk menyimpan data seperti log.

    quota

    Ukuran maksimum data yang di-cache. Satuan: GB.

    high

    Batas atas kapasitas penyimpanan.

    low

    Batas bawah kapasitas penyimpanan.

  4. Jalankan perintah berikut untuk membuat objek Dataset dan objek JindoRuntime:

    kubectl create -f dataset.yaml

Langkah 2: Buat Pod aplikasi dan pasang dataset Fluid

Pada contoh ini, dataset Fluid dipasang ke Pod NGINX dan Pod tersebut digunakan untuk mengakses data dalam dataset.

  1. Buat file bernama app.yaml dan salin konten berikut ke dalam file tersebut:

    apiVersion: v1
    kind: Pod
    metadata:
      name: demo-app
      labels:
        alibabacloud.com/fluid-sidecar-target: eci
      annotations:
        # Nonaktifkan kebijakan penjadwalan pod berbasis node virtual.
        alibabacloud.com/burst-resource: eci_only
        # Aktifkan pemulihan otomatis untuk titik pemasangan FUSE
        alibabacloud.com/fuse-recover-policy: auto
    spec:
      containers:
        - name: demo
          image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
          volumeMounts:
            - mountPath: /data
              name: data-vol
      volumes:
        - name: data-vol
          persistentVolumeClaim:
            claimName: demo-dataset  # Nilai parameter ini harus sama dengan nama Dataset.

    Anotasi alibabacloud.com/fuse-recover-policy=auto digunakan untuk mengaktifkan pemulihan otomatis untuk titik pemasangan FUSE Pod tersebut. Anotasi ini hanya berlaku pada Pod aplikasi yang berjalan di lingkungan serverless.

  2. Jalankan perintah berikut untuk membuat Pod aplikasi:

    kubectl create -f app.yaml
  3. Jalankan perintah berikut untuk melihat status kontainer aplikasi:

    kubectl get pod demo-app
  4. Jika kolom STATUS kontainer tersebut adalah Running, kontainer aplikasi berhasil dijalankan.

    NAME       READY   STATUS    RESTARTS   AGE
    demo-app   2/2     Running   0          110s

Langkah 3: Verifikasi fitur pemulihan otomatis untuk titik pemasangan FUSE

  1. Jalankan perintah berikut untuk login ke kontainer aplikasi dan menjalankan skrip yang secara berkala mengakses metadata file. Skrip tersebut akan mencantumkan file-file dalam dataset Fluid yang dipasang setiap detik.

    kubectl exec -it demo-app -c demo -- bash -c 'while true; do ls -l /data; sleep 1; done'
  2. Biarkan skrip di atas tetap berjalan di latar belakang dan jalankan perintah berikut untuk mensimulasikan crash pada komponen FUSE:

    # Simulasikan crash pada Pod FUSE.
    kubectl exec -it demo-app -c fluid-fuse-0 -- bash -c 'kill 1'
  3. Lihat output skrip yang dijalankan di demo-app. Jika output berikut dikembalikan, titik pemasangan FUSE berhasil dipulihkan.

    total 172
    -rwxrwxr-x 1 root root          18 Jul  1 15:17 myfile
    -rwxrwxr-x 1 root root         154 Jul  1 17:06 myfile.txt
    total 172
    -rwxrwxr-x 1 root root          18 Jul  1 15:17 myfile
    -rwxrwxr-x 1 root root         154 Jul  1 17:06 myfile.txt
    ls: cannot access '/data/demo2': Transport endpoint is not connected
    ls: cannot access '/data/demo2': Transport endpoint is not connected
    ls: cannot access '/data/demo2': Transport endpoint is not connected
    ls: cannot access '/data/demo2': Transport endpoint is not connected
    total 172
    -rwxrwxr-x 1 root root          18 Jul  1 15:17 myfile
    -rwxrwxr-x 1 root root         154 Jul  1 17:06 myfile.txt
    total 172
    -rwxrwxr-x 1 root root          18 Jul  1 15:17 myfile
    -rwxrwxr-x 1 root root         154 Jul  1 17:06 myfile.txt