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

Container Service for Kubernetes:仕事を加速する

最終更新日:Jan 07, 2025

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をアンインストールする必要があります。

  1. Fluidの制御プレーンコンポーネントを展開します。

    1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

    2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[アプリケーション] > [ヘルム] を選択します。

    3. On theヘルムページをクリックします。デプロイ.

    4. On the基本情報ウィザードページで、パラメーターを設定し、次へ.

      表示されるパラメーターの一部を次の表に示します。

      パラメーター

      説明

      ソース

      [Marketplace] を選択します。

      チャート

      ack-fluidを見つけてクリックします。

      説明

      ack-fluidチャートのデフォルトのリリース名はack-fluidです。 ack-fluidチャートのデフォルトの名前空間はfluid-systemです。 [次へ] をクリックします。 ack-fluidチャートの実際のリリース名と名前空間がデフォルトのリリース名とデフォルトの名前空間と異なる場合、[確認] メッセージが表示されます。 [はい] をクリックして、デフォルトのリリース名とデフォルトの名前空間を使用します。

    5. On theパラメータウィザードページ、OK.

  2. 次のコマンドを実行して、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バケットにアップロードする

  1. サイズが2 GBのテストデータセットを作成します。 この例では、テストデータセットが使用されます。

  2. 作成したOSSバケットにテストデータセットをアップロードします。

    OSSが提供するossutilツールを使用して、データをアップロードできます。 詳細については、「ossutilのインストール」をご参照ください。

手順2: DatasetオブジェクトとRuntimeオブジェクトの作成

テストデータセットをOSSにアップロードした後、Fluidを使用してデータセットを要求できます。 Datasetオブジェクト (CRオブジェクト) とRuntimeオブジェクト (CRオブジェクト) を作成します。

  • Datasetオブジェクトは、OSSにアップロードされるテストデータセットのURLを指定するために使用されます。

  • Runtimeオブジェクトは、使用されるキャッシュシステムを定義および構成するために使用されます。

  1. 次のコマンドを実行して、OSSバケットへのアクセスに使用される資格情報を格納するSecretを作成します。

    kubectl secret generic oss-access-key \
      -- from-literal=fs.oss.accessKeyId=<access_key_id> \
      -- from-literal=fs.oss.accessKeySecret=<access_key_secret> 
  2. 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" 

    表示されるパラメーターの一部を次の表に示します。

    パラメーター

    説明

    mountPoint

    UFSがマウントされるパス。 パスの形式はoss://<oss_bucket>/<bucket_dir> です。

    パスにエンドポイント情報を含めないでください。 マウントポイントを1つだけ使用する場合は、path/に設定できます。

    オプション

    OSSバケットのエンドポイントに関する情報。 パブリックまたは内部エンドポイントを指定できます。

    fs.oss.endpoint

    OSSバケットのパブリックまたは内部エンドポイント。

    バケットの内部エンドポイントを指定して、データのセキュリティを強化できます。 ただし、内部エンドポイントを指定する場合は、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.annotations

    インスタンスタイプイメージキャッシュを指定できます。

    tieredstore.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

    ストレージの下限。

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

    kubectl create -f dataset.yaml
  4. 次のコマンドを実行して、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: データを予熱する

プリフェッチにより、初回データアクセスを効率的に高速化できます。 初めてデータを取得する場合は、この機能を使用することをお勧めします。

  1. 次のコンテンツに基づいて、dataload.yamlという名前のファイルを作成します。

    apiVersion: data.fluid.io/v1alpha 1
    kind: DataLoad
    メタデータ:
      名前: data-warmup
    spec:
      データセット:
        名前: demo-dataset
        NAMESPACE:デフォルト
      loadMetadata: true 
  2. 次のコマンドを実行して、DataLoadオブジェクトを作成します。

    kubectl create -f dataload.yaml

    期待される出力:

    名DATASETフェーズ年齢期間
    data-warmup demo-dataset Complete 99s 58s 

    出力は、データプリフェッチの持続時間が58秒であることを示す。

ステップ4: データアクセスの高速化をテストするジョブの作成

JindoFSによってデータアクセスが高速化されるかどうかをテストするアプリケーションを作成したり、関連する機能を使用する機械学習ジョブを送信したりできます。 このセクションでは、ジョブを使用してOSSに保存されているデータにアクセスする方法について説明します。

  1. 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 
  2. 次のコマンドを実行してジョブを作成します。

    kubectl create -f job.yaml
  3. 次のコマンドを実行して、ジョブによって作成されたポッドのブートログを照会します。

    kubectl logs demo-app-jwktf -c demo

    期待される出力:

    1.2G /データ
    
    リアル0m0.992
    ユーザー0m0.004s
    sys 0m0.674s 

    出力のrealフィールドは、ファイルの複製に0.992秒 (0m0.992秒) かかったことを示しています。

ステップ5: データのクリア

データアクセスの高速化をテストした後、できるだけ早い機会に関連データをクリアします。

  1. 次のコマンドを実行して、ジョブのポッドを削除します。

    kubectl delete job demo-app
  2. 次のコマンドを実行して、Datasetオブジェクトとキャッシュランタイムに対応するコンポーネントを削除します。

    kubectl delete dataset demo-dataset
    重要

    コンポーネントを削除するには約1分かかります。 次の手順を実行する前に、コンポーネントが削除されていることを確認してください。

  3. 次のコマンドを実行して、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