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

Container Compute Service:ボリュームの使用

最終更新日:Mar 26, 2026

ワークフローステップ間でファイルやステータスを交換する必要がある場合は、共有ボリュームをマウントして、各ステップが同じパスから読み書きするようにします。このドキュメントでは、静的プロビジョニングされた OSS ボリュームと NAS ボリュームを Argo Workflows ステップにマウントする方法について説明します。

OSS と NAS の使い分け

OSS ボリュームと NAS ボリュームはどちらも ReadWriteMany をサポートしているため、複数のステップが同時にアクセスできます。ワークロードに基づいて選択してください。

  • OSS ボリューム:オブジェクトベースのワークロードに最適です。個々のファイルの読み書き、モデルアーティファクトの共有、パイプライン出力の保存などに使用します。Object Storage Service (OSS) によってバックアップされます。

  • NAS ボリューム:共有スクラッチスペースや、標準的なファイル権限とディレクトリ操作を必要とするワークロードなど、ファイルシステムセマンティクスを必要とする POSIX 準拠のワークロードに最適です。Apsara File Storage NAS によってバックアップされます。

使用上の注意、制限事項、および課金の詳細については、「ストレージの概要」をご参照ください。

前提条件

開始する前に、次のことを確認してください。

  • argo 名前空間が作成された Argo Workflows クラスターがあること

  • マウントするボリュームタイプに応じて、OSS バケットまたは NAS ファイルシステムがあること

  • OSS バケットへの読み取り/書き込みアクセス権を持つ Alibaba Cloud アカウントの AccessKey ID と AccessKey Secret があること (OSS ボリュームにのみ必要です。NAS ボリュームはファイルシステムレベルで認証されるため、AccessKey は必要ありません)

OSS ボリュームの使用

ステップ 1: PV と PVC の作成

次の YAML を使用して、Secret、PersistentVolume (PV)、および PersistentVolumeClaim (PVC) を作成します。適用する前に、プレースホルダー値を置き換えてください。

OSS の静的プロビジョニングの詳細については、「静的プロビジョニングされた OSS ボリュームのマウント」をご参照ください。

apiVersion: v1
kind: Secret
metadata:
  name: oss-secret
  namespace: argo
stringData:
  akId: <your-access-key-id>
  akSecret: <your-access-key-secret>
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-oss
  namespace: argo
  labels:
    alicloud-pvname: pv-oss
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  csi:
    driver: ossplugin.csi.alibabacloud.com
    volumeHandle: pv-oss
    nodePublishSecretRef:
      name: oss-secret
      namespace: argo
    volumeAttributes:
      bucket: <your-bucket-name>
      url: "oss-<your-region-id>-internal.aliyuncs.com"  # e.g., oss-cn-beijing-internal.aliyuncs.com
      otherOpts: "-o max_stat_cache_size=0 -o allow_other -o multipart_size=30 -o parallel_count=20"
      path: "/"  # ルートディレクトリ。サブディレクトリを使用するには、testdir/testdir1 のようなパスを指定します。
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-oss
  namespace: argo
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi
  selector:
    matchLabels:
      alicloud-pvname: pv-oss

次のプレースホルダーを置き換えてください。

プレースホルダー説明
<your-access-key-id>OSS バケットへの読み取り/書き込みアクセス権を持つ AccessKey IDLTAI5tXxx
<your-access-key-secret>AccessKey ID に対応する AccessKey SecretxXxXxXx
<your-bucket-name>OSS バケットの名前my-workflow-bucket
<your-region-id>OSS バケットのリージョン IDcn-beijing

オプションの ossfs パラメーター

otherOpts フィールドは、-o <option> -o <option> の形式で ossfs マウントオプションを受け入れます。次のオプションが一般的に使用されます。

パラメーター説明使用する状況
umaskossfs 内のファイルの権限マスクを設定します。たとえば、umask=022 は権限 755 になります。デフォルトは 640 です。ワークフローによって書き込まれたファイルに異なるプロセスが読み取りまたは実行アクセスを必要とする場合 (ステップ間で読み取りと書き込みを分割する場合など) にこれを設定します。
max_stat_cache_sizeossfs がローカルにキャッシュするファイルのメタデータの最大数。キャッシュにより LIST 操作が高速化されます。ossfs の外部でファイルが変更された場合 (たとえば、OSS コンソール、OSS SDK、または ossutil を介して) は、キャッシュを無効にするために 0 に設定します。これを設定しないと、キャッシュされたメタデータが古くなり、LIST 結果が不正確になる可能性があります。
allow_other他のユーザーがマウントされたディレクトリにアクセスできるようにします (ただし、内部のファイルにはアクセスできません)。他のユーザーがマウントされたディレクトリにアクセスする必要がある場合にこれを設定します。

ossfs オプションの全リストについては、「オプション」をご参照ください。

ステップ 2: OSS ボリュームを使用するワークフローの作成

次のワークフローは、PVC を共有ボリュームとしてマウントします。generate ステップはボリュームにファイルを書き込み、print ステップはそれを読み戻します。これにより、ステップ間のデータ共有が示されます。

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: volumes-existing-
  namespace: argo
spec:
  entrypoint: volumes-existing-example
  volumes:
    # Kubernetes Pod の仕様と同じ構文。
    - name: workdir
      persistentVolumeClaim:
        claimName: pvc-nas

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

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

    - name: print-message
      container:
        image: mirrors-ssl.aliyuncs.com/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 ボリュームの使用

ステップ 1: PV と PVC の作成

次の YAML を使用して、PersistentVolume (PV) と PersistentVolumeClaim (PVC) を作成します。NAS ボリュームはファイルシステムレベルで認証されるため、Secret は必要ありません。

NAS の静的プロビジョニングの詳細については、「静的プロビジョニングされた NAS ボリュームのマウント」をご参照ください。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-nas
  namespace: argo
  labels:
    alicloud-pvname: pv-nas
spec:
  capacity:
    storage: 100Gi
  accessModes:
    - ReadWriteMany
  csi:
    driver: nasplugin.csi.alibabacloud.com
    volumeHandle: pv-nas
    volumeAttributes:
      server: "<your-nas-filesystem-id>.cn-beijing.nas.aliyuncs.com"
      path: "/"
  mountOptions:
    - nolock,tcp,noresvport
    - vers=3
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc-nas
  namespace: argo
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 100Gi
  selector:
    matchLabels:
      alicloud-pvname: pv-nas

<your-nas-filesystem-id> をご利用の NAS ファイルシステムの ID に置き換えてください。サーバーアドレスのリージョンは、NAS ファイルシステムのリージョンと一致している必要があります (例: 中国 (北京) の場合は cn-beijing)。

ステップ 2: NAS ボリュームを使用するワークフローの作成

次のワークフローは、OSS の例と同じ 2 ステップパターンを使用しますが、代わりに NAS PVC をマウントします。

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: volumes-existing-
  namespace: argo
spec:
  entrypoint: volumes-existing-example
  volumes:
    # Kubernetes Pod spec と同じ構文です。
    - name: workdir
      persistentVolumeClaim:
        claimName: pvc-nas

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

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

    - name: print-message
      container:
        image: mirrors-ssl.aliyuncs.com/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

次のステップ