5.4. Automation Controller の容量決定とジョブへの影響
Automation Controller 容量システムは、インスタンスで利用可能なリソース量や、実行中のジョブのサイズ (影響と呼ぶ) をもとに、インスタンスでいくつのジョブを実行可能か判断します。これを判断するのに使用するアルゴリズムは、2 つのアイテムだけをベースとします。
-
システムで利用可能なメモリー容量 (
mem_capacity
) -
システムで利用可能な処理容量 (
cpu_capacity
)
容量はインスタンスグループにも影響します。グループはインスタンスで構成されるため、インスタンスを複数のグループに割り当てることもできます。これは、1 つのインスタンスへの影響が他のグループの全体的な容量に影響を与える可能性があることを意味します。
インスタンス自体ではなく、インスタンスグループを、さまざまなレベルのジョブで使用するように割り当てることができます。詳細は、自動化実行の設定 の クラスタリング を参照してください。
タスクマネージャーは、ジョブが実行されるグループを決定するためのグラフを準備するときに、まだ開始する準備ができていないジョブにインスタンスグループの容量をコミットします。
小規模な設定では、ジョブの実行に使用できるインスタンスが 1 つだけの場合、タスクマネージャーは、インスタンスの容量を超えた場合でも、そのジョブをインスタンス上で実行できるようにします。これにより、システムのプロビジョニング不足が原因でジョブが停止することがなくなります。
関連情報
- コンテナーグループの詳細は、自動化実行の設定 の インスタンスグループとコンテナーグループの容量設定 を参照してください。
- スライスされたジョブおよび容量への影響に関する情報は、ジョブスライスの実行動作 を参照してください。
5.4.1. 容量アルゴリズムに向けたリソースの判断
容量アルゴリズムは、システムが同時に実行できるフォークの数を決定します。これらのアルゴリズムは、Ansible が同時に通信できるシステムの数を制御します。Automation Controller システムが実行するフォークの数を増やすと、より多くの作業を並行して実行できるため、ジョブをより高速に実行できます。ただし、これによりシステムの負荷が増加し、作業が遅くなる可能性があります。
デフォルトの mem_capacity
を使用すると、システムがメモリー不足にならないようにしながら、処理リソースをオーバーコミットできます。作業のほとんどがプロセッサーに依存しない場合、このモードを選択するとフォークの数が最大になります。
5.4.1.1. メモリー対容量
mem_capacity
は、フォークごとに必要なメモリー量に応じて計算されます。内部コンポーネントのオーバーヘッドを考慮すると、これはフォークあたり約 100MB になります。Ansible ジョブで使用できるメモリーの量を考慮する場合、容量アルゴリズムは、他のサービスの存在を考慮して 2GB のメモリーを予約します。このアルゴリズムの式は次のとおりです。
(mem - 2048) / mem_per_fork
以下に例を示します。
(4096 - 2048) / 100 == ~20
4GB のメモリーを搭載したシステムは、20 個のフォークを実行できます。mem_per_fork
の値は、SYSTEM_TASK_FORKS_MEM
の値を設定することによって制御されます。デフォルトは 100 です。
5.4.1.2. CPU 対容量
Ansible ワークロードは多くの場合、プロセッサーに依存します。このような場合、同時ワークロードを減らすことで、より多くのタスクをより速く実行できるようになり、それらのジョブの平均完了時間を短縮できます。
mem_capacity
アルゴリズムがフォークごとに必要なメモリーの量を調整するのと同じように、cpu_capacity
アルゴリズムはフォークごとに必要な処理リソースの量を調整します。このベースライン値は、コアあたり 4 つのフォークです。このアルゴリズムの式は次のとおりです。
cpus * fork_per_cpu
たとえば、4 コアシステムは次のようになります。
4 * 4 == 16
SYSTEM_TASK_FORKS_CPU
の値 (デフォルトは 4) を設定することで、fork_per_cpu
の値を制御できます。
5.4.2. ジョブが影響を与える容量
容量を選択する場合に、各ジョブタイプがどのように容量に影響を与えるかを理解することが重要です。
Ansible のデフォルトのフォーク値は 5 です。ただし、それよりも少ないシステムに対して実行するように Automation Controller を設定すると、実際の同時実行値は低くなります。
ジョブが Automation Controller で実行されると、Ansible の親プロセスを補うために、選択されたフォークの数が 1 つ増加します。
例
フォーク値が 5 の 5 つのシステムに対して Playbook を実行した場合、ジョブへの影響の観点から見た実際のフォーク値は 6 になります。
5.4.2.1. 自動コントローラーのジョブタイプの影響
ジョブとアドホックジョブは、前述のモデル、フォーク +1 に従います。ジョブテンプレートにフォーク値を設定した場合、ジョブの容量値は、指定されたフォーク値の最小値と、所有しているホストの数に 1 を加えた値になります。+1 は、親 Ansible プロセスを考慮するためのものです。
インスタンスの容量によって、どのジョブが特定のインスタンスに割り当てられるかが決まります。ジョブとアドホックコマンドは、フォーク値が大きいほど、より多くの容量を使用します。
以下を含むジョブタイプは、一定の影響を及ぼします。
- インベントリーの更新: 1
- プロジェクトの更新: 1
- システムジョブ: 5
ジョブテンプレートにフォーク値を設定しない場合、ジョブは Ansible のデフォルトのフォーク値 5 を使用します。ただし、ジョブのホストの数が 5 つ未満の場合は、使用するホストの数が減ります。一般に、フォーク値をシステムの能力よりも高く設定すると、メモリー不足や CPU のオーバーコミットによって問題が発生する可能性があります。使用するジョブテンプレートのフォーク値はシステムに適合する必要があります。1,000 個のフォークを使用する Playbook があるが、個別にそれほど多くの容量を備えたシステムがない場合、システムのサイズが小さく、パフォーマンスまたはリソースの問題が発生するリスクがあります。
5.4.2.2. 正しい容量の選択
CPU 制限またはメモリー制限の範囲外の容量を選択する場合は、フォークの最小数または最大数のどちらかを選択することになります。前の例 では、CPU 容量では最大 16 個のフォークが許可され、メモリー容量では最大 20 個のフォークが許可されます。一部のシステムでは、これらの間の差が大きくなる可能性があるため、これら 2 つの間のバランスを取ることが必要な場合があります。
インスタンスフィールドの Capacity_adjustment
を使用すると、考慮する量を選択できます。0.0 ~ 1.0 の値で表されます。値 1.0 に設定すると、最大値が使用されます。前の例にはメモリー容量が関係しているため、フォークの値を 20 として選択できます。値を 0.0 に設定すると、最小値が使用されます。値を 0.5 にすると 2 つのアルゴリズム間の 50/50 バランス、つまり 18 です。
16 + (20 - 16) * 0.5 = 18
手順
容量を表示または編集します。
-
ナビゲーションパネルから、
を選択します。 - Instance Groups リストビューで、必要なインスタンスを選択します。
Instances タブを選択し、Capacity adjustment スライダーを調整します。
注記スライダーは、インスタンス容量アルゴリズムが生成するフォークの数が少ないか (左方向)、より多くのフォークが生成されているか (右方向) を調整します。