第7章 ジョブスライス
スライスされたジョブは、分散ジョブの概念を指します。多数のホストにわたってジョブを実行するには、分散ジョブを使用します。その後、クラスター全体で並行してスケジュールできるインベントリーの一部に対して、多数の ansible-playbook を実行できます。
デフォルトでは、Ansible は単一のコントロールインスタンスからジョブを実行します。ホスト間のオーケストレーションを必要としないジョブの場合、ジョブスライスは、Automation Controller の機能を利用してクラスター内の多数のノードに作業を分散します。
ジョブスライスは、ジョブテンプレートフィールド job_slice_count
を追加することで機能します。これは、Ansible 実行をスライスするジョブの数を指定します。この数値が 1
より大きい場合、Automation Controller はジョブではなくジョブテンプレートからワークフローを生成します。インベントリーはスライスジョブ間で均等に分散されます。その後、ワークフロージョブが開始され、通常のワークフローであるかのように処理が進みます。
ジョブを起動すると、API はジョブリソース (job_slice_count = 1 の場合) またはワークフロージョブリソースのいずれかを返します。対応するユーザーインターフェイス (UI) は適切な画面にリダイレクトされ、実行のステータスが表示されます。
7.1. ジョブスライスの留意事項
ジョブスライスの設定時には以下を考慮してください。
- スライスされたジョブはワークフロージョブを作成し、さらにワークフロージョブがジョブを作成します。
- ジョブスライスは、ジョブテンプレート、インベントリー、スライス数で構成されます。
スライスされたジョブは、実行されると、各インベントリーを複数の "一切れサイズ" のチャンクに分割します。次に、適切なインベントリーの各チャンクで ansible-playbook 実行のジョブをキューに入れます。ansible-playbook に入力されるインベントリーは、元のインベントリーの短縮バージョンです。これには、その特定スライス内のホストだけが含まれています。Jobs リストに表示される完了したスライスジョブには、実行されたスライスジョブの数とともにラベルが付けられます。
スライスされたジョブでのスケジュールの動作は、通常通りです (フォーク数、容量に合わせたキューへの追加、インベントリーマッピングをもとにしたインスタンスグループへの割り当て)。
注記ジョブスライスは、ジョブの実行を水平方向にスケーリングすることを目的としています。ジョブテンプレートでジョブスライスを有効にすると、処理対象のインベントリーが起動時に設定されたスライスの数に分割され、スライスごとにジョブが開始されます。
通常、スライスの数は、コントローラーノードの数と同じかそれ以下になります。ジョブスライスの数を非常に大きな数に設定することもできますが、パフォーマンスが低下する可能性があります。ジョブスケジューラーは、スライスされたジョブのワークフローノードを何千個も同時にスケジュールするようには設計されていません。
- プロンプトまたは追加の変数を含むスライスジョブテンプレートは、標準ジョブテンプレートと同じように動作し、結果として得られるワークフロージョブ内のスライスジョブのセット全体にすべての変数と制限を適用します。たださい、スライスされたジョブに制限が課された場合には、この制限が原因で、スライスにホストが割り当てられず、これらのスライスが失敗するので、ジョブ全体が失敗してしまいます。
- 分散されたジョブのジョブスライスのステータスは、ワークフロージョブと同じ方法で計算されます。サブジョブでの失敗した内容が未処理の場合は、失敗となります。
- (個別ホストへの変更適用などではなく) ホスト全体でオーケストレーションする予定のジョブは、スライスジョブとして設定しないでください。
- そのようなジョブは失敗する可能性があります。Automation Controller は、スライスジョブとして実行された場合に失敗する Playbook を検出することも考慮することもありません。