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

Container Service for Kubernetes:ボリュームの使用

最終更新日:Dec 19, 2025

クラスターにボリュームをマウントして、ワークフローの複数のステップ間でデータや状態を共有できます。 Argo Workflows は、Object Storage Service (OSS) ボリューム、NAS ボリュームをサポートしています。 この Topic では、静的プロビジョニングボリュームを作成し、それを使用するようにサンプルワークフローを構成する方法について説明します。

注意事項

OSS ボリューム、NAS ボリュームは、それぞれ異なるシナリオに適しています。

ボリューム

シナリオ

OSS ボリューム

  • データ共有シナリオ

    OSS は共有ストレージです。 複数の Pod が同じデータにアクセスできます。 OSS 内のデータは、Pod が削除されても削除されません。 Pod 間のデータ共有に OSS を使用できます。

  • 設定ファイル、イメージ、各種ビデオメディアファイルなどのファイルが関わる読み取り集中型のシナリオ

    OSS は、設定ファイル、イメージ、オーディオ、ビデオファイルなどの非構造化データの保存に適しています。 ビジネスでファイルコンテンツの変更が必要な場合は、POSIX 操作との互換性が高い ossfs 1.0 ボリュームを選択してください。

  • AI 推論やデータ分析などの高同時実行バッチ処理シナリオ

    OSS の高いサーバー側帯域幅は、高同時実行バッチ処理に適しています。 例としては、AI トレーニング、データ分析、自動運転などの新しい計算集約型のワークロードやワークフローが挙げられます。 これらのワークロードは、主にシーケンシャルおよびランダム読み取り、シーケンシャル書き込み (追加のみ) を伴います。 より高いスループットを得るには、ossfs 2.0 ボリュームを選択してください。

  • 認証とディザスタリカバリに対する要件が高いデータセキュリティシナリオ

    OSS は、ディザスタリカバリのためのゾーン冗長ストレージと、KMS などのサーバー側暗号化機能をサポートしています。 また、MD5 検証をサポートし、データのアップロードとダウンロードの完全性を保証します。 さらに、Resource Access Management (RAM) と OSS バケットポリシーという 2 つのオブジェクトレベルの認証方式をサポートしています。

NAS ボリューム

  • データ共有シナリオ

    NAS は複数の Pod からの同一データへの同時アクセスをサポートします。データを共有する必要がある場合は、NAS の使用を推奨します。

  • ビッグデータ分析シナリオ

    NAS は高いデータスループットを提供し、共有ストレージにアクセスする大規模なバッチジョブの要件を満たすことができます。

  • Web アプリケーションシナリオ

    Web アプリケーションやコンテンツ管理システムにストレージサポートを提供します。

  • ログ保存シナリオ

    ログをストレージボリュームに保存する場合は、NAS データボリュームの使用を推奨します。

詳細については、「NAS ストレージボリュームの概要」をご参照ください。

CPFS ボリューム

  • 遺伝子コンピューティング、ビッグデータ分析シナリオ

    CPFS が提供する高スループットは、ストレージに対する大規模クラスターの超高性能要件を満たします。

  • データキャッシュアクセスシナリオ

    低速ストレージのデータをまず CPFS ボリュームにダウンロードし、その後アプリケーションから高速でアクセスさせることができます。

詳細については、「CPFS 2.0 静的ボリューム」および「CNFS を使用した CPFS 分離ストレージボリュームの管理」をご参照ください。

各ボリュームタイプには特定の制限とガイドラインがあり、リソースコストが発生する場合もあります。 詳細については、次の Topic をご参照ください:

OSS ボリュームの使用

  1. 次のサンプルコードを使用して OSS ボリュームを作成します。

    詳細については、「ossfs 1.0 静的プロビジョニングボリュームの使用」をご参照ください。

    apiVersion: v1
    kind: Secret
    metadata:
      name: oss-secret
      namespace: argo
    stringData:
      akId: <yourAccessKey ID> # ご利用の AccessKey ID と置き換えます。
      akSecret: <yourAccessKey Secret> # ご利用の AccessKey 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   # PV 名と同じにする必要があります。
        nodePublishSecretRef:
          name: oss-secret
          namespace: argo
        volumeAttributes:
          bucket: <your bucket name> # ご利用のバケット名と置き換えます。
          url: "oss-<your region id>-internal.aliyuncs.com" # <your region id> を OSS バケットのリージョン ID に置き換えます。たとえば、中国 (北京) リージョンのエンドポイントは oss-cn-beijing-internal.aliyuncs.com です。
          otherOpts: "-o max_stat_cache_size=0 -o allow_other -o multipart_size=30 -o parallel_count=20" # -o max_stat_cache_size=0
          path: "/"  # バケットのルートディレクトリをマウントします。このパラメーターを設定して、サブディレクトリをマウントすることもできます。例: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

    オプションパラメーター

    OSS ボリュームのカスタムパラメーターを -o *** -o *** のフォーマットで指定できます。例:-o umask=022 -o max_stat_cache_size=0 -o allow_other

    パラメーター

    説明

    umask

    ossfs ファイルの読み取り権限を変更します。 たとえば、umask=022 と設定すると、ossfs ファイルの権限は 755 に変更されます。 SDK、OSS コンソール、またはその他のメソッドを使用してアップロードされたファイルのデフォルト権限は、ossfs では 640 です。 したがって、読み書き分離シナリオでは umask 権限を設定してください。

    max_stat_cache_size

    ファイルメタデータのキャッシュサイズを指定します。これにより、キャッシュできるファイルメタデータの数が決まります。 メタデータキャッシングにより、ls 操作を高速化できます。 ただし、OSS コンソール、SDK、ossutil などの他のメソッドを使用してファイルを変更した場合、メタデータが時間内に更新されないことがあります。

    allow_other

    コンピューター上の他のユーザーにマウントされたフォルダへのアクセス権を付与しますが、その中のファイルへのアクセス権は付与しません。

    オプションパラメーターの詳細については、「オプション」をご参照ください。

  2. 次のサンプルコードを使用して、ボリュームを使用するサンプルワークフローを作成します。

    apiVersion: argoproj.io/v1alpha1
    kind: Workflow
    metadata:
      generateName: volumes-existing-
      namespace: argo
    spec:
      entrypoint: volumes-existing-example
      volumes:
      # my-existing-volume を volumes-existing-example テンプレートに引数として渡します。
      # k8s Pod spec と同じ構文です。
      - name: workdir
        persistentVolumeClaim:
          claimName: pvc-oss
    
      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. 次のサンプルコードを使用して、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   # PV 名と同じにする必要があります。
        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
  2. 次のサンプルコードを使用して、ワークフローで NAS をマウントして使用します。

    apiVersion: argoproj.io/v1alpha1
    kind: Workflow
    metadata:
      generateName: volumes-existing-
      namespace: argo
    spec:
      entrypoint: volumes-existing-example
      volumes:
      # my-existing-volume を volumes-existing-example テンプレートに引数として渡します。
      # k8s 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

CPFS 2.0 ボリュームの使用

  1. 次のコマンドを実行して、CPFS 2.0 共有ボリュームを作成します。

    詳細については、「静的プロビジョニング CPFS 汎用ボリュームの使用」をご参照ください。

    cat << EOF | kubectl apply -f -
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-cpfs
      namespace: argo
      labels:
        alicloud-pvname: pv-cpfs
    spec:
      accessModes:
      - ReadWriteOnce
      capacity:
        storage: 1000Gi
      csi:
        driver: nasplugin.csi.alibabacloud.com
        volumeAttributes:
          mountProtocol: cpfs-nfs             # NFS プロトコルを使用してボリュームをマウントします。
          path: "/share"                      # マウントディレクトリは /share プレフィックスで始まる必要があります。
          volumeAs: subpath
          server: "<your cpfs id, e.g cpfs-****>.<regionID>.cpfs.aliyuncs.com"      # マウントポイントのドメイン名。
        volumeHandle: pv-cpfs # PV 名と同じにする必要があります。
      mountOptions:
      - rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport
      - vers=3
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-cpfs
      namespace: argo
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 1000Gi
      selector:
        matchLabels:
          alicloud-pvname: pv-cpfs
    EOF
  2. 次のサンプルコードを使用して、ワークフローで CPFS 2.0 をマウントして使用します。

    apiVersion: argoproj.io/v1alpha1
    kind: Workflow
    metadata:
      generateName: volumes-existing-
      namespace: argo
    spec:
      entrypoint: volumes-existing-example
      volumes:
      # my-existing-volume を volumes-existing-example テンプレートに引数として渡します。
      # k8s Pod spec と同じ構文です。
      - name: workdir
        persistentVolumeClaim:
          claimName: pvc-cpfs
    
      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