ワークフロークラスターは、オープンソースのArgoワークフローに基づいて開発され、継続的統合および継続的配信 (CICD) パイプライン、データ処理、機械学習、シミュレーション計算に適用できます。 このトピックでは、Alibaba Cloud Argo CLIを使用してワークフローを作成し、そのワークフローのCPUおよびメモリリソースを設定する方法の例を示します。
前提条件
使用上の注意
ワークフローサービスアカウント
ワークフローでは、他のKubernetesリソースにアクセスするサービスアカウントを指定できます。 サービスアカウントを作成すると、ワークフロークラスターは自動的にこのサービスアカウントへの権限を付与します。 サービスアカウントの権限が不十分な場合は、DingTalkグループ35688562に参加してテクニカルサポートをリクエストしてください。
Alibaba Cloud Argo CLI
Alibaba Cloud Argo CLIは、オープンソースのArgo CLIと完全に互換性があり、メトリクスとロギング機能が強化されています。 Alibaba Cloud Argo CLIを使用して、ワークフローのCPU使用率、メモリ使用率、および運用コストを照会できます。 さらに、これを使用して、ワークフローから削除されたポッドのログを取得できます。
以下の手順を実行します。
ダーウィン: argo-cli-aliyun-Darwin
Linux: argo-cli-aliyun-linux
次の例では、Linuxが使用されます。 使用するオペレーティングシステムに基づいて、次のAlibaba Cloud Argo CLIパッケージのいずれかをダウンロードできます。
次のコマンドを実行して、Alibaba Cloud Argo CLIをダウンロードします。
wget https://ack-one.oss-cn-hangzhou.aliyuncs.com/cli/v3.4.12/argo-cli-aliyun-linux次のコマンドを実行して、argo-cli-aliyun-linuxを実行可能にします。
chmod +x argo-cli-aliyun-linux环境変数に含まれるディレクトリに実行ファイルを移动します。 例:
/usr/local/bin/mv argo-cli-aliyun-linux /usr/local/bin/argo
ワークフローの作成
Alibaba Cloud Argo CLIまたはkubectlを使用してワークフローを作成できます。
Alibaba Cloud Argo CLIを使用したワークフローの管理
helloworld-workflow.yamlという名前のファイルを作成し、次の内容をファイルに追加します。
apiVersion: argoproj.io/v1alpha1 kind: Workflow # new type of k8s spec. metadata: generateName: hello-world- # name of the workflow spec. spec: entrypoint: whalesay # invoke the whalesay template. templates: - name: whalesay # name of the template. container: image: docker/whalesay command: [ cowsay ] args: [ "hello world" ]次のコマンドを実行して、ワークフローを送信します。
argo submit helloworld-workflow.yamlワークフローのステータスを照会します。
次のコマンドを実行して、ワークフローのリストを照会します。
argo list期待される出力:
NAME STATUS AGE DURATION PRIORITY hello-world-lgdpp Succeeded 2m 37s 0次のコマンドを実行して、ワークフローのステータスを照会します。
argo get hello-world-lgdpp期待される出力:
Name: hello-world-lgdpp Namespace: default ServiceAccount: unset (will run with the default ServiceAccount) Status: Succeeded Conditions: PodRunning False Completed True .... Duration: 37 seconds Progress: 1/1 ResourcesDuration: 17s*(1 cpu),17s*(100Mi memory) STEP TEMPLATE PODNAME DURATION MESSAGE ✔ hello-world-lgdpp whalesay hello-world-lgdpp 27s
kubectlを使用したワークフローの管理
kubeconfigファイルを設定した後、kubectlを使用してワークフロークラスターを管理できます。 ただし、通常のKubernetesクラスターとは異なり、kubectlを使用すると一部の操作が制限されます。 次の表に、kubectlを使用してさまざまなリソースを管理するために必要な権限を示します。
リソース | 権限 |
priorityclasses | ワークフローでPriorityClassesを管理し、PriorityClassesをカスタマイズしてポッドの優先順位に基づいてポッドのスケジューリングを制御する権限。 |
名前空間 | 名前空間を作成するための権限と、自己管理名前空間内のすべてのリソースに対する完全な権限。 ただし、システム名前空間のリソースにアクセスすることはできません。 システム名前空間とは、名前がkube- で始まる名前空間を指します。 重要 クラスターIDにちなんで名付けられた名前空間は、Argoのシステム名前空間です。 この名前空間を管理できます。 たとえば、workflow-controller-configmapでArgoワークフロー設定を変更できます。 |
persistentvolumes | 完全な権限。 |
persistentvolumeclaims | 自己管理名前空間のリソースに対する完全な権限。 |
secretsconfigmapsserviceaccounts | 自己管理名前空間のリソースに対する完全な権限。 |
ポッド | セルフマネージド名前空間のリソースに対する読み取り権限。 |
ポッド /logevents | セルフマネージド名前空間のリソースに対する読み取り権限。 |
pods/exec | 自己管理型の名前空間にリソースを作成する権限。 |
アルゴ: ワークフロー workflowtasksets workflowtemplates cronworkflow | 自己管理名前空間のリソースに対する完全な権限。 |
ワークフローでコンテナのCPUおよびメモリ要求を構成する
ワークフロークラスタは、好ましくは、プリエンプティブル弾性コンテナインスタンスを使用する。 従量課金のエラスティックコンテナインスタンスは、コストの最適化にも使用されます。 プリエンプティブルエラスティックコンテナインスタンスの保護期間は1時間です。 ワークフローの各ステップが1時間以内に完了できることを確認します。
プリエンプティブエラスティックコンテナインスタンスは、2 vCPU以上の設定のみをサポートします。
コンテナにリソースリクエストが設定されていない場合、または2 vCPU /4 GiB未満で設定されている場合、システムはデフォルトで2 vCPU /4 GiBを使用します。
thdリソースリクエストが2 vCPU /4 GiBを超えると、システムは仕様を満たすエラスティックコンテナインスタンスと自動的に一致します。
次の表に、サポートされているCPUおよびメモリ要求を示します。 CPUリクエストを8 vCPU以上に設定しないことを推奨します。
vCPU
メモリ (GiB)
2
4、8、および16
4
4、8、16、および32
8
4、8、16、32、および64
従量課金のエラスティックコンテナインスタンスを強制的にワークフローを実行する
プリエンプティブルのエラスティックコンテナインスタンスを使用してコスト優先モードで主要なタスクを実行したくない場合は、従量課金のエラスティックコンテナインスタンスにワークフローを強制的に実行させることができます。
次のサンプルコードに示すように、[Container] セクションでrequestsおよびlimitsパラメーターを設定します。
apiVersion: argoproj.io/v1alpha1
kind: Workflow # new type of k8s spec.
metadata:
generateName: hello-world- # name of the workflow spec.
spec:
entrypoint: whalesay # invoke the whalesay template.
templates:
- name: whalesay # name of the template.
container:
image: docker/whalesay
command: [ cowsay ]
args: [ "hello world" ]
resources:
requests:
cpu: 0.5
memory: 1Gi
limits:
cpu: 0.5
memory: 1Gi