Fluidを使用すると、JindoRuntimeを使用して、サーバーレスクラウドコンピューティングシナリオでObject Storage Service (OSS) に保存されているデータへのアクセスを高速化できます。 キャッシュモードとキャッシュモードなしでデータアクセスを高速化できます。 このトピックでは、キャッシュなしモードでジョブを高速化する方法について説明します。
前提条件
非containerOSを使用したContainer Service for Kubernetes (ACK) Proクラスターが作成され、クラスターのKubernetesバージョンが1.18以降になります。 詳細については、「ACK Proクラスターの作成」をご参照ください。
重要ack − fluidコンポーネントは、現在、ContainerOS上でサポートされていない。
クラウドネイティブAIスイートがインストールされ、ack-fluidコンポーネントがデプロイされます。
重要既にオープンソースFluidをインストールしている場合は、Fluidをアンインストールしてack-fluidコンポーネントをデプロイします。
クラウドネイティブAIスイートをインストールしていない場合は、スイートのインストール時にFluidアクセラレーションを有効にします。 詳細については、「クラウドネイティブ AI スイートのデプロイ」をご参照ください。
クラウドネイティブAIスイートを既にインストールしている場合は、ACKコンソールのクラウドネイティブAIスイートページに移動し、ack-fluidコンポーネントをデプロイします。
仮想ノードはACK Proクラスターにデプロイされます。 詳細については、「仮想ノードとしてデプロイされているエラスティックコンテナインスタンスへのポッドのスケジュール」をご参照ください。
kubectlクライアントがACK Proクラスターに接続されています。 詳細については、「kubectlを使用したクラスターへの接続」をご参照ください。
OSSが有効化され、バケットが作成されます。 詳細については、「OSSの有効化」および「バケットの作成」をご参照ください。
制限事項
この特徴は、ACKの弾性スケジューリング特徴と相互に排他的である。 ACKのエラスティックスケジューリング機能の詳細については、「優先順位ベースのリソーススケジューリングの設定」をご参照ください。
手順1: テストデータセットをOSSバケットにアップロードする
サイズが2 GBのテストデータセットを作成します。 この例では、テストデータセットが使用されます。
作成したOSSバケットにテストデータセットをアップロードします。
OSSが提供するossutilツールを使用して、データをアップロードできます。 詳細については、「ossutil のインストール」をご参照ください。
ステップ2: データセットとJindoRuntimeの作成
ACKクラスターとOSSバケットをセットアップした後、データセットとJindoRuntimeをデプロイする必要があります。 デプロイには数分しかかかりません。
次の内容に基づいて、secret.yamlという名前のファイルを作成します。
このファイルには、ossバケットへのアクセスに使用される
fs.oss.accessKeyIdとfs. OSS. accessKeySecretが含まれています。apiVersion: v1 kind: Secret metadata: name: access-key stringData: fs.oss.accessKeyId: **** fs.oss.accessKeySecret: ****次のコマンドを実行して、シークレットをデプロイします。
kubectl create -f secret.yaml次の内容に基づいて、resource.yamlという名前のファイルを作成します。
YAMLファイルには次の情報が格納されます。
Dataset: リモートデータストアに格納されるデータセットとUnixファイルシステム (UFS) 情報を指定します。JindoRuntime: クラスターでのデータキャッシュのJindoFSを有効にします。
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バケットのパブリックエンドポイントまたはプライベートエンドポイント。
バケットのプライベートエンドポイントを指定して、データのセキュリティを強化できます。 ただし、プライベートエンドポイントを指定する場合は、OSSがアクティブ化されているリージョンにACKクラスターがデプロイされていることを確認してください。 たとえば、OSSバケットが中国 (杭州) リージョンで作成されている場合、バケットのパブリックエンドポイントは
oss-cn-hangzhou.aliyuncs.comで、プライベートエンドポイントはoss-cn-hangzhou-internal.aliyuncs.comです。fs.oss.accessKeyIdバケットへのアクセスに使用されるAccessKey ID。
fs.oss.accessKeySecretバケットへのアクセスに使用されるAccessKeyシークレット。
accessModesアクセスモード。 有効な値:
ReadWriteOnce、ReadOnlyMany、ReadWriteMany、およびReadWriteOncePod。 デフォルト値:ReadOnlyMany無効化このパラメーターをマスターノードとワーカーノードの両方で
trueに設定すると、キャッシュなしモードが使用されます。次のコマンドを実行して、データセットとJindoRuntimeをデプロイします。
kubectl create -f resource.yaml次のコマンドを実行して、データセットがデプロイされているかどうかを確認します。
kubectl get dataset serverless-data期待される出力:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE serverless-data Bound 1dバインドは、出力の[フェーズ]列に表示されます。 これは、データセットがデプロイされたことを示します。次のコマンドを実行して、JindoRuntimeがデプロイされているかどうかを確認します。
kubectl get jindo serverless-data期待される出力:
NAME MASTER PHASE WORKER PHASE FUSE PHASE AGE serverless-data Ready 3m41s出力の
[FUSE]列に[準備完了]が表示されます。 これは、JindoRuntimeがデプロイされていることを示します。
ステップ3: ジョブを使用してOSSにアクセスするコンテナーを作成する
JindoFSによって高速化されたデータアクセスをテストするコンテナーを作成したり、関連する機能を使用する機械学習ジョブを送信したりできます。 このセクションでは、ジョブを使用してコンテナーを作成し、OSSに保存されているデータにアクセスする方法について説明します。
次のコンテンツに基づいて、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 args: - -c - du -sh /data && time cp -r /data/ /tmp command: - /bin/bash 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.036s出力の
実フィールドは、Servingファイルの複製に23.644秒 (0m23.644秒) かかったことを示しています。 期間は、ネットワークの待ち時間と帯域幅によって異なります。 データアクセスを高速化する場合は、「キャッシュモードでジョブを高速化」をご参照ください。
ステップ4: データのクリア
データアクセスの高速化をテストした後、できるだけ早い機会に関連データをクリアします。
次のコマンドを実行して、コンテナーを削除します。
kubectl delete job demo-app次のコマンドを実行して、データセットを削除します。
kubectl delete dataset serverless-data