すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:FUSE マウントポイントの自動回復機能を有効にする

最終更新日:Nov 09, 2025

アプリケーション Pod のライフサイクル中に、ユーザー空間のファイルシステム (FUSE) デーモンが予期せずクラッシュすることがあります。その結果、アプリケーション Pod は FUSE ファイルシステムを使用してデータにアクセスできなくなります。このトピックでは、FUSE ファイルシステムのマウントポイントの自動回復機能を有効にして、アプリケーション Pod を再起動せずにアプリケーションデータへのアクセスを復元する方法について説明します。

前提条件

  • non-containerOS を使用する Container Service for Kubernetes (ACK) Pro マネージドクラスターが作成されており、クラスターの Kubernetes バージョンが 1.18 以降であること。詳細については、「ACK Pro マネージドクラスターの作成」をご参照ください。

    重要

    ack-fluid コンポーネントは現在 ContainerOS ではサポートされていません。

  • クラウドネイティブ AI スイートがインストールされ、ack-fluid コンポーネントがデプロイされていること。

    重要

    オープンソースの Fluid をインストールしている場合は、ack-fluid コンポーネントをデプロイする前に Fluid をアンインストールしてください。

    • クラウドネイティブ AI スイートをインストールしていない場合: [Fluid] をデプロイし、データキャッシュアクセラレーションを有効にします。詳細については、「クラウドネイティブ AI スイートのデプロイ」をご参照ください。

    • クラウドネイティブ AI スイートをすでにインストールしている場合は、ACK コンソール[クラウドネイティブ AI スイート] ページに移動し、[ack-fluid] コンポーネントをデプロイします。

  • 仮想ノードが ACK Pro マネージドクラスターにデプロイされていること。詳細については、「Pod を Elastic Container Instance にスケジューリングする」をご参照ください。

  • kubectl クライアントが ACK Pro マネージドクラスターに接続されていること。詳細については、「kubectl を使用してクラスターに接続する」をご参照ください。

  • Object Storage Service (OSS) が有効化され、バケットが作成されていること。詳細については、「OSS の有効化」および「バケットの作成」をご参照ください。

概要

Fluid データセットを使用するアプリケーション Pod は、FUSE ファイルシステムを使用して分散キャッシュシステム内のデータにアクセスします。各 FUSE ファイルシステムは FUSE デーモンプロセスに対応しており、FUSE ファイルシステムに送信されたファイルアクセスリクエストを処理します。

アプリケーション Pod のライフサイクル中に、FUSE デーモンが予期せずクラッシュすることがあります。たとえば、メモリ使用量が上限を超えると、デーモンは強制終了されます。その結果、アプリケーション Pod が FUSE ファイルシステム内のファイルにアクセスすると、「Transport Endpoint is Not Connected」というエラーが表示されます。この問題を解決するには、アプリケーション Pod を手動で再起動または再構築して、FUSE ファイルシステムへのアクセスを復元する必要があります。

Fluid は、FUSE ファイルシステムのマウントポイントの自動回復機能を提供します。ノード上の各アプリケーション Pod にマウントされた FUSE ファイルシステムのステータスを定期的にクエリすることで、Fluid はアプリケーション Pod を再起動または再構築することなく、データアクセスを復元できます。

制限事項

  • 自動回復プロセスには遅延があり、ビジネスアプリケーションのシームレスな自動回復はサポートされていません。ビジネスアプリケーションは、データアクセス障害を許容し、データアクセスが復元されるまでリトライを続ける必要があります。

  • 自動回復は読み取り専用データセットに対してのみ有効にできます。クラスターに読み書き可能なデータセットが含まれている場合は、データセットへの予期しないデータ書き込みを防ぐために、この機能が無効になっていることを確認してください。

  • この機能では、アプリケーション Pod を subPath モードでデータセットの永続ボリューム要求 (PVC) にマウントすることはできません。

  • FUSE の自動回復機能は、FUSE デーモンが自動的に再起動された後に有効にする必要があります。FUSE デーモンはコンテナー内で実行されます。FUSE デーモンが頻繁にクラッシュすると、Kubernetes がコンテナーを再起動する間隔が指数関数的に増加します。これにより、FUSE の自動回復にかかる時間が長くなります。

