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

Container Service for Kubernetes:hostPath ボリュームへのアクセスを高速化する

最終更新日:Jul 03, 2025

JindoRuntime は、Alibaba Cloud E-MapReduce(EMR)が JindoFS をベースに開発した Fluid ランタイムエンジンです。 JindoRuntime は、Kubernetes クラスターの hostPath ボリュームに格納されているデータをキャッシュして、データアクセスを高速化できます。 JindoFS は C++ をベースに開発されており、Fluid のデータセット管理とキャッシュを提供します。 ハイブリッドクラウド環境では、hostPath ボリュームを使用して自己管理型ストレージシステムをマウントできます。 これにより、自己管理型ストレージシステムへのアクセスを高速化できます。 このトピックでは、JindoRuntime を使用して hostPath ボリュームへのアクセスを高速化する方法について説明します。

前提条件

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

    重要

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

  • クラウドネイティブ AI スイートがインストールされ、ack-fluid コンポーネントがデプロイされています。 ack-fluid コンポーネントのバージョンは 1.0.6 以降である必要があります。

    重要

    オープンソースの Fluid をインストールしている場合は、ack-fluid コンポーネントをインストールする前に Fluid をアンインストールする必要があります。

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

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

手順 1:hostPath ボリュームのマウントポイントを準備する

JindoRuntime は、分散キャッシュシステムを使用して hostPath ボリュームへのアクセスを高速化します。 したがって、JindoFS ユーザーは、マスターとワーカーが実行されるノード上にホストパスを作成する必要があります。 これを行うには、次の操作を実行します。

  1. 次のコマンドを実行して、/mnt ディレクトリに hostPath ボリュームのマウントポイントとしてサブディレクトリを作成します。

    $ mkdir /mnt/demo-remote-fs
  2. 次のコマンドを実行して、cn-beijing.192.168.1.45 ノードと cn-beijing.192.168.2.234 ノードに /mnt/demo-remote-fs ディレクトリを作成します。

    # 前述のノードは例として使用されています。 実際のノード名に置き換えてください。
    ssh cn-beijing.192.168.1.45 "mkdir -p /mnt/demo-remote-fs"
    ssh cn-beijing.192.168.2.234 "mkdir -p /mnt/demo-remote-fs"
  3. 次のコマンドを実行して、cn-beijing.192.168.1.45 ノードと cn-beijing.192.168.2.234 ノードにラベルを追加します。 demo-remote-fs=true ラベルは、JindoRuntime のマスターとワーカーをスケジュールできるノードを制限します。

    kubectl label node cn-beijing.192.168.1.45 demo-remote-fs=true
    kubectl label node cn-beijing.192.168.2.234 demo-remote-fs=true

手順 2:Dataset オブジェクトと JindoRuntime オブジェクトを作成する

  1. dataset.yaml という名前のファイルを作成し、次の内容をファイルに追加します。

    次の dataset.yaml ファイルには、2 つの Fluid オブジェクト(DatasetJindoRuntime)が含まれています。

    • Dataset:前述のマウントポイントで構成された Dataset オブジェクト。

    • JindoRuntime:JindoFS 分散キャッシュシステムの構成。ワーカー ポッドの数と各ワーカーが使用できる最大キャッシュサイズが含まれます。

    apiVersion: data.fluid.io/v1alpha1
    kind: Dataset
    metadata:
      name: hostpath-demo-dataset
    spec:
      mounts:
        - mountPoint: local:///mnt/demo-remote-fs
          name: data
          path: /
      accessModes:
        - ReadOnlyMany
    ---
    apiVersion: data.fluid.io/v1alpha1
    kind: JindoRuntime
    metadata:
      name: hostpath-demo-dataset
    spec:
      master:
        nodeSelector:
          demo-remote-fs: "true"
      worker:
        nodeSelector:
          demo-remote-fs: "true"
      fuse:
        nodeSelector:
          demo-remote-fs: "true"
      replicas: 2
      tieredstore:
        levels:
          - mediumtype: MEM
            volumeType: emptyDir
            path: /dev/shm
            quota: 10Gi
            high: "0.99"
            low: "0.99"

    次の表に、構成ファイルのオブジェクトパラメーターを示します。

    パラメーター

    説明

    mountPoint

    マウントするデータソース。 local://<パス> 形式で hostPath ボリュームをデータソースとしてマウントできます。 パス は、マウントするホストパスを示し、絶対パスである必要があります。

    nodeSelector

    JindoRuntime のマスターコンポーネント、ワーカーコンポーネント、および FUSE コンポーネントをスケジュールできるノードを制限する制約。 このパラメーターは、各コンポーネントのポッドが、準備されたホストディレクトリを持つノード上でのみ実行されるようにするためです。

    replicas

    JindoFS 用にデプロイするワーカー ポッドの数。 要件に基づいて数を変更できます。

    mediumtype

    キャッシュタイプ。 サポートされているキャッシュタイプは、HDD、SSD、および MEM です。

    mediumtype の推奨構成の詳細については、「ポリシー 2:適切なキャッシュメディアを選択する」をご参照ください。

    volumeType

    キャッシュメディアのボリュームタイプ。 有効な値:emptyDir および hostPath。 デフォルト値:hostPath

    • メモリまたはローカルシステムディスクをキャッシュメディアとして使用する場合は、ノード上にキャッシュデータが残らないようにし、ノードの可用性を確保するために、emptyDir タイプを使用することをお勧めします。

    • ローカルデータディスクをキャッシュメディアとして使用する場合は、hostPath タイプを使用し、path を構成して、ホスト上のデータディスクのマウントパスを指定できます。

    volumeType の推奨構成の詳細については、「ポリシー 2:適切なキャッシュメディアを選択する」をご参照ください。

    path

    JindoFS ワーカーがデータのキャッシュに使用するディレクトリ。 データアクセスを高速化するために、/dev/shm またはメモリファイルシステムがマウントされているパスを使用することをお勧めします。

    quota

    各ワーカーが使用できる最大キャッシュサイズ。 要件に基づいて値を変更できます。

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

    kubectl create -f dataset.yaml
  3. 次のコマンドを実行して、データセットがデプロイされているかどうかを確認します。

    kubectl get dataset hostpath-demo-dataset

    予期される出力:

    説明

    JindoFS は初回起動時にイメージをプルする必要があります。 このプロセスには、ネットワークの状態に応じて 2 ~ 3 分かかる場合があります。

    NAME                    UFS TOTAL SIZE   CACHED   CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
    hostpath-demo-dataset   1.98GiB          0.00B    20.00GiB         0.0%                Bound   3m54s

    Dataset オブジェクトが Bound 状態の場合、JindoFS はクラスター内で実行されており、アプリケーション ポッドは Dataset オブジェクトで定義されたデータにアクセスできます。

