ワークフローステップ間でファイルやステータスを交換する必要がある場合は、共有ボリュームをマウントして、各ステップが同じパスから読み書きするようにします。このドキュメントでは、静的プロビジョニングされた OSS ボリュームと NAS ボリュームを Argo Workflows ステップにマウントする方法について説明します。
OSS と NAS の使い分け
OSS ボリュームと NAS ボリュームはどちらも ReadWriteMany をサポートしているため、複数のステップが同時にアクセスできます。ワークロードに基づいて選択してください。
OSS ボリューム:オブジェクトベースのワークロードに最適です。個々のファイルの読み書き、モデルアーティファクトの共有、パイプライン出力の保存などに使用します。Object Storage Service (OSS) によってバックアップされます。
NAS ボリューム:共有スクラッチスペースや、標準的なファイル権限とディレクトリ操作を必要とするワークロードなど、ファイルシステムセマンティクスを必要とする POSIX 準拠のワークロードに最適です。Apsara File Storage NAS によってバックアップされます。
使用上の注意、制限事項、および課金の詳細については、「ストレージの概要」をご参照ください。
前提条件
開始する前に、次のことを確認してください。
argo名前空間が作成された Argo Workflows クラスターがあることマウントするボリュームタイプに応じて、OSS バケットまたは NAS ファイルシステムがあること
OSS バケットへの読み取り/書き込みアクセス権を持つ Alibaba Cloud アカウントの AccessKey ID と AccessKey Secret があること (OSS ボリュームにのみ必要です。NAS ボリュームはファイルシステムレベルで認証されるため、AccessKey は必要ありません)
OSS ボリュームの使用
ステップ 1: PV と PVC の作成
次の YAML を使用して、Secret、PersistentVolume (PV)、および PersistentVolumeClaim (PVC) を作成します。適用する前に、プレースホルダー値を置き換えてください。
OSS の静的プロビジョニングの詳細については、「静的プロビジョニングされた OSS ボリュームのマウント」をご参照ください。
apiVersion: v1
kind: Secret
metadata:
name: oss-secret
namespace: argo
stringData:
akId: <your-access-key-id>
akSecret: <your-access-key-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
nodePublishSecretRef:
name: oss-secret
namespace: argo
volumeAttributes:
bucket: <your-bucket-name>
url: "oss-<your-region-id>-internal.aliyuncs.com" # e.g., oss-cn-beijing-internal.aliyuncs.com
otherOpts: "-o max_stat_cache_size=0 -o allow_other -o multipart_size=30 -o parallel_count=20"
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次のプレースホルダーを置き換えてください。
| プレースホルダー | 説明 | 例 |
|---|---|---|
<your-access-key-id> | OSS バケットへの読み取り/書き込みアクセス権を持つ AccessKey ID | LTAI5tXxx |
<your-access-key-secret> | AccessKey ID に対応する AccessKey Secret | xXxXxXx |
<your-bucket-name> | OSS バケットの名前 | my-workflow-bucket |
<your-region-id> | OSS バケットのリージョン ID | cn-beijing |
オプションの ossfs パラメーター
otherOpts フィールドは、-o <option> -o <option> の形式で ossfs マウントオプションを受け入れます。次のオプションが一般的に使用されます。
| パラメーター | 説明 | 使用する状況 |
|---|---|---|
umask | ossfs 内のファイルの権限マスクを設定します。たとえば、umask=022 は権限 755 になります。デフォルトは 640 です。 | ワークフローによって書き込まれたファイルに異なるプロセスが読み取りまたは実行アクセスを必要とする場合 (ステップ間で読み取りと書き込みを分割する場合など) にこれを設定します。 |
max_stat_cache_size | ossfs がローカルにキャッシュするファイルのメタデータの最大数。キャッシュにより LIST 操作が高速化されます。 | ossfs の外部でファイルが変更された場合 (たとえば、OSS コンソール、OSS SDK、または ossutil を介して) は、キャッシュを無効にするために 0 に設定します。これを設定しないと、キャッシュされたメタデータが古くなり、LIST 結果が不正確になる可能性があります。 |
allow_other | 他のユーザーがマウントされたディレクトリにアクセスできるようにします (ただし、内部のファイルにはアクセスできません)。 | 他のユーザーがマウントされたディレクトリにアクセスする必要がある場合にこれを設定します。 |
ossfs オプションの全リストについては、「オプション」をご参照ください。
ステップ 2: OSS ボリュームを使用するワークフローの作成
次のワークフローは、PVC を共有ボリュームとしてマウントします。generate ステップはボリュームにファイルを書き込み、print ステップはそれを読み戻します。これにより、ステップ間のデータ共有が示されます。
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: volumes-existing-
namespace: argo
spec:
entrypoint: volumes-existing-example
volumes:
# Kubernetes 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/volNAS ボリュームの使用
ステップ 1: PV と PVC の作成
次の YAML を使用して、PersistentVolume (PV) と PersistentVolumeClaim (PVC) を作成します。NAS ボリュームはファイルシステムレベルで認証されるため、Secret は必要ありません。
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
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<your-nas-filesystem-id> をご利用の NAS ファイルシステムの ID に置き換えてください。サーバーアドレスのリージョンは、NAS ファイルシステムのリージョンと一致している必要があります (例: 中国 (北京) の場合は cn-beijing)。
ステップ 2: NAS ボリュームを使用するワークフローの作成
次のワークフローは、OSS の例と同じ 2 ステップパターンを使用しますが、代わりに NAS PVC をマウントします。
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: volumes-existing-
namespace: argo
spec:
entrypoint: volumes-existing-example
volumes:
# Kubernetes 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次のステップ
ストレージの概要 — OSS および NAS ボリュームの特性、制限、および料金を比較します
静的にプロビジョニングされた OSS ボリュームのマウント — 高度な OSS ボリュームオプションを設定します
静的にプロビジョニングされた NAS ボリュームのマウント — 高度な NAS ボリュームオプションを設定します