ACK クラスターで FUSE マウントポイントの自動回復を有効にする

ステップ 1: FUSE マウントポイントの自動回復を有効にする

次のコマンドを実行して、FUSE マウントポイントの自動回復を有効にします。

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

予想される出力:

daemonset.apps/csi-nodeplugin-fluid configured

次のコマンドを実行して、FUSE マウントポイントの自動回復が有効になっているかどうかを確認します。

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

次の出力が返された場合、FUSE マウントポイントの自動回復が有効になっています。

- --feature-gates=FuseRecovery=true

ステップ 2: Fluid データセットを作成する

この例では、JindoFS をデプロイして OSS へのアクセスを高速化します。

  1. secret.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。

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

    fs.oss.accessKeyIdfs.oss.accessKeySecret は、OSS へのアクセスに使用される AccessKey IDAccessKey Secret を指定します。

  2. 次のコマンドを実行して Secret を作成します。

    kubectl create -f secret.yaml
  3. dataset.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。

    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"

    次の表にパラメーターを示します。

    パラメーター

    説明

    mountPoint

    oss://<oss_bucket>/<bucket_dir> は、マウントされる UFS へのパスを指定します。パスにエンドポイントは必要ありません。

    fs.oss.endpoint

    OSS バケットのパブリックまたはプライベートエンドポイント。詳細については、「リージョンとエンドポイント」をご参照ください。

    replicas

    JindoFS クラスター内のワーカー数。

    mediumtype

    キャッシュのタイプ。JindoRuntime テンプレートを作成する場合、JindoFS は HDD、SSD、MEM のいずれかのキャッシュタイプのみをサポートします。

    path

    ストレージパス。パスは 1 つだけ指定できます。mediumtype を MEM に設定した場合は、ログなどのデータを保存するためにオンプレミスストレージのパスを指定する必要があります。

    quota

    キャッシュデータの最大サイズ。単位: GB。

    high

    ストレージ容量の上限。

    low

    ストレージ容量の下限。

  4. 次のコマンドを実行して、Dataset オブジェクトと JindoRuntime オブジェクトを作成します。

    kubectl create -f dataset.yaml

ステップ 3: アプリケーション Pod を作成し、Fluid データセットをマウントする

この例では、Fluid データセットを NGINX Pod にマウントし、その Pod を使用してデータセット内のデータにアクセスします。

  1. app.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。

    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   # このパラメーターの値は、Dataset の名前と同じである必要があります。

    fuse.serverful.fluid.io/inject=true ラベルは、Pod の FUSE マウントポイントの自動回復を有効にするために使用されます。

  2. 次のコマンドを実行して、アプリケーションコンテナーを作成します。

    kubectl create -f app.yaml
  3. 次のコマンドを実行して、アプリケーションコンテナーのステータスを表示します。

    kubectl get pod demo-app
  4. コンテナーの STATUS フィールドが Running の場合、アプリケーションコンテナーは正常に起動しています。

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

ステップ 4: FUSE マウントポイントの自動回復機能を確認する

  1. 次のコマンドを実行してアプリケーションコンテナーにログインし、ファイルメタデータを定期的にアクセスするスクリプトを実行します。このスクリプトは、マウントされた Fluid データセット内のファイルを 1 秒ごとにリスト表示します。

    kubectl exec -it demo-app -- bash -c 'while true; do ls -l /data; sleep 1; done'
  2. 前のスクリプトをバックグラウンドで実行し続け、次のコマンドを実行して FUSE コンポーネントのクラッシュをシミュレートします。

    # demo-pod が存在するノードを取得します。
    demo_pod_node_name=$(kubectl get pod demo-app -ojsonpath='{.spec.nodeName}')
    # demo-pod と同じノード上の FUSE pod の名前を取得します。
    fuse_pod_name=$(kubectl get pod --field-selector spec.nodeName=$demo_pod_node_name --selector role=jindofs-fuse,release=demo-dataset -oname)
    # FUSE pod のクラッシュをシミュレートします。
    kubectl exec -it $fuse_pod_name -- bash -c 'kill 1'
  3. demo-app で実行されているスクリプトの出力を表示します。次の出力が返された場合、FUSE マウントポイントは正常に回復しています。

    ...
    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
    ...

