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

Container Service for Kubernetes:ジョブアプリケーション向けデータアクセスの高速化

最終更新日:Jun 24, 2026

Container Service for Kubernetes (ACK) サーバーレス環境で Fluid をデプロイし、OSS データをローカルにキャッシュすることで、繰り返し実行されるジョブの読み取り時間を 1 秒未満に短縮できます。Fluid コントローラー、キャッシュシステム、アプリケーションポッドはすべてサーバーレス環境上で実行可能です。

Fluid をデプロイし、OSS バケットをバックエンドとする Dataset および JindoRuntime を構成して、キャッシュされたデータを読み取るジョブを実行します。

前提条件

以下の要件を満たしていることを確認してください。

制限事項

Fluid は ACK サーバーレスクラスターの仮想ノードスケジューリング機能と競合するため、両方を同時に使用することはできません。詳細については、「クラスターの仮想ノードスケジューリングポリシーを有効化する」をご参照ください。

この問題を回避するには、すべての JindoRuntime キャッシュワーカーポッドおよびアプリケーションポッドに alibabacloud.com/burst-resource: eci_only アノテーションを含める必要があります。このアノテーションは、以下の YAML の例に記載されています。

Fluid コントロールプレーンのデプロイ

重要

オープンソース版 Fluid がインストール済みの場合は、ack-fluid をデプロイする前にアンインストールしてください。

  1. ACK コンソールで、ナビゲーションウィンドウのクラスターをクリックします。

  2. クラスター名をクリックします。ナビゲーションウィンドウで、アプリケーション > Helm をクリックします。

  3. Helm ページで、デプロイをクリックします。

  4. 基本情報で以下のパラメーターを設定し、次へをクリックします。

    デフォルトのリリース名は ack-fluid で、名前空間は fluid-system です。これらを変更すると、[確認] ダイアログが表示されます。[はい] をクリックして復元します。
    パラメーター
    ソース マーケットプレイス
    チャート ack-fluid
  5. パラメーターで、OK をクリックします。

  6. Fluid コントロールプレーンが実行中であることを確認します。

    • Dataset Controller — Dataset CR のライフサイクルを管理します。

    • Fluid Webhook — サーバーレスシナリオでの透過的なデータアクセスのために、アプリケーションポッドにキャッシングサイドカーを注入します。

    Fluid コントロールプレーンには、JindoFS、JuiceFS、Alluxio 向けのコントローラーも含まれます。これらのコンポーネントは、各キャッシュシステムを構成した際にオンデマンドでスケーリングされます。
    kubectl get pod -n fluid-system

    期待される出力:

    NAME                                  READY   STATUS    RESTARTS   AGE
    dataset-controller-d99998f79-dgkmh    1/1     Running   0          2m48s
    fluid-webhook-55c6d9d497-dmrzb        1/1     Running   0          2m49s

    上記の 2 つのコンポーネントはそれぞれ異なる役割を担っています。

データアクセスの高速化

OSS へのテストデータのアップロード

  1. サンプルデータセットなどの 2 GB のテストファイルを作成します。

  2. ossutil を使用して、ファイルをご利用の OSS バケットにアップロードします。

Dataset および JindoRuntime リソースの作成

この例では、キャッシュバックエンドとして JindoFS(JindoRuntime)を使用します。Fluid では、外部データソースを次の 2 つのカスタムリソース(CR)として表現します。

  • Dataset — 外部ストレージシステム内のデータを指します。

  • JindoRuntime — キャッシュシステムの構成を定義します。

