OSS から大規模なデータセットを読み取る Kubernetes ジョブを実行する場合、標準のオブジェクトストレージ API 経由でデータにアクセスすると、処理が遅くなることがあります。Fluid は JindoRuntime を使用して OSS データを POSIX ファイルシステムとして直接マウントし、キャッシュレイヤーを経由せずに低レイテンシでのデータアクセスを実現します。本トピックでは、キャッシュなしモード(no cache mode)で JindoRuntime を設定する手順と、OSS バケットに対して Kubernetes ジョブを実行する方法について説明します。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
クラスターおよびコンポーネント:
-
ContainerOS 以外のノードで実行されている Kubernetes 1.18 以降の ACK Pro マネージドクラスター。詳細については、「ACK Pro マネージドクラスターを作成する」をご参照ください。
重要ack-fluid コンポーネントは ContainerOS ノードをサポートしていません。
-
ack-fluid コンポーネントがデプロイ済みであること。以下のいずれかの方法を選択してください。
-
クラウドネイティブ AI スイートをまだインストールしていない場合は、スイートのインストール時に [Fluid 加速] を有効にします。詳細については、「クラウドネイティブ AI スイートのデプロイ」をご参照ください。
-
クラウドネイティブ AI スイートを既にインストール済みの場合: ACK コンソール の クラウドネイティブ AI スイート ページに移動し、ack-fluid コンポーネントをデプロイします。
重要既存のオープンソース版 Fluid をインストール済みの場合は、ack-fluid のデプロイ前にアンインストールしてください。
-
-
ACK Pro マネージドクラスターにデプロイされた仮想ノード。詳細については、「Pod を Elastic Container Instance にスケジューリングする」をご参照ください。
ツールおよびアクセス権限:
-
kubectl が ACK Pro マネージドクラスターに接続されています。「kubectl を使用したクラスターへの接続」をご参照ください。
-
Object Storage Service (OSS) が有効化され、OSS バケットが作成済みであること。詳細については、「OSS を有効化する」および「バケットを作成する」をご参照ください。
制限事項
キャッシュモードなしは、ACK の伸縮自在なスケジューリング機能と相互排他です。詳細については、「優先度に基づくリソーススケジューリングを設定する」をご参照ください。
ステップ 1:テストデータセットを OSS にアップロード
-
2 GB のテストデータセットを準備します。本例では、wwm_uncased_L-24_H-1024_A-16 BERT データセットを使用します。
-
データセットを ossutil を使用して OSS バケットにアップロードします。詳細については、「ossutil のインストール」をご参照ください。
ステップ 2:Dataset および JindoRuntime の作成
以下の手順では、OSS バケットをマウントするために必要な Kubernetes Secret、Dataset、および JindoRuntime リソースを作成します。
デプロイには数分かかります。
OSS 認証情報のシークレットを作成
-
以下の内容で
secret.yamlを作成します。apiVersion: v1 kind: Secret metadata: name: access-key stringData: fs.oss.accessKeyId: **** fs.oss.accessKeySecret: **** -
シークレットをデプロイします。
kubectl create -f secret.yaml
Dataset および JindoRuntime の作成
-
以下の内容で
resource.yamlを作成します。apiVersion: data.fluid.io/v1alpha1 kind: Dataset metadata: name: serverless-data spec: mounts: - mountPoint: oss://large-model-sh/ name: demo path: / options: fs.oss.endpoint: oss-cn-shanghai.aliyuncs.com 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 accessModes: - ReadWriteMany --- apiVersion: data.fluid.io/v1alpha1 kind: JindoRuntime metadata: name: serverless-data spec: master: disabled: true worker: disabled: true主なパラメーターの説明は以下のとおりです。
パラメーター 説明 mountPointUFS のマウントパス。形式: oss://<oss_bucket>/<bucket_dir>。このフィールドにはエンドポイントを含めないでください。<bucket_dir>は、バケットのルートディレクトリにアクセスする場合は省略可能です。fs.oss.endpointOSS バケットのパブリックエンドポイントまたはプライベートエンドポイント。データセキュリティを強化するため、プライベートエンドポイントを指定できます。プライベートエンドポイントを指定する場合は、ACK クラスターが OSS が有効化されているリージョンにデプロイされていることを確認してください。例:中国 (杭州) の場合、パブリックエンドポイントは oss-cn-hangzhou.aliyuncs.com、プライベートエンドポイントはoss-cn-hangzhou-internal.aliyuncs.comです。fs.oss.accessKeyIdバケットへのアクセスに使用する AccessKey ID。 fs.oss.accessKeySecretバケットへのアクセスに使用する AccessKey Secret。 accessModesPVC のアクセスモード。有効な値: ReadWriteOnce、ReadOnlyMany、ReadWriteMany、ReadWriteOncePod。デフォルト値:ReadOnlyMany。master.disabled/worker.disabledマスターノードおよびワーカーノードの両方で trueを設定することで、キャッシュなしモードを有効化します。 -
Dataset および JindoRuntime をデプロイします。
kubectl create -f resource.yaml
デプロイメントの確認
-
Dataset のステータスを確認します。
kubectl get dataset serverless-data期待される出力:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE serverless-data Bound 1dPHASEがBoundと表示された場合、Dataset は準備完了です。 -
JindoRuntime のステータスを確認します。
kubectl get jindo serverless-data期待される出力:
NAME MASTER PHASE WORKER PHASE FUSE PHASE AGE serverless-data Ready 3m41sFUSE PHASEがReadyと表示された場合、JindoRuntime は準備完了です。
ステップ 3:OSS データへのアクセスを実行するジョブの実行
このジョブでは、serverless-data PVC を /data にマウントし、すべてのファイルを /tmp にコピーして、転送に要する時間を計測します。
-
以下の内容で
job.yamlを作成します。apiVersion: batch/v1 kind: Job metadata: name: demo-app spec: template: metadata: labels: alibabacloud.com/fluid-sidecar-target: eci alibabacloud.com/eci: "true" annotations: k8s.aliyun.com/eci-use-specs: ecs.g7.4xlarge spec: containers: - name: demo image: debian:buster command: - /bin/bash args: - -c - du -sh /data && time cp -r /data/ /tmp volumeMounts: - mountPath: /data name: demo restartPolicy: Never volumes: - name: demo persistentVolumeClaim: claimName: serverless-data backoffLimit: 4 -
ジョブをデプロイします。
kubectl create -f job.yaml -
コンテナログを表示して結果を確認します。
kubectl logs demo-app--1-5fr74 -c demo期待される出力:
real 0m23.644s user 0m0.004s sys 0m1.036srealの値は、データセットのコピーにかかる合計の壁時計時間(wall-clock time)を示します。実際の所要時間は、ネットワーク遅延および帯域幅によって異なります。キャッシュなしモードでは、アクセスのたびに OSS から直接データを読み取ります。繰り返し読み取りを行う場合のレイテンシを低減するには、代わりにキャッシュモードをご利用ください。詳細については、「キャッシュモードによるジョブの高速化」をご参照ください。
ステップ 4:クリーンアップ
テスト完了後、ジョブおよび Dataset を削除します。
kubectl delete job demo-app
kubectl delete dataset serverless-data