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

Container Service for Kubernetes:名前空間をまたいだデータセットの共有

最終更新日:Mar 26, 2026

複数のチームが個別の Kubernetes 名前空間で AI/ML ワークロードを実行する場合、各チームが独自のキャッシュを作成すると、ストレージを浪費し、データアクセスが遅くなります。Fluid を使用すると、ソース名前空間にデータセットを一度キャッシュし、そのキャッシュを任意の数の参照名前空間と共有できます。これにより、キャッシュの重複や余分なランタイムのオーバーヘッドがなくなります。

この設定では、2つの名前空間ロールを使用します:

  • ソース名前空間 (share):Dataset とキャッシュランタイム (JindoRuntime または JuiceFSRuntime) を保持します。実際のデータキャッシュはここに存在します。

  • 参照名前空間 (ref):dataset:// マウントポイントを使用してソース Dataset を指す参照 Dataset を保持します。この名前空間の Pod は、独自のキャッシュランタイムを実行せずに共有キャッシュから読み取ります。

仕組み

Fluid は ThinRuntime を使用して、ある名前空間の Dataset を別の名前空間の Dataset にリンクします。参照名前空間の Pod がデータを読み取ると、リクエストはソース名前空間のキャッシュランタイムにルーティングされます。参照名前空間に追加のキャッシュランタイムは作成されません。

前提条件

開始する前に、以下が準備できていることを確認してください:

  • Kubernetes 1.18 以降を実行している ACK Pro マネージドクラスターで、ContainerOS 以外のノードプールを使用していること(ack-fluid コンポーネントは ContainerOS をサポートしていません)。詳細については、「ACK Pro マネージドクラスターの作成」をご参照ください。

  • ack-fluid コンポーネントがデプロイされたクラウドネイティブ AI スイートがインストールされていること:

    • クラウドネイティブ AI スイートをまだインストールしていない場合は、インストール時に [Fluid アクセラレーション] を有効にします。詳細については、「クラウドネイティブ AI スイートをデプロイする」をご参照ください。

    • クラウドネイティブ AI スイートがすでにインストールされている場合は、ACK コンソール[Cloud-native AI Suite] ページに移動し、ack-fluid コンポーネントをデプロイします。

    • オープンソースの Fluid がすでにインストールされている場合は、ack-fluid コンポーネントをデプロイする前にアンインストールしてください。

  • お使いの ACK Pro マネージドクラスターに接続された kubectl クライアント。詳細については、「kubectl を使用したクラスターへの接続」をご参照ください。

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

  1. テストデータセット (約 2 GB) をダウンロードします。

  2. データセットを ossutil を使用して Object Storage Service (OSS) バケットにアップロードします。詳細については、「ossutil のインストール」をご参照ください。

ステップ 2:共有データセットとランタイムの作成

共有 Dataset とランタイムを保持するために、share という名前の名前空間を作成します。ご利用のストレージ設定に合ったランタイムタイプを選択してください。