Fluid は遅延読み込みを採用しています。初回アクセス時に OSS からローカルキャッシュへデータをフェッチし、それ以降の読み取りはキャッシュから行われます。初回実行時のレイテンシーを排除するには、ジョブを送信する前にキャッシュを事前ウォームアップしてください。

  1. OSS 認証情報を格納するためのシークレットを作成します。

    kubectl create secret generic oss-access-key \
      --from-literal=fs.oss.accessKeyId=<access_key_id> \
      --from-literal=fs.oss.accessKeySecret=<access_key_secret>
  2. dataset.yaml という名前のファイルを作成します。

    パラメーター 説明
    mountPoint oss://<bucket_name>/<bucket_path> 形式の OSS マウントパス。単一のマウントポイントを使用する場合は、path/ に設定します。
    fs.oss.endpoint OSS バケットのエンドポイント。同一リージョンからのアクセスには内部エンドポイント(例:oss-cn-hangzhou-internal.aliyuncs.com)を使用し、それ以外の場合はパブリックエンドポイント(例:oss-cn-hangzhou.aliyuncs.com)を使用します。
    replicas キャッシュワーカーポッドの数。合計キャッシュ容量を決定します。
    alibabacloud.com/burst-resource: eci_only キャッシュワーカーポッドでの仮想ノードスケジューリングを無効化します。必須項目です — Fluid は仮想ノードスケジューリングと競合します(制限事項を参照)。
    k8s.aliyun.com/eci-use-specs ECI インスタンス仕様 (各キャッシュワーカー Pod 用)
    k8s.aliyun.com/eci-image-cache ポッド起動を高速化するためにインスタンスイメージキャッシュを有効化します。
    tieredstore.levels.mediumtype キャッシュメディア。有効な値:MEM(メモリ)、SSDHDDキャッシュメディアの選択をご参照ください。
    tieredstore.levels.volumeType ボリュームタイプ。メモリまたはシステムディスクの場合は emptyDir を使用します(ノードの可用性に影響を与える残留キャッシュを防止)。データディスクの場合は hostPath を使用し、path をマウントポイントに設定します。デフォルト:hostPath
    tieredstore.levels.path キャッシュパス。1 つのパスのみサポートされます。
    tieredstore.levels.quota ワーカーあたりの最大キャッシュ容量(例:10Gi)。
    tieredstore.levels.high / low キャッシュエビクションの高・低ウォーターマーク。
    apiVersion: data.fluid.io/v1alpha1
    kind: Dataset
    metadata:
      name: demo-dataset
    spec:
      mounts:
        - mountPoint: oss://<bucket_name>/<bucket_path>
          name: demo
          path: /
          options:
            fs.oss.endpoint: oss-<region>.aliyuncs.com
          encryptOptions:
            - name: fs.oss.accessKeyId
              valueFrom:
                secretKeyRef:
                  name: oss-access-key
                  key: fs.oss.accessKeyId
            - name: fs.oss.accessKeySecret
              valueFrom:
                secretKeyRef:
                  name: oss-access-key
                  key: fs.oss.accessKeySecret
    ---
    apiVersion: data.fluid.io/v1alpha1
    kind: JindoRuntime
    metadata:
      name: demo-dataset
    spec:
      # キャッシュワーカーノードの数
      replicas: 2
      worker:
        podMetadata:
          annotations:
            # 必須:仮想ノードスケジューリングを無効化(Fluid と競合 — 制限事項を参照)
            alibabacloud.com/burst-resource: eci_only
            # JindoFS キャッシュワーカーポッド向けの ECI インスタンス仕様
            k8s.aliyun.com/eci-use-specs: <eci_instance_spec>
            # ポッド起動を高速化するためにインスタンスイメージキャッシュを有効化
            k8s.aliyun.com/eci-image-cache: "true"
      tieredstore:
        levels:
          # ワーカーノードあたり 10 GiB のメモリキャッシュ
          - mediumtype: MEM
            volumeType: emptyDir
            path: /dev/shm
            quota: 10Gi
            high: "0.99"
            low: "0.99"

    主なパラメーター:

  3. マニフェストを適用します。

    kubectl create -f dataset.yaml
  4. キャッシュシステムのデプロイが完了するまで 1~2 分待ち、Dataset のステータスを確認します。

    PHASENotBound の場合、キャッシュシステムはまだ初期化中です。1~2 分待って再度確認してください。
    kubectl get dataset demo-dataset

    期待される出力:

    NAME           UFS TOTAL SIZE   CACHED   CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
    demo-dataset   1.16GiB          0.00B    20.00GiB         0.0%                Bound   2m58s

    PHASE: Bound は正常にデプロイされたことを示します。その他の列には、OSS データサイズ、キャッシュ済み量、合計キャッシュ容量が表示されます。

キャッシュの事前ウォームアップ(任意)

Fluid は遅延読み込みを採用しているため、大規模なデータセットの場合、初回ジョブ実行時は OSS からデータをフェッチする必要があり、数十秒かかることがあります。初回実行時のレイテンシーを排除するには、キャッシュを事前にウォームアップしてください。

  1. dataload.yaml という名前のファイルを作成します。

    apiVersion: data.fluid.io/v1alpha1
    kind: DataLoad
    metadata:
      name: data-warmup
    spec:
      dataset:
        name: demo-dataset
        namespace: default
      loadMetadata: true
  2. 事前ウォームアップジョブを開始します。

    kubectl create -f dataload.yaml

    ステータスが Complete になるまで待ちます。

    NAME          DATASET        PHASE      AGE   DURATION
    data-warmup   demo-dataset   Complete   99s   58s

    キャッシュウォームアップは約 58s で完了しました。

ジョブアプリケーションの作成

アプリケーションコンテナまたは機械学習ジョブを使用して、JindoFS 経由で高速化されたデータにアクセスします。demo-dataset PVC は自動的に JindoFS キャッシュから読み取られるため、コードの変更は不要です。alibabacloud.com/fluid-sidecar-target: eci ラベルにより、Fluid Webhook がキャッシングサイドカーを注入します。

  1. job.yaml という名前のファイルを作成します。

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: demo-app
    spec:
      template:
        metadata:
          labels:
            alibabacloud.com/fluid-sidecar-target: eci
          annotations:
            # 必須:仮想ノードスケジューリングを無効化(Fluid と競合 — 制限事項を参照)
            alibabacloud.com/burst-resource: eci_only
            # アプリケーションポッド向けの ECI インスタンス仕様
            k8s.aliyun.com/eci-use-specs: ecs.g7.4xlarge
        spec:
          containers:
            - name: demo
              image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
              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: demo-dataset
      backoffLimit: 4
  2. ジョブを送信します。

    kubectl create -f job.yaml
  3. ジョブ完了後にログを確認します。

    kubectl logs demo-app-jwktf -c demo

    期待される出力:

    1.2G    /data
    
    real    0m0.992s
    user    0m0.004s
    sys     0m0.674s

    ファイルコピーの real 時間は 0m0.992s でした。

クリーンアップ

不要な課金を回避するために、リソースをクリーンアップします。

  1. ジョブを削除します。

    kubectl delete job demo-app
  2. Dataset を削除します。これにより、関連するキャッシュシステムコンポーネントも削除されます。

    重要

    クリーンアップには約 1 分かかります。次の手順に進む前に、すべてのキャッシュポッドが削除されるのをお待ちください。

    kubectl delete dataset demo-dataset
  3. Fluid コントロールプレーンをスケールダウンします。

    kubectl get deployments.apps -n fluid-system | awk 'NR>1 {print $1}' | xargs kubectl scale deployments -n fluid-system --replicas=0

    データアクセスを再度有効にするには、新しい Dataset および JindoRuntime リソースを作成する前に、コントロールプレーンを再度スケールアップしてください。

    kubectl scale -n fluid-system deployment dataset-controller --replicas=1
    kubectl scale -n fluid-system deployment fluid-webhook --replicas=1