3.4. 自動化ジョブ Pod の推奨サイズ
Ansible Automation Platform ジョブは、ホストのインベントリーに対して Ansible Playbook を起動する Automation controller のインスタンスです。Ansible Automation Platform が Red Hat OpenShift で実行される場合、デフォルトの実行キューは、インストール時にOperator によって作成されたコンテナーグループです。
コンテナーグループは、Kubernetes 認証情報とデフォルトの Pod 仕様で設定されます。コンテナーグループに対してジョブが起動されると、Automation controller によって、コンテナーグループ Pod 仕様で指定された名前空間に Pod が作成されます。これらの Pod は、自動化ジョブ Pod と呼ばれます。
自動化ジョブ Pod の適切なサイズを決定するには、まず、Automation controller コントロールプレーンが同時に起動できるジョブ数の機能を理解する必要があります。
この例では、3 つのワーカーノードがあります (それぞれ 4 つの vCPU と 16GiB の RAM)。1 つのワーカーノードは制御 Pod をホストし、他の 2 つのワーカーノードは自動化ジョブに使用されます。
これらの値に基づいて、Automation controller コントロールプレーンが実行できる制御容量を決定できます。
次の式で、内訳がわかります。
合計制御容量 = 合計メモリー (MB)/フォークサイズ (MB)
ワーカーノードに基づいて、これは次のように表現できます。
総制御容量 = 16,000 MB/100 MB = 160
この計算の詳細を確認するには、Resource Determination for Capacity Algorithm を参照してください。
これは、Automation controller が 160 個のジョブを同時に起動するように設定されていることを意味します。ただし、後ほど説明するコンテナーグループ/実行プレーンの容量に合わせて、この値を調整する必要があります。
16GB は 16,000 MB に丸められ、1 つのフォークのサイズはデフォルトで 100MB とし、簡素化しています。
使用可能な制御容量を計算したので、同時自動化ジョブの最大数を決定できます。
これを判断するには、コンテナーグループ/実行プレーン内の自動化ジョブ Pod の仕様に、vCPU 250m および 100Mi の RAM のデフォルトの要求があることに注意する必要があります。
1 つのワーカーノードの合計メモリーの使用:
16,000 MB/100 MiB = 160 の同時ジョブ
1 つのワーカーノードの合計 CPU の使用:
4000 ミリ cpu / 250 ミリ cpu = 16 の同時ジョブ
上記の値に基づいて、ノード上の最大同時ジョブ数を 2 つの同時ジョブ値の最小値である 16 に設定する必要があります。この例では、自動化ジョブの実行に 2 つのワーカーノードが割り当てられているため、この数は 2 倍の 32 (ワーカーノードあたり 16 の同時ジョブ) になります。
Automation controller の設定は現在 160 の同時ジョブに設定されており、使用可能なワーカーノードの容量では 32 の同時ジョブしか許可されていません。数が偏っているため、これは問題です。
つまり、Automation controller のコントロールプレーンは、同時に 160 のジョブを起動できると認識しているにも拘らず、Kubernetes スケジューラーでは、コンテナーグループの名前空間で最大 32個の自動化ジョブ Pod しか同時にスケジュールされていません。
コントロールプレーンとコンテナーグループ/実行プレーンの間の値が不均衡であると、次のような問題が発生する可能性があります。
-
コントロールプレーンの容量が、コンテナーグループでスケジュール可能な同時ジョブ Pod の最大数よりも多い場合、コントロールプレーンは、開始する Pod を送信することによって、ジョブの開始を試みます。ただし、これらの Pod は、リソースが利用可能になるまで実際に実行を開始しません。ジョブ Pod が
AWX_CONTAINER_GROUP_POD_PENDING_TIMEOUTのタイムアウト内に開始されない場合、ジョブは中止されます (デフォルトは 2 時間)。 - コントロールプレーンが起動できるとみなす、同時自動化ジョブの数よりも多く、コンテナーグループがサポートできる場合に、Automation controller はコンテナーグループが最大サポート可能な同時自動化ジョブ数に到達するまで自動化ジョブを起動しないので、この容量は無駄になります。
中止されたジョブや未使用のリソースのリスクを回避するために、有効な制御容量と、デフォルトのコンテナーグループがサポートできる同時実行ジョブの最大数とのバランスを取ることを推奨します。
コントロールプレーンが起動するジョブの最大数は AWX_CONTROL_NODE_TASK_IMPACT と呼ばれる設定の影響を受けるため、有効な制御容量という用語が使用されます。AWX_CONTROL_NODE_TASK_IMPACT 変数は、自動化ジョブごとに制御 Pod で使用可能な容量を定義し、実質的に、制御 Pod が起動を試すことのできる自動化ジョブ数を制御しています。
有効な制御能力と、利用可能な実行能力のバランスをとるには、AWX_CONTROL_NODE_TASK_IMPACT 変数を、Automation Controller コントロールプレーンで実行する同時ジョブ数を制限する値に設定して、コンテナーグループ/実行プレーンで起動される自動化ジョブ Pod 数と同じ数にします。
コンテナーグループがサポートできるよりも多くの同時自動化ジョブの起動を避けるために、AWX_CONTROL_NODE_TASK_IMPACT の最適値を計算するには、次の式を使用できます。
AWX_CONTROL_NODE_TASK_IMPACT = 制御容量/コンテナーグループが起動できる最大同時ジョブ
リファレンス環境の場合、これは次のとおりです。
AWX_CONTROL_NODE_TASK_IMPACT = 160 / 32 = 5
結論として、このリファレンス環境では、AWX_CONTROL_NODE_TASK_IMPACT は 5 に等しくなるはずである事がわかります。この値は 6章Automation controller のインストール の章の extra_setting で設定します。これについては、このドキュメントの後半で説明します。