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 ユーザーは、マスターとワーカーが実行されるノード上にホストパスを作成する必要があります。 これを行うには、次の操作を実行します。
次のコマンドを実行して、
/mntディレクトリに hostPath ボリュームのマウントポイントとしてサブディレクトリを作成します。$ mkdir /mnt/demo-remote-fs次のコマンドを実行して、
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"次のコマンドを実行して、
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 オブジェクトを作成する
dataset.yamlという名前のファイルを作成し、次の内容をファイルに追加します。次の
dataset.yamlファイルには、2 つの Fluid オブジェクト(Dataset と JindoRuntime)が含まれています。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
各ワーカーが使用できる最大キャッシュサイズ。 要件に基づいて値を変更できます。
次のコマンドを実行して、Dataset オブジェクトと JindoRuntime オブジェクトを作成します。
kubectl create -f dataset.yaml次のコマンドを実行して、データセットがデプロイされているかどうかを確認します。
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 3m54sDataset オブジェクトが Bound 状態の場合、JindoFS はクラスター内で実行されており、アプリケーション ポッドは Dataset オブジェクトで定義されたデータにアクセスできます。
(オプション)手順 3:DataLoad オブジェクトを作成してデータをプリフェッチする
初回クエリはキャッシュにヒットしない場合があります。 Fluid を使用すると、DataLoad オブジェクトを作成してデータをプリフェッチし、初回クエリの速度を向上させることができます。
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
プリフェッチされたパスまたはファイルをキャッシュするために作成されたワーカー ポッドの数。
次のコマンドを実行して、DataLoad オブジェクトを作成します。
kubectl create -f dataload.yaml次のコマンドを実行して、DataLoad オブジェクトのステータスをクエリします。
kubectl get dataload dataset-warmup予期される出力:
NAME DATASET PHASE AGE DURATION dataset-warmup pv-demo-dataset Complete 62s 9s次のコマンドを実行して、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 ボリュームにアクセスするコンテナーを作成する
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 オブジェクトの名前を指定します。次のコマンドを実行して、ポッドを作成します。
kubectl create -f pod.yaml次のコマンドを実行してポッドにログインし、ポッドからデータにアクセスします。
$ 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 キャッシュシステムにキャッシュされます。 クエリがキャッシュにヒットすると、データはファイルシステムからリモートでフェッチされるのではなく、キャッシュから直接取得されます。 これにより、データ転送の距離が短縮され、データアクセスが高速化されます。