ボリュームを使用すると、ワークフローのステップ間で共通のマウントパスへの読み取りと書き込みを行うことで、データを共有できます。このトピックでは、既存の Object Storage Service (OSS) ボリュームと File Storage NAS ボリュームをワークフロークラスターにマウントし、Argo Workflows でそれらを参照する方法について説明します。
前提条件
開始する前に、以下のものがあることを確認してください:
背景情報:PV、PVC、および Argo Workflows
PersistentVolume (PV) は、管理者によってプロビジョニングされるクラスターレベルのストレージリソースです。PersistentVolumeClaim (PVC) は、ワークロードによるそのストレージへのリクエストです。Pod とワークフローのステップは、PV を直接参照するのではなく、PVC を参照します。PV は実際のストレージ、PVC はそれを使用するための要求と考えることができます。
ワークフローの YAML は、Kubernetes の Pod 仕様と同じ volumes および volumeMounts 構文を使用するため、既存の Kubernetes の知識を直接適用できます。
OSS ボリュームの使用
OSS ストレージボリュームを使用するための YAML サンプルの表示
次の YAML を適用して、OSS バケット用の Secret、PV、および PVC を作成します。
ossfs オプションの完全なリストについては、「静的にプロビジョニングされた ossfs 1.0 ボリュームのマウント」をご参照ください。
apiVersion: v1
kind: Secret
metadata:
name: oss-secret # PV の nodePublishSecretRef によって参照されます
namespace: default
stringData:
akId: <your-access-key-id> # ご利用の AccessKey ID に置き換えてください
akSecret: <your-access-key-secret> # ご利用の AccessKey Secret に置き換えてください
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-oss
labels:
alicloud-pvname: pv-oss # PVC セレクターがこの PV にバインドするために使用します
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany # 複数のワークフローステップからの同時アクセスを許可します
persistentVolumeReclaimPolicy: Retain
csi:
driver: ossplugin.csi.alibabacloud.com
volumeHandle: pv-oss # 上記の metadata.name と一致させる必要があります
nodePublishSecretRef:
name: oss-secret # AccessKey 認証情報を含む Secret
namespace: default
volumeAttributes:
bucket: <your-bucket-name> # ご利用の OSS バケット名に置き換えてください
url: "oss-<region-id>-internal.aliyuncs.com" # 内部エンドポイントです。<region-id> をご利用のリージョン (例:cn-beijing) に置き換えてください
otherOpts: "-o umask=022 -o max_stat_cache_size=1000000 -o allow_other"
path: "/" # バケットのルートディレクトリです。必要に応じて、サブディレクトリ (例:testdir/testdir1) を使用します
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-oss # ワークフローの volumes[].persistentVolumeClaim.claimName によって参照されます
namespace: default
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
selector:
matchLabels:
alicloud-pvname: pv-oss # この PVC を pv-oss PV にバインドします
OSS ボリュームのパラメーター
-o key=value 形式を使用して、otherOpts フィールドで追加の ossfs オプションを設定します。
| パラメーター | 説明 | デフォルト |
|---|
umask | OSSFS 内のファイルの権限マスクです。umask=022 を設定すると、ファイルの権限は 755 になります。OSS SDK またはコンソール経由でアップロードされたファイルは、OSSFS ではデフォルトで 640 になります。読み取りと書き込みを分離する必要がある場合は、このパラメーターを使用します。 | — |
max_stat_cache_size | キャッシュするファイルメタデータエントリの最大数です。キャッシュにより、ファイルの探索と読み取りが高速化されます。強いデータ整合性が必要な場合 (たとえば、他のプロセスが OSS コンソール、SDK、または ossutil を介してバケットを直接変更する場合) は、0 に設定してキャッシュを無効にします。 | 100,000 エントリ (~40 MB) |
allow_other | 他の OS ユーザーがマウントされたディレクトリにアクセスすることを許可します。これらのユーザーは、ディレクトリ内のファイルにはアクセスできません。 | — |
追加のパラメーターについては、「ossfs でサポートされるオプション」をご参照ください。
ワークフローで OSS ストレージボリュームをマウントして使用するための YAML サンプルの表示
次のワークフロー YAML を適用します。これは、whalesay が共有ボリュームにメッセージを書き込み、print-message がそれを読み戻すという 2 つの連続したステップを実行します。
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: volumes-existing-
namespace: default
spec:
entrypoint: volumes-existing-example
volumes:
# Kubernetes の Pod 仕様と同じ構文
- name: workdir
persistentVolumeClaim:
claimName: pvc-oss # ステップ 1 で作成された PVC を参照します
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:
# Kubernetes の Pod 仕様と同じ構文
- 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 ボリュームの使用
NAS ボリュームを使用するための YAML サンプルの表示
次の YAML を適用して、静的にプロビジョニングされた NAS の PV と PVC を作成します。
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-nas
labels:
alicloud-pvname: pv-nas # PVC セレクターがこの PV にバインドするために使用します
spec:
capacity:
storage: 100Gi
accessModes:
- ReadWriteMany # 複数のワークフローステップからの同時アクセスを許可します
csi:
driver: nasplugin.csi.alibabacloud.com
volumeHandle: pv-nas # 上記の metadata.name と一致させる必要があります
volumeAttributes:
server: "<your-nas-filesystem-id>.cn-beijing.nas.aliyuncs.com" # ご利用の NAS マウントターゲットアドレスに置き換えてください
path: "/"
mountOptions:
- nolock,tcp,noresvport
- vers=3
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc-nas # ワークフローの volumes[].persistentVolumeClaim.claimName によって参照されます
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 100Gi
selector:
matchLabels:
alicloud-pvname: pv-nas # この PVC を pv-nas PV にバインドします
ワークフローで NAS ボリュームをマウントして使用するための YAML サンプルの表示
次のワークフロー YAML を適用します。構造は OSS の例と同じで、claimName のみが異なります。
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: volumes-existing-
namespace: default
spec:
entrypoint: volumes-existing-example
volumes:
# Kubernetes の Pod 仕様と同じ構文
- name: workdir
persistentVolumeClaim:
claimName: pvc-nas # ステップ 1 で作成された PVC を参照します
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