サーバーレス環境で FUSE マウントポイントの自動回復を有効にする

ContainerOS 以外のオペレーティングシステムを使用する ACK Serverless Pro クラスター を作成済みで、クラスターのバージョンが 1.18 以降であること。詳細については、「Serverless Kubernetes クラスターの作成」をご参照ください。

ステップ 1: Fluid データセットを作成する

この例では、JindoFS をデプロイして OSS へのアクセスを高速化します。

  1. secret.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。

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

    fs.oss.accessKeyIdfs.oss.accessKeySecret は、OSS へのアクセスに使用される AccessKey IDAccessKey Secret を指定します。

  2. 次のコマンドを実行して Secret を作成します。kubectl create -f secret.yaml

    kubectl create -f secret.yaml
  3. dataset.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。

    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"

    次の表にパラメーターを示します。

    パラメーター

    説明

    mountPoint

    oss://<oss_bucket>/<bucket_dir> は、マウントされる UFS へのパスを指定します。パスにエンドポイントは必要ありません。

    fs.oss.endpoint

    OSS バケットのパブリックまたはプライベートエンドポイント。詳細については、「リージョンとエンドポイント」をご参照ください。

    replicas

    JindoFS クラスター内のワーカー数。

    mediumtype

    キャッシュのタイプ。JindoRuntime テンプレートを作成する場合、JindoFS は HDD、SSD、MEM のいずれかのキャッシュタイプのみをサポートします。

    path

    ストレージパス。パスは 1 つだけ指定できます。mediumtype を MEM に設定した場合は、ログなどのデータを保存するためにオンプレミスストレージのパスを指定する必要があります。

    quota

    キャッシュデータの最大サイズ。単位: GB。

    high

    ストレージ容量の上限。

    low

    ストレージ容量の下限。

  4. 次のコマンドを実行して、Dataset オブジェクトと JindoRuntime オブジェクトを作成します。

    kubectl create -f dataset.yaml

ステップ 2: アプリケーション Pod を作成し、Fluid データセットをマウントする

この例では、Fluid データセットを NGINX Pod にマウントし、その Pod を使用してデータセット内のデータにアクセスします。

  1. app.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。

    apiVersion: v1
    kind: Pod
    metadata:
      name: demo-app
      labels:
        alibabacloud.com/fluid-sidecar-target: eci
      annotations:
        # 仮想ノードベースの Pod スケジューリングポリシーを無効にします。
        alibabacloud.com/burst-resource: eci_only
        # 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  # このパラメーターの値は、Dataset の名前と同じである必要があります。

    alibabacloud.com/fuse-recover-policy=auto アノテーションは、Pod の FUSE マウントポイントの自動回復を有効にするために使用されます。このアノテーションは、サーバーレス環境で実行されるアプリケーション Pod でのみ有効です。

  2. 次のコマンドを実行して、アプリケーション Pod を作成します。

    kubectl create -f app.yaml
  3. 次のコマンドを実行して、アプリケーションコンテナーのステータスを表示します。

    kubectl get pod demo-app
  4. コンテナーの STATUS フィールドが Running の場合、アプリケーションコンテナーは正常に起動しています。

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

ステップ 3: FUSE マウントポイントの自動回復機能を確認する

  1. 次のコマンドを実行してアプリケーションコンテナーにログインし、ファイルメタデータを定期的にアクセスするスクリプトを実行します。このスクリプトは、マウントされた Fluid データセット内のファイルを 1 秒ごとにリスト表示します。

    kubectl exec -it demo-app -c demo -- bash -c 'while true; do ls -l /data; sleep 1; done'
  2. 前のスクリプトをバックグラウンドで実行し続け、次のコマンドを実行して FUSE コンポーネントのクラッシュをシミュレートします。

    # FUSE pod のクラッシュをシミュレートします。
    kubectl exec -it demo-app -c fluid-fuse-0 -- bash -c 'kill 1'
  3. demo-app で実行されているスクリプトの出力を表示します。次の出力が返された場合、FUSE マウントポイントは正常に回復しています。

    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