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

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

最終更新日:Dec 28, 2024

ワークフローの手順でデータまたは状態を共有する必要がある場合は、ワークフローにボリュームをマウントできます。ワークフローには、OSSボリュームとNASボリュームをマウントできます。 このトピックでは、静的にプロビジョニングされたボリュームをワークフローにマウントする方法について説明します。

使用上の注意

OSSボリュームとNASボリュームは、異なるシナリオで使用されます。さまざまなタイプのボリュームの使用上の注意、制限、および課金については、ストレージの概要を参照してください。

OSSボリュームの使用

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

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

    apiVersion: v1
    kind: Secret
    metadata:
      name: oss-secret
      namespace: argo
    stringData:
      akId: <yourAccessKey ID> # 実際のAccessKey IDに置き換えます。
      akSecret: <yourAccessKey Secret> # 実際のAccessKeyシークレットに置き換えます。
    ---
    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> # 実際のOSSバケット名に置き換えます。
          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: "/"  # OSSバケットのルートディレクトリ。OSSバケットのサブディレクトリを指定することもできます。例: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に変更されます。デフォルトでは、OSS SDKまたはOSSコンソールを使用してアップロードされたファイルのパーミッションマスクは、ossfsでは640です。したがって、読み取りと書き込みを分割する場合は、umaskパラメーターを指定することをお勧めします。

    max_stat_cache_size

    メタデータをメタデータキャッシュに格納できるファイルの最大数。メタデータのキャッシュにより、リスト操作を高速化できます。ただし、OSSコンソール、OSS SDK、ossutilなどのossfs以外の方法を使用してファイルを変更した場合、ファイルのキャッシュされたメタデータは同期的に更新されません。その結果、キャッシュされたメタデータが古くなり、LIST操作の結果が不正確になる可能性があります。

    allow_other

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

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

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

    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の仕様と同じ構文です。
      - 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の仕様と同じ構文です。
      - 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