JindoRuntime

  1. share 名前空間を作成します:

    kubectl create ns share
  2. ご利用の OSS バケットの AccessKey ペアを保存するための Secret を作成します:

    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: Secret
    metadata:
      name: dataset-secret
      namespace: share
    stringData:
      fs.oss.accessKeyId: <YourAccessKey ID>
      fs.oss.accessKeySecret: <YourAccessKey Secret>
    EOF

    <YourAccessKey ID><YourAccessKey Secret> をご利用の AccessKey ID と AccessKey Secret に置き換えてください。詳細については、「AccessKey ペアの取得」をご参照ください。

  3. 以下の内容で shared-dataset.yaml という名前のファイルを作成します:

    # Dataset: OSS (基盤となるファイルシステム、UFS) に保存されているデータを記述します。
    apiVersion: data.fluid.io/v1alpha1
    kind: Dataset
    metadata:
      name: shared-dataset
      namespace: share
    spec:
      mounts:
      - mountPoint: oss://<oss_bucket>/<bucket_dir> # ご利用の OSS バケット内のデータへのパス。
        options:
          fs.oss.endpoint: <oss_endpoint> # ご利用の OSS バケットのエンドポイント。
        name: hadoop
        path: "/"
        encryptOptions:
          - name: fs.oss.accessKeyId
            valueFrom:
              secretKeyRef:
                name: dataset-secret
                key: fs.oss.accessKeyId
          - name: fs.oss.accessKeySecret
            valueFrom:
              secretKeyRef:
                name: dataset-secret
                key: fs.oss.accessKeySecret
    ---
    # JindoRuntime: クラスター内で JindoFS ベースのデータキャッシングを有効にします。
    apiVersion: data.fluid.io/v1alpha1
    kind: JindoRuntime
    metadata:
      name: shared-dataset
      namespace: share
    spec:
      replicas: 1
      tieredstore:
        levels:
          - mediumtype: MEM
            path: /dev/shm
            quota: 4Gi
            high: "0.95"
            low: "0.7"

    Dataset と JindoRuntime の設定に関する詳細については、「JindoFS を使用した OSS へのアクセス高速化」をご参照ください。

  4. 構成を適用します:

    kubectl apply -f shared-dataset.yaml

    期待される出力:

    dataset.data.fluid.io/shared-dataset created
    jindoruntime.data.fluid.io/shared-dataset created
  5. 数分待ってから、Dataset がバインドされ、JindoRuntime が準備完了であることを確認します:

    kubectl get dataset,jindoruntime -n share

    期待される出力:

    NAME                                   UFS TOTAL SIZE   CACHED   CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
    dataset.data.fluid.io/shared-dataset   1.16GiB          0.00B    4.00GiB          0.0%                Bound   4m1s
    
    NAME                                        MASTER PHASE   WORKER PHASE   FUSE PHASE   AGE
    jindoruntime.data.fluid.io/shared-dataset   Ready          Ready          Ready        15m

    すべてのフェーズが Ready と表示されたら、Dataset はバインドされ、JindoRuntime は準備完了です。

JuiceFSRuntime

  1. share 名前空間を作成します:

    kubectl create ns share
  2. ご利用の OSS バケットと JuiceFS ボリュームの認証情報を保存するための Secret を作成します:

    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: Secret
    metadata:
      name: dataset-secret
      namespace: share
    type: Opaque
    stringData:
      token: <JUICEFS_VOLUME_TOKEN>
      access-key: <OSS_ACCESS_KEY>
      secret-key: <OSS_SECRET_KEY>
    EOF

    <OSS_ACCESS_KEY><OSS_SECRET_KEY> をご利用の AccessKey ID と AccessKey Secret に置き換えてください。詳細については、「AccessKey ペアの取得」をご参照ください。

  3. 以下の内容で shared-dataset.yaml という名前のファイルを作成します:

    # Dataset: OSS (基盤となるファイルシステム、UFS) に保存されているデータを記述します。
    apiVersion: data.fluid.io/v1alpha1
    kind: Dataset
    metadata:
      name: shared-dataset
      namespace: share
    spec:
      accessModes: ["ReadOnlyMany"]
      sharedEncryptOptions:
      - name: access-key
        valueFrom:
          secretKeyRef:
            name: dataset-secret
            key: access-key
      - name: secret-key
        valueFrom:
          secretKeyRef:
            name: dataset-secret
            key: secret-key
      - name: token
        valueFrom:
          secretKeyRef:
            name: dataset-secret
            key: token
      mounts:
      - name: <JUICEFS_VOLUME_NAME>
        mountPoint: juicefs:/// # JuiceFS ファイルシステムのマウントポイント。
        options:
          bucket: https://<OSS_BUCKET_NAME>.oss-<REGION_ID>.aliyuncs.com # 例:https://mybucket.oss-cn-beijing-internal.aliyuncs.com
    ---
    # JuiceFSRuntime: クラスター内で JuiceFS ベースのデータキャッシングを有効にします。
    apiVersion: data.fluid.io/v1alpha1
    kind: JuiceFSRuntime
    metadata:
      name: shared-dataset
      namespace: share
    spec:
      replicas: 1
      tieredstore:
        levels:
        - mediumtype: MEM
          path: /dev/shm
          quota: 1Gi
          high: "0.95"
          low: "0.7"
  4. 構成を適用します:

    kubectl apply -f shared-dataset.yaml

    期待される出力:

    dataset.data.fluid.io/shared-dataset created
    juicefsruntime.data.fluid.io/shared-dataset created
  5. 数分待ってから、Dataset がバインドされていることを確認します:

    kubectl get dataset,juicefsruntime -n share

    期待される出力:

    NAME                                   UFS TOTAL SIZE   CACHED   CACHE CAPACITY   CACHED PERCENTAGE   PHASE   AGE
    dataset.data.fluid.io/shared-dataset   2.32GiB          0.00B    4.00GiB          0.0%                Bound   3d16h
    
    NAME                                          WORKER PHASE   FUSE PHASE   AGE
    juicefsruntime.data.fluid.io/shared-dataset                               3m50s

