クラスターにボリュームをマウントして、ワークフローの複数のステップ間でデータや状態を共有できます。 Argo Workflows は、Object Storage Service (OSS) ボリューム、NAS ボリュームをサポートしています。 この Topic では、静的プロビジョニングボリュームを作成し、それを使用するようにサンプルワークフローを構成する方法について説明します。
注意事項
OSS ボリューム、NAS ボリュームは、それぞれ異なるシナリオに適しています。
ボリューム | シナリオ |
OSS ボリューム |
|
NAS ボリューム |
詳細については、「NAS ストレージボリュームの概要」をご参照ください。 |
CPFS ボリューム |
詳細については、「CPFS 2.0 静的ボリューム」および「CNFS を使用した CPFS 分離ストレージボリュームの管理」をご参照ください。 |
各ボリュームタイプには特定の制限とガイドラインがあり、リソースコストが発生する場合もあります。 詳細については、次の Topic をご参照ください:
OSS ボリューム: OSS ボリューム、ossfs 1.0 静的プロビジョニングボリュームの使用
NAS ボリューム: NAS ボリューム、静的プロビジョニング NAS ボリュームの使用
CPFS ボリューム: CPFS 汎用ボリューム、静的プロビジョニング CPFS 汎用ボリュームの使用
OSS ボリュームの使用
次のサンプルコードを使用して 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
コンピューター上の他のユーザーにマウントされたフォルダへのアクセス権を付与しますが、その中のファイルへのアクセス権は付与しません。
オプションパラメーターの詳細については、「オプション」をご参照ください。
次のサンプルコードを使用して、ボリュームを使用するサンプルワークフローを作成します。
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 ボリュームの使用
次のサンプルコードを使用して、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次のサンプルコードを使用して、ワークフローで 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 ボリュームの使用
次のコマンドを実行して、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次のサンプルコードを使用して、ワークフローで 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