Fluidを使用して、ACKサーバーレスクラスターに保存されているデータへのアクセスを高速化できます。 Fluidコントローラーやキャッシュランタイムエンジンを含むすべてのFluidコンポーネント、およびアプリケーションをACKサーバーレスクラスターにデプロイできます。 このトピックでは、ACKサーバーレスクラスターでジョブを高速化する方法について説明します。
前提条件
ACKサーバーレスクラスターが作成され、クラスターのKubernetesバージョンが1.18以降になります。 CoreDNSがクラスターにインストールされています。 詳細については、「ACKサーバーレスクラスターの作成」をご参照ください。
kubectlクライアントがACKクラスターに接続されています。 詳細については、「kubectlを使用したACKクラスターへの接続」をご参照ください。
Object Storage Service (OSS) が有効化され、バケットが作成されます。 詳細については、「OSSの有効化」および「バケットの作成」をご参照ください。
制限
この機能は、ACKサーバーレスクラスタの仮想ノードベースのポッドスケジューリング機能と相互に排他的です。 仮想ノードベースのポッドスケジューリング機能の詳細については、「ACKクラスターの仮想ノードベースのポッドスケジューリングポリシーの有効化」をご参照ください。
Fluidの制御プレーンコンポーネントを展開する
オープンソースFluidをインストールしている場合は、ack-Fluidコンポーネントをインストールする前にfluidをアンインストールする必要があります。
Fluidの制御プレーンコンポーネントを展開します。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
On theヘルムページをクリックします。デプロイ.
On the基本情報ウィザードページで、パラメーターを設定し、次へ.
表示されるパラメーターの一部を次の表に示します。
パラメーター
説明
ソース
[Marketplace] を選択します。
チャート
ack-fluidを見つけてクリックします。
説明ack-fluidチャートのデフォルトのリリース名はack-fluidです。 ack-fluidチャートのデフォルトの名前空間はfluid-systemです。 [次へ] をクリックします。 ack-fluidチャートの実際のリリース名と名前空間がデフォルトのリリース名とデフォルトの名前空間と異なる場合、[確認] メッセージが表示されます。 [はい] をクリックして、デフォルトのリリース名とデフォルトの名前空間を使用します。
On theパラメータウィザードページ、OK.
次のコマンドを実行して、Fluidがデプロイされているかどうかを確認します。
kubectl get pod -n fluid-system期待される出力:
の名前準備ができているステータスの履歴書 dataset-controller-d99998f79-dgkmh 1/1ランニング0 2m48s fluid-webhook-55c6d9d497-dmrzb 1/1ランニング0 2m4 9s出力は、流体が展開されたことを示す。 次のコンテンツは、Fluidの制御プレーンコンポーネントについて説明します。
Dataset Controller: Fluidによって参照されるDatasetオブジェクトのライフサイクルを管理します。 データセットオブジェクトは、カスタムリソース (CR) オブジェクトです。
Fluid Webhook: データにアクセスする必要があるポッドに対してサイドカー注入を実行します。 これにより、サーバーレスシナリオではデータアクセスがユーザーに対して透過的になります。
説明前述のコンポーネントに加えて、Fluidの制御プレーンには、JindoFSランタイム、JuiceFSランタイム、Alluxioランタイムなどのキャッシュランタイムのライフサイクルを管理するために使用されるコントローラも含まれています。 キャッシュランタイムに対応するコントローラは、キャッシュランタイムが使用された後にのみデプロイされます。
ACKサーバーレスクラスターでのデータアクセスの高速化の例
手順1: テストデータセットをOSSバケットにアップロードする
サイズが2 GBのテストデータセットを作成します。 この例では、テストデータセットが使用されます。
作成したOSSバケットにテストデータセットをアップロードします。
OSSが提供するossutilツールを使用して、データをアップロードできます。 詳細については、「ossutilのインストール」をご参照ください。
手順2: DatasetオブジェクトとRuntimeオブジェクトの作成
テストデータセットをOSSにアップロードした後、Fluidを使用してデータセットを要求できます。 Datasetオブジェクト (CRオブジェクト) とRuntimeオブジェクト (CRオブジェクト) を作成します。
Datasetオブジェクトは、OSSにアップロードされるテストデータセットのURLを指定するために使用されます。
Runtimeオブジェクトは、使用されるキャッシュシステムを定義および構成するために使用されます。
次のコマンドを実行して、OSSバケットへのアクセスに使用される資格情報を格納するSecretを作成します。
kubectl secret generic oss-access-key \ -- from-literal=fs.oss.accessKeyId=<access_key_id> \ -- from-literal=fs.oss.accessKeySecret=<access_key_secret>dataset.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。 ファイルは、DatasetオブジェクトとRuntimeオブジェクトを作成するために使用されます。
このトピックでは、JindoRuntimeを使用してJindoFSとインターフェースします。
apiVersion: data.fluid.io/v1alpha 1 kind: データセット メタデータ: 名前: demo-dataset spec: mounts: -mountPoint: oss://<bucket_name>/<bucket_path> 名前: デモ path: / options: fs.oss.endpoint: oss-<regio n>.aliyuncs.com# OSSバケットのエンドポイント。 encryptOptions: -名前: fs.oss.accessKeyId valueFrom: secretKeyRef: 名前: oss-access-key キー: fs.oss.accessKeyId -名前: fs.oss.accessKeySecret valueFrom: secretKeyRef: 名前: oss-access-key キー: fs.oss.accessKeySecret --- apiVersion: data.fluid.io/v1alpha 1 kind: JindoRuntime メタデータ: 名前: demo-dataset spec: # JindoFSクラスターに作成されるワーカーポッドの数。 レプリカ:2 ワーカー: podMetadata: アノテーション: # 仮想ノードベースのポッドスケジューリングポリシーを無効にします。 alibabacloud.com/burst-resource: eci_only # ワーカーポッドの実行に使用されるインスタンスのタイプ。 k8s.aliyun.com/eci-use-specs: <eci_instance_spec> # イメージキャッシュを使用してポッドの作成を高速化します。 k8s.aliyun.com/eci-image-cache: 「真」 tieredstore: レベル: # 各ワーカーポッドのキャッシュとして10 GiBのメモリを指定します。 -mediumtype: MEM volumeType: emptyDir パス: /dev/shm クォータ: 10Gi high: "0.99" low: "0.99"表示されるパラメーターの一部を次の表に示します。
パラメーター
説明
mountPointUFSがマウントされるパス。 パスの形式は
oss://<oss_bucket>/<bucket_dir>です。パスにエンドポイント情報を含めないでください。 マウントポイントを1つだけ使用する場合は、
pathを/に設定できます。オプションOSSバケットのエンドポイントに関する情報。 パブリックまたは内部エンドポイントを指定できます。
fs.oss.endpointOSSバケットのパブリックまたは内部エンドポイント。
バケットの内部エンドポイントを指定して、データのセキュリティを強化できます。 ただし、内部エンドポイントを指定する場合は、OSSがアクティブ化されているリージョンにクラスターがデプロイされていることを確認してください。 たとえば、OSSバケットが中国 (杭州) リージョンで作成されている場合、バケットのパブリックエンドポイントは
oss-cn-hangzhou.aliyuncs.comで、内部エンドポイントはoss-cn-hangzhou-internal.aliyuncs.comです。fs.oss.accessKeyIdバケットへのアクセスに使用されるAccessKey ID。
fs.oss.accessKeySecretバケットへのアクセスに使用されるAccessKeyシークレット。
レプリカJindoRuntimeによって作成されるワーカーポッドの数。 このパラメーターは、分散キャッシュランタイムで提供できる最大キャッシュサイズを決定します。
worker.podMetadata.annotationstieredstore.levelsクォータフィールドを使用して、各ワーカーポッドで使用されるキャッシュの最大サイズを指定できます。tieredstore.levels.mediumtypeキャッシュタイプ。 サポートされているキャッシュタイプは、HDD、SSD、およびMEMです。
mediumtypeの推奨設定の詳細については、「ポリシー2: 適切なキャッシュメディアの選択」をご参照ください。
tieredstore.levels.volumeTypeキャッシュメディアのボリュームタイプ。 有効な値:
emptyDirおよびhostPath。 デフォルト値:hostPath。メモリまたはローカルシステムディスクをキャッシュ媒体として使用する場合は、
emptyDirタイプを使用して、ノード上のキャッシュデータの残留を回避し、ノードの可用性を確保することを推奨します。ローカルデータディスクをキャッシュメディアとして使用する場合は、
hostPathタイプを使用し、パスを設定してホスト上のデータディスクのマウントパスを指定できます。
volumeTypeの推奨設定の詳細については、「ポリシー2: 適切なキャッシュメディアの選択」をご参照ください。
tieredstore.levels.pathキャッシュのパス。 指定できるパスは1つだけです。
tieredstore.levels.quota最大キャッシュサイズ。 例えば、100 Giの値は、最大キャッシュサイズが100 GiBであることを示す。
tieredstore.levels.highストレージの上限。
tieredstore.levels.lowストレージの下限。
次のコマンドを実行して、DatasetオブジェクトとJindoRuntimeオブジェクトを作成します。
kubectl create -f dataset.yaml次のコマンドを実行して、Datasetオブジェクトが作成されているかどうかを確認します。
DatasetオブジェクトとJindoRuntimeオブジェクトの作成には1〜2分かかります。 オブジェクトの作成後、キャッシュシステムとキャッシュされたデータに関する情報を照会できます。
kubectl get dataset demo-dataset期待される出力:
名UFS合計サイズキャッシュキャッシュ容量キャッシュパーセント位相年齢 demo-dataset 1.16GiB 0.00B 20.00GiB 0.0% バウンド2m5 8s出力には、Fluidで作成したDatasetオブジェクトに関する情報が表示されます。 次の表に、出力のパラメーターを示します。
パラメーター
説明
UFS合計サイズ
OSSにアップロードされるデータセットのサイズ。
キャッシュ済み
キャッシュされたデータのサイズ。
キャッシュ容量
合計キャッシュサイズ。
キャッシュされたパーセント
データセット内のキャッシュされたデータの割合。
フェーズ
Datasetオブジェクトのステータス。 値が [バインド] の場合、Datasetオブジェクトが作成されます。
(オプション) ステップ3: データを予熱する
プリフェッチにより、初回データアクセスを効率的に高速化できます。 初めてデータを取得する場合は、この機能を使用することをお勧めします。
次のコンテンツに基づいて、dataload.yamlという名前のファイルを作成します。
apiVersion: data.fluid.io/v1alpha 1 kind: DataLoad メタデータ: 名前: data-warmup spec: データセット: 名前: demo-dataset NAMESPACE:デフォルト loadMetadata: true次のコマンドを実行して、DataLoadオブジェクトを作成します。
kubectl create -f dataload.yaml期待される出力:
名DATASETフェーズ年齢期間 data-warmup demo-dataset Complete 99s 58s出力は、データプリフェッチの持続時間が
58秒であることを示す。
ステップ4: データアクセスの高速化をテストするジョブの作成
JindoFSによってデータアクセスが高速化されるかどうかをテストするアプリケーションを作成したり、関連する機能を使用する機械学習ジョブを送信したりできます。 このセクションでは、ジョブを使用してOSSに保存されているデータにアクセスする方法について説明します。
job.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。
apiVersion: batch/v1 種類: 仕事 メタデータ: 名前: demo-app spec: template: metadata: labels: alibabacloud.com/fluid-sidecar-target: eci アノテーション: # 仮想ノードベースのポッドスケジューリングポリシーを無効にします。 alibabacloud.com/burst-resource: eci_only # ポッドのインスタンスタイプを選択します。 k8s.aliyun.com/eci-use-specs: ecs.g7.4xlarge 仕様: containers: -name: デモ 画像: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 args: - -c -du -sh /data && time cp -r /data/ /tmp command: - /bin/bash volumeMounts: -mountPath: /データ 名前: デモ restartPolicy: Never volumes: -name: デモ persistentVolumeClaim: claimName: デモデータセット backoffLimit: 4次のコマンドを実行してジョブを作成します。
kubectl create -f job.yaml次のコマンドを実行して、ジョブによって作成されたポッドのブートログを照会します。
kubectl logs demo-app-jwktf -c demo期待される出力:
1.2G /データ リアル0m0.992 ユーザー0m0.004s sys 0m0.674s出力の
realフィールドは、ファイルの複製に0.992秒 (0m0.992秒) かかったことを示しています。
ステップ5: データのクリア
データアクセスの高速化をテストした後、できるだけ早い機会に関連データをクリアします。
次のコマンドを実行して、ジョブのポッドを削除します。
kubectl delete job demo-app次のコマンドを実行して、Datasetオブジェクトとキャッシュランタイムに対応するコンポーネントを削除します。
kubectl delete dataset demo-dataset重要コンポーネントを削除するには約1分かかります。 次の手順を実行する前に、コンポーネントが削除されていることを確認してください。
次のコマンドを実行して、Fluidのコントロールプレーンコンポーネントを削除します。
kubectl get deployments.apps -n fluid-system | awk 'NR>1 {print $1}'| xargs kubectl scale deployments -n fluid-system -- replicas=0データアクセスの高速化を再度有効にするには、DatasetオブジェクトとRuntimeオブジェクトを作成する前に、次のコマンドを実行してFluidのコントロールプレーンコンポーネントを作成する必要があります。
kubectl scale -n fluid-system deployment dataset-controller -- replicas=1 kubectl scale -n fluid-system deployment fluid-webhook -- replicas=1