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

Container Service for Kubernetes:ストレージボリュームの使用

最終更新日:Mar 26, 2026

ボリュームを使用すると、ワークフローのステップ間で共通のマウントパスへの読み取りと書き込みを行うことで、データを共有できます。このトピックでは、既存の Object Storage Service (OSS) ボリュームと File Storage NAS ボリュームをワークフロークラスターにマウントし、Argo Workflows でそれらを参照する方法について説明します。

前提条件

開始する前に、以下のものがあることを確認してください:

  • ACK で作成されたワークフロークラスター

  • ご利用のクラスターと同じリージョンにある OSS バケット (OSS ボリューム用) または NAS ファイルシステム (NAS ボリューム用)

  • ストレージリソースへの読み取り/書き込みアクセス権を持つ AccessKey ID と AccessKey Secret

ユースケース

  • ステップ間での中間データの共有:あるステップ (例:whalesay) からの出力をボリュームに書き込み、後続のステップ (例:print-message) でそれを読み取ります。

  • ワークフローアーティファクトの永続化:ワークフローの完了後、下流工程で使用するために、ワークフローの出力を OSS または NAS に保存します。

背景情報:PV、PVC、および Argo Workflows

PersistentVolume (PV) は、管理者によってプロビジョニングされるクラスターレベルのストレージリソースです。PersistentVolumeClaim (PVC) は、ワークロードによるそのストレージへのリクエストです。Pod とワークフローのステップは、PV を直接参照するのではなく、PVC を参照します。PV は実際のストレージ、PVC はそれを使用するための要求と考えることができます。

ワークフローの YAML は、Kubernetes の Pod 仕様と同じ volumes および volumeMounts 構文を使用するため、既存の Kubernetes の知識を直接適用できます。

OSS ボリュームの使用

OSS ストレージボリュームを使用するための YAML サンプルの表示

次の YAML を適用して、OSS バケット用の Secret、PV、および PVC を作成します。

ossfs オプションの完全なリストについては、「静的にプロビジョニングされた ossfs 1.0 ボリュームのマウント」をご参照ください。

apiVersion: v1
kind: Secret
metadata:
  name: oss-secret          # PV の nodePublishSecretRef によって参照されます
  namespace: default
stringData:
  akId: <your-access-key-id>         # ご利用の AccessKey ID に置き換えてください
  akSecret: <your-access-key-secret> # ご利用の AccessKey Secret に置き換えてください
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-oss
  labels:
    alicloud-pvname: pv-oss  # PVC セレクターがこの PV にバインドするために使用します
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany            # 複数のワークフローステップからの同時アクセスを許可します
  persistentVolumeReclaimPolicy: Retain
  csi:
    driver: ossplugin.csi.alibabacloud.com
    volumeHandle: pv-oss       # 上記の metadata.name と一致させる必要があります
    nodePublishSecretRef:
      name: oss-secret         # AccessKey 認証情報を含む Secret
      namespace: default
    volumeAttributes:
      bucket: <your-bucket-name>  # ご利用の OSS バケット名に置き換えてください
      url: "oss-<region-id>-internal.aliyuncs.com"  # 内部エンドポイントです。<region-id> をご利用のリージョン (例:cn-beijing) に置き換えてください
      otherOpts: "-o umask=022 -o max_stat_cache_size=1000000 -o allow_other"
      path: "/"                # バケットのルートディレクトリです。必要に応じて、サブディレクトリ (例:testdir/testdir1) を使用します
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-oss               # ワークフローの volumes[].persistentVolumeClaim.claimName によって参照されます
  namespace: default
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi
  selector:
    matchLabels:
      alicloud-pvname: pv-oss  # この PVC を pv-oss PV にバインドします

OSS ボリュームのパラメーター

-o key=value 形式を使用して、otherOpts フィールドで追加の ossfs オプションを設定します。

