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

Container Service for Kubernetes:ボリューム

最終更新日:Jul 03, 2025

このトピックでは、ワークフロー クラスタにボリュームをマウントし、そのボリュームを使用する方法について説明します。

使用上の注意

ワークフロー クラスタでは、Object Storage Service (OSS) ボリュームと File Storage NAS (NAS) ボリュームを使用できます。

OSS ボリュームの使用

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

    詳細については、「静的にプロビジョニングされた ossfs 1.0 ボリュームをマウントする」をご参照ください。他のタイプのボリュームを作成するには、対応するパラメータを置き換えます。

    [YAML コンテンツを表示するにはクリックします]

    apiVersion: v1
    kind: Secret
    metadata:
      name: oss-secret
      namespace: default
    stringData:
      akId: <yourAccessKey ID> # AccessKey ID に置き換えます。
      akSecret: <yourAccessKey Secret> # AccessKey シークレットに置き換えます。
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-oss
      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: default
        volumeAttributes:
          bucket: <your bucket name> # バケット名に置き換えます。
          url: "oss-<your region id>-internal.aliyuncs.com" # <your region id> を OSS バケットのリージョン ID に置き換えます。たとえば、OSS バケットが中国 (北京) リージョンに作成されている場合、リージョン ID は oss-cn-beijing-internal.aliyuncs.com です。
          otherOpts: "-o umask=022 -o max_stat_cache_size=1000000 -o allow_other"
          path: "/"  # OSS バケットのルートディレクトリ。OSS バケットのサブディレクトリを指定することもできます。例: testdir/testdir1。
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-oss
      namespace: default
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 5Gi
      selector:
        matchLabels:
          alicloud-pvname: pv-oss

    [オプション パラメータ]:

    -o *** -o *** 形式で、OSS ボリュームのカスタム パラメータ (例: -o umask=022 -o max_stat_cache_size=1000000 -o allow_other) を設定できます。

    • umask: OSSFS 内のファイルのパーミッション マスクを変更します。たとえば、umask=022 を設定すると、OSSFS 内のファイルのパーミッション マスクが 755 に変更されます。デフォルトでは、OSS SDK またはコンソールを使用してアップロードされたファイルのパーミッション マスクは、OSSFS では 640 です。したがって、読み取りと書き込みを分割する場合には、umask コマンドを使用することをお勧めします。

    • max_stat_cache_size: キャッシュされるファイル メタデータの最大数を定義するために、ファイル メタデータ キャッシュ容量を指定します。デフォルト: 100,000 エントリ (~40MB メモリ)。

      メタデータのキャッシュにより、ファイルのトラバーサルと読み取り操作が大幅に高速化されます。ただし、OSS、SDK、コンソール、ossutil などの代替方法で行われた変更により、メタデータが古くなる可能性があります。強力なデータ整合性要件の場合は、この値を 0 に設定してメタデータ キャッシュを無効にします。

    • allow_other: 他のユーザーがマウントされたディレクトリにアクセスできるようにします。ただし、これらのユーザーはディレクトリ内のファイルにアクセスできません。

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

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

    [YAML コンテンツを表示するにはクリックします]

    apiVersion: argoproj.io/v1alpha1
    kind: Workflow
    metadata:
      generateName: volumes-existing-
      namespace: default
    spec:
      entrypoint: volumes-existing-example
      volumes:
      # my-existing-volume を volumes-existing-example テンプレートへの引数として渡します。
      # k8s Pod の仕様と同じ構文です。
      - 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: 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

NAS ボリュームの使用

  1. 静的にプロビジョニングされた NAS ボリュームを作成するには、次のサンプルコードを使用します。

    [YAML コンテンツを表示するにはクリックします]

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-nas
      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
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 100Gi
      selector:
        matchLabels:
          alicloud-pvname: pv-nas
  2. NAS ボリュームを使用するワークフローを作成するには、次のサンプルコードを使用します。

    [YAML コンテンツを表示するにはクリックします]

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