このトピックでは、ワークフロー クラスタにボリュームをマウントし、そのボリュームを使用する方法について説明します。
使用上の注意
ワークフロー クラスタでは、Object Storage Service (OSS) ボリュームと File Storage NAS (NAS) ボリュームを使用できます。
OSS ボリュームの使用
OSS ボリュームを作成するには、次のサンプルコードを使用します。
詳細については、「静的にプロビジョニングされた ossfs 1.0 ボリュームをマウントする」をご参照ください。他のタイプのボリュームを作成するには、対応するパラメータを置き換えます。
[YAML コンテンツを表示するにはクリックします]
apiVersion: v1 kind: Secret metadata: name: oss-secret namespace: default stringData: akId: <yourAccessKey ID> # AccessKey ID に置き換えます。 akSecret: <yourAccessKey Secret> # AccessKey シークレットに置き換えます。 --- apiVersion: v1 kind: PersistentVolume metadata: name: pv-oss 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: default volumeAttributes: bucket: <your bucket name> # バケット名に置き換えます。 url: "oss-<your region id>-internal.aliyuncs.com" # <your region id> を OSS バケットのリージョン ID に置き換えます。たとえば、OSS バケットが中国 (北京) リージョンに作成されている場合、リージョン ID は oss-cn-beijing-internal.aliyuncs.com です。 otherOpts: "-o umask=022 -o max_stat_cache_size=1000000 -o allow_other" path: "/" # OSS バケットのルートディレクトリ。OSS バケットのサブディレクトリを指定することもできます。例: testdir/testdir1。 --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-oss namespace: default spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-oss[オプション パラメータ]:
-o *** -o ***形式で、OSS ボリュームのカスタム パラメータ (例:-o umask=022 -o max_stat_cache_size=1000000 -o allow_other) を設定できます。umask: OSSFS 内のファイルのパーミッション マスクを変更します。たとえば、umask=022 を設定すると、OSSFS 内のファイルのパーミッション マスクが 755 に変更されます。デフォルトでは、OSS SDK またはコンソールを使用してアップロードされたファイルのパーミッション マスクは、OSSFS では 640 です。したがって、読み取りと書き込みを分割する場合には、umask コマンドを使用することをお勧めします。
max_stat_cache_size: キャッシュされるファイル メタデータの最大数を定義するために、ファイル メタデータ キャッシュ容量を指定します。デフォルト: 100,000 エントリ (~40MB メモリ)。
メタデータのキャッシュにより、ファイルのトラバーサルと読み取り操作が大幅に高速化されます。ただし、OSS、SDK、コンソール、ossutil などの代替方法で行われた変更により、メタデータが古くなる可能性があります。強力なデータ整合性要件の場合は、この値を 0 に設定してメタデータ キャッシュを無効にします。
allow_other: 他のユーザーがマウントされたディレクトリにアクセスできるようにします。ただし、これらのユーザーはディレクトリ内のファイルにアクセスできません。
その他のパラメータの詳細については、「ossfs でサポートされているオプション」をご参照ください。
OSS ボリュームを使用するワークフローを作成するには、次のサンプルコードを使用します。
[YAML コンテンツを表示するにはクリックします]
apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: volumes-existing- namespace: default 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: 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
NAS ボリュームの使用
静的にプロビジョニングされた NAS ボリュームを作成するには、次のサンプルコードを使用します。
[YAML コンテンツを表示するにはクリックします]
apiVersion: v1 kind: PersistentVolume metadata: name: pv-nas 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 spec: accessModes: - ReadWriteMany resources: requests: storage: 100Gi selector: matchLabels: alicloud-pvname: pv-nasNAS ボリュームを使用するワークフローを作成するには、次のサンプルコードを使用します。
[YAML コンテンツを表示するにはクリックします]
apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: volumes-existing- namespace: default 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: 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