使用存储卷

如果工作流的多个步骤之间需要共享数据或状态,您可以在集群中挂载存储卷。目前支持OSS存储卷、NAS存储卷。本文结合示例介绍如何创建静态存储卷,并指定示例工作流使用该存储卷。

使用说明

OSS存储卷、NAS存储卷侧重的使用场景不同。在不同存储卷有对应的使用限制和说明,也会产生对应的资源费用,请参见存储概述

使用示例

使用OSS存储卷

  1. 使用以下示例代码,创建OSS存储卷。

    更多信息,请参见静态挂载OSS存储卷

    apiVersion: v1
    kind: Secret
    metadata:
      name: oss-secret
      namespace: argo
    stringData:
      akId: <yourAccessKey ID> # 替换为实际的AccessKeyID。
      akSecret: <yourAccessKey Secret> # 替换为实际的AccessKeySecret。
    ---
    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> # 替换为实际的Bucket名称。
          url: "oss-<your region id>-internal.aliyuncs.com" # 替换<your region id>为OSS的地域ID,例如华北2(北京)地域为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: "/"  #挂载Bucket根目录,也可以设置此参数挂载Bucket下子目录,例如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:
      # Pass my-existing-volume as an argument to the volumes-existing-example template.
      # Same syntax as 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 Name保持一致。
        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:
      # Pass my-existing-volume as an argument to the volumes-existing-example template.
      # Same syntax as 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