パラメーター説明デフォルト
umaskOSSFS 内のファイルの権限マスクです。umask=022 を設定すると、ファイルの権限は 755 になります。OSS SDK またはコンソール経由でアップロードされたファイルは、OSSFS ではデフォルトで 640 になります。読み取りと書き込みを分離する必要がある場合は、このパラメーターを使用します。
max_stat_cache_sizeキャッシュするファイルメタデータエントリの最大数です。キャッシュにより、ファイルの探索と読み取りが高速化されます。強いデータ整合性が必要な場合 (たとえば、他のプロセスが OSS コンソール、SDK、または ossutil を介してバケットを直接変更する場合) は、0 に設定してキャッシュを無効にします。100,000 エントリ (~40 MB)
allow_other他の OS ユーザーがマウントされたディレクトリにアクセスすることを許可します。これらのユーザーは、ディレクトリ内のファイルにはアクセスできません。

追加のパラメーターについては、「ossfs でサポートされるオプション」をご参照ください。

ワークフローで OSS ストレージボリュームをマウントして使用するための YAML サンプルの表示

次のワークフロー YAML を適用します。これは、whalesay が共有ボリュームにメッセージを書き込み、print-message がそれを読み戻すという 2 つの連続したステップを実行します。

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: volumes-existing-
  namespace: default
spec:
  entrypoint: volumes-existing-example
  volumes:
    # Kubernetes の Pod 仕様と同じ構文
    - name: workdir
      persistentVolumeClaim:
        claimName: pvc-oss  # ステップ 1 で作成された PVC を参照します

  templates:
    - name: volumes-existing-example
      steps:
        - - name: generate
            template: whalesay
        - - name: print
            template: print-message

    - name: whalesay
      container:
        image: docker/whalesay:latest
        command: [sh, -c]
        args: ["echo generating message in volume; cowsay hello world | tee /mnt/vol/hello_world.txt"]
        volumeMounts:
          # Kubernetes の Pod 仕様と同じ構文
          - name: workdir
            mountPath: /mnt/vol

    - name: print-message
      container:
        image: alpine:latest
        command: [sh, -c]
        args: ["echo getting message from volume; find /mnt/vol; cat /mnt/vol/hello_world.txt"]
        volumeMounts:
          - name: workdir
            mountPath: /mnt/vol

NAS ボリュームの使用

NAS ボリュームを使用するための YAML サンプルの表示

次の YAML を適用して、静的にプロビジョニングされた NAS の PV と PVC を作成します。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nas
  labels:
    alicloud-pvname: pv-nas  # PVC セレクターがこの PV にバインドするために使用します
spec:
  capacity:
    storage: 100Gi
  accessModes:
    - ReadWriteMany            # 複数のワークフローステップからの同時アクセスを許可します
  csi:
    driver: nasplugin.csi.alibabacloud.com
    volumeHandle: pv-nas       # 上記の metadata.name と一致させる必要があります
    volumeAttributes:
      server: "<your-nas-filesystem-id>.cn-beijing.nas.aliyuncs.com"  # ご利用の NAS マウントターゲットアドレスに置き換えてください
      path: "/"
  mountOptions:
    - nolock,tcp,noresvport
    - vers=3
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-nas               # ワークフローの volumes[].persistentVolumeClaim.claimName によって参照されます
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 100Gi
  selector:
    matchLabels:
      alicloud-pvname: pv-nas  # この PVC を pv-nas PV にバインドします

ワークフローで NAS ボリュームをマウントして使用するための YAML サンプルの表示

次のワークフロー YAML を適用します。構造は OSS の例と同じで、claimName のみが異なります。

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: volumes-existing-
  namespace: default
spec:
  entrypoint: volumes-existing-example
  volumes:
    # Kubernetes の Pod 仕様と同じ構文
    - name: workdir
      persistentVolumeClaim:
        claimName: pvc-nas  # ステップ 1 で作成された PVC を参照します

  templates:
    - name: volumes-existing-example
      steps:
        - - name: generate
            template: whalesay
        - - name: print
            template: print-message

    - name: whalesay
      container:
        image: docker/whalesay:latest
        command: [sh, -c]
        args: ["echo generating message in volume; cowsay hello world | tee /mnt/vol/hello_world.txt"]
        volumeMounts:
          - name: workdir
            mountPath: /mnt/vol

    - name: print-message
      container:
        image: alpine:latest
        command: [sh, -c]
        args: ["echo getting message from volume; find /mnt/vol; cat /mnt/vol/hello_world.txt"]
        volumeMounts:
          - name: workdir
            mountPath: /mnt/vol

次のステップ