ステップ 3:参照データセットと Pod の作成

  1. ref 名前空間を作成します:

    kubectl create ns ref
  2. 以下の内容で ref-dataset.yaml という名前のファイルを作成します:

    • dataset:// — この Dataset が別の Dataset を参照することを示すプロトコルプレフィックス。

    • share — ソース Dataset が存在する名前空間。

    • shared-dataset — ソース Dataset の名前。

    重要

    mountPoint の値は dataset:// プロトコルプレフィックスを使用する必要があります。他のフォーマットを使用するとデータセットの作成が失敗し、spec セクションのフィールドは効果がありません。

    apiVersion: data.fluid.io/v1alpha1
    kind: Dataset
    metadata:
      name: ref-dataset
      namespace: ref
    spec:
      mounts:
      - mountPoint: dataset://share/shared-dataset

    mountPoint の値は dataset://<namespace>/<dataset-name> のフォーマットに従います:

  3. 参照 Dataset を適用します:

    kubectl apply -f ref-dataset.yaml
  4. 以下の内容で app.yaml という名前のファイルを作成します。これにより、ref 名前空間に Pod が作成され、参照 Dataset が /data にマウントされます。

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      namespace: ref
    spec:
      containers:
      - name: nginx
        image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
        command:
        - "bash"
        - "-c"
        - "sleep inf"
        volumeMounts:
        - mountPath: /data
          name: ref-data
      volumes:
      - name: ref-data
        persistentVolumeClaim:
          claimName: ref-dataset
  5. Pod をデプロイします:

    kubectl apply -f app.yaml
  6. Pod が実行中であることを確認します:

    kubectl get pods -n ref -o wide

    Pod のステータスが Running と表示されたら、準備完了です。

ステップ 4:データ共有とキャッシングのテスト

  1. 両方の名前空間の Pod を確認します:

    kubectl get pods -n share
    kubectl get pods -n ref

    期待される出力:

    # share 名前空間の Pod
    NAME                                READY   STATUS    RESTARTS   AGE
    shared-dataset-jindofs-fuse-ftkb5   1/1     Running   0          44s
    shared-dataset-jindofs-master-0     1/1     Running   0          9m13s
    shared-dataset-jindofs-worker-0     1/1     Running   0          9m13s
    
    # ref 名前空間の Pod
    NAME    READY   STATUS    RESTARTS   AGE
    nginx   1/1     Running   0          118s

    share 名前空間では3つのキャッシュ関連 Pod が実行されています。ref 名前空間には nginx Pod のみがあり、キャッシュランタイム Pod は作成されていません。

  2. nginx Pod にログインします:

    kubectl exec nginx -n ref -it -- sh
  3. /data ディレクトリ内のファイルをクエリして、データ共有をテストします:

    du -sh /data/wwm_uncased_L-24_H-1024_A-16.zip

    期待される出力:

    1.3G    /data/wwm_uncased_L-24_H-1024_A-16.zip

    名前空間 ref 内の nginx Pod は、名前空間 share に保存されたファイルにアクセスできます。

  4. ファイルを2回読み取ってデータキャッシングをテストします:

    以下のレイテンシ値は参考用です。実際の結果はご利用の環境によって異なります。
    # 1回目の読み取り — データは OSS からフェッチされ、キャッシュに書き込まれます
    time cat /data/wwm_uncased_L-24_H-1024_A-16.zip > /dev/null
    real    0m1.166s
    user    0m0.007s
    sys     0m1.154s
    
    # 2回目の読み取り — データはキャッシュから提供されます
    time cat /data/wwm_uncased_L-24_H-1024_A-16.zip > /dev/null
    real    0m0.289s
    user    0m0.011s
    sys     0m0.274s

    2回目の読み取りは、1回目の読み取りの 1.166 秒に対して 0.289 秒で完了し、最初のアクセス後にファイルがキャッシュされたことを確認できます。