(オプション)手順 3:DataLoad オブジェクトを作成してデータをプリフェッチする

初回クエリはキャッシュにヒットしない場合があります。 Fluid を使用すると、DataLoad オブジェクトを作成してデータをプリフェッチし、初回クエリの速度を向上させることができます。

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

    apiVersion: data.fluid.io/v1alpha1
    kind: DataLoad
    metadata:
      name: dataset-warmup
    spec:
      dataset:
        name: hostpath-demo-dataset
        namespace: default
      loadMetadata: true
      target:
        - path: /
          replicas: 1

    次の表に、オブジェクトパラメーターを示します。

    パラメーター

    説明

    dataset.name

    プリフェッチする Dataset オブジェクトの名前。

    dataset.namespace

    Dataset オブジェクトが属する名前空間。 名前空間は、DataLoad オブジェクトの名前空間と同じである必要があります。

    loadMetadata

    プリフェッチの前にメタデータを同期するかどうかを指定します。 JindoRuntime の場合は、値を true に設定します。

    target[*].path

    プリフェッチするパスまたはファイル。 パスは、Dataset オブジェクトで指定されたマウントポイントの相対パスである必要があります。

    たとえば、Dataset オブジェクトのデータソースが pvc://my-pvc/mydata で、path/test に設定した場合、my-pvc が使用するファイルシステムの /mydata/test パスがプリフェッチされます。

    target[*].replicas

    プリフェッチされたパスまたはファイルをキャッシュするために作成されたワーカー ポッドの数。

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

    kubectl create -f dataload.yaml
  3. 次のコマンドを実行して、DataLoad オブジェクトのステータスをクエリします。

    kubectl get dataload dataset-warmup

    予期される出力:

    NAME             DATASET           PHASE      AGE   DURATION
    dataset-warmup   pv-demo-dataset   Complete   62s   9s
  4. 次のコマンドを実行して、Dataset オブジェクトのステータスをクエリします。

    kubectl get dataset

    予期される出力:

    NAME                    UFS TOTAL SIZE   CACHED    CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
    hostpath-demo-dataset   1.98GiB          1.98GiB   20.00GiB         100.0%              Bound   7m24s

    プリフェッチが完了すると、キャッシュされたデータのサイズ(CACHED)はデータセットのサイズと等しくなります。 これは、データセット全体がキャッシュされ、キャッシュされているデータの割合(CACHED PERCENTAGE)が 100% であることを示します。

手順 4:hostPath ボリュームにアクセスするコンテナーを作成する

  1. pod.yaml という名前のファイルを作成し、次の内容をファイルに追加します。 ファイルの claimName パラメーターを、手順 2 で作成した Dataset オブジェクトの名前に設定します。

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
    spec:
      containers:
        - name: nginx
          image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
          command:
          - "bash"
          - "-c"
          - "sleep inf"
          volumeMounts:
            - mountPath: /data
              name: data-vol
      volumes:
        - name: data-vol
          persistentVolumeClaim:
            claimName: hostpath-demo-dataset # Dataset オブジェクトの名前を指定します。

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

    kubectl create -f pod.yaml
  3. 次のコマンドを実行してポッドにログインし、ポッドからデータにアクセスします。

    $ kubectl exec -it nginx bash

    予期される出力:

    # NGINX ポッドの /data ディレクトリに demo-file という名前のファイルが存在します。 ファイルのサイズは 2 GB です。
    $ ls -lh /data
    total 2.0G
    -rwxrwxr-x 1 root root 2.0G Jun  9 04:02 demo-file
    
    # cat /data/demofile > /dev/null コマンドを実行して demofile ファイルを読み取り、/dev/null に書き込みます。 これには 2.061 秒かかります。
    $ time cat /data/demofile > /dev/null
    real    0m2.061s
    user    0m0.015s
    sys     0m0.581s

    データセット全体が JindoFS キャッシュシステムにキャッシュされます。 クエリがキャッシュにヒットすると、データはファイルシステムからリモートでフェッチされるのではなく、キャッシュから直接取得されます。 これにより、データ転送の距離が短縮され、データアクセスが高速化されます。