sliced job という用語は、分散されたジョブのコンセプトのことです。分散されたジョブは、大多数のホストでジョブを実行する場合に使用し、インベントリーのサブセット上で、複数の Ansible Playbook それぞれを実行することで、クラスターで並行してスケジューリングができます。
デフォルトでは、Ansible は単一のコントロールインスタンスからジョブを実行します。ホスト間のオーケストレーションが必要ないジョブの場合、ジョブスライスは、クラスター内の複数のノードに作業を分散する automation controller の機能を利用します。ジョブスライスは、ジョブテンプレートのフィールド job_slice_count
を追加して、Ansible 実行をスライスするジョブの数を指定することで機能します。この数が 1 より大きい場合、automation controller はジョブではなくジョブテンプレートからワークフローを生成します。インベントリーが、複数のスライスジョブに均等に分散され、ワークフロージョブが起動し、通常のワークフローのように続行されます。ジョブを起動すると、API はジョブリソース (job_slice_count = 1
の場合) か、ワークフロージョブのリソースを返します。対応のユーザーインターフェースで、適切な画面にリダイレクトされ、実行のステータスが表示されます。
ジョブスライスの設定時には以下を考慮してください。
スライスされたジョブは、ワークフロージョブを作成してからジョブを作成すること。
ジョブスライスはジョブテンプレート、インベントリー、スライス数で構成されること。
実行時に、スライスされたジョブは、各インベントリーを「スライスサイズ」のチャンクに分割します。次に、適切なインベントリーのチャンクごとに、Ansible Playbook 実行のジョブをキューに追加します。Ansible Playbook にフィードしたインベントリーは、元のインベントリーを縮小したバージョンで、特定のスライスのホストだけを含みます。ジョブリストに表示される、完了したスライスジョブは随時、実行済みのスライスジョブ数で、ラベルがつけられます。
スライスされたジョブでのスケジュールの動作は、通常通りです (フォーク数、容量に合わせたキューへの追加、インベントリーマッピングをもとにしたインスタンスグループへの割り当て)。
注釈
ジョブスライスは、ジョブの実行を水平方向にスケーリングすることを目的としています。ジョブテンプレートでジョブスライスを有効にすると、処理対象のインベントリーが起動時に設定されたスライスの数に分割され、スライスごとにジョブが開始されます。
スライスの数は、コントローラーノードの数と同じかそれ以下になることが予想されます。ジョブスライスの数を極端に多く (たとえば、数千) 設定することはできますが、パフォーマンスが低下する可能性があります。これは、ジョブスケジューラーが、スライスされたジョブとなる数千のワークフローノードを同時にスケジュールするように設計されていないためです。
スライスされたジョブテンプレートにプロンプトや追加の変数が指定されている場合に、標準のジョブテンプレートと同じ動作をし、スライス後のワークフロージョブに含まれるスライスジョブセット全体に、全変数と制限が適用されます。ただし、スライスされたジョブに制限が課された場合には、この制限が原因で、スライスにホストが割り当てられず、これらのスライスが失敗するので、ジョブ全体が失敗してしまいます。
分散されたジョブのジョブスライスのステータスは、ワークフロージョブと同じ方法で計算されます。サブジョブでの失敗した内容が未処理の場合は、失敗となります。
警告
(個別のホストだけに変更を適用するのではなく) ホスト全体でオーケストレーションを行う予定のジョブは、スライスジョブとして設定しないようにしてください。スライスジョブとして設定してしまうと、ジョブが失敗する可能性があり、automation controller では、スライスジョブとして設定されている場合に、失敗した Playbook の検出や対応は試行されません。
ジョブをスライスすると、どのノードでも実行でき、(たとえば、システム内に容量が十分にない場合など) 同時に実行されないことがあります。スライスジョブの実行中は、ジョブの詳細で現在実行中のワークフローとジョブスライス以外に、個別の詳細を確認するためのリンクが表示されます。
デフォルトでは、ジョブテンプレートは通常同時に実行されるようには設定されていません (API で allow_simultaneous
を有効にするか、UI で 同時実行ジョブの有効化 にチェックを入れる必要があります)。スライスすることで、この動作が上書きされ、対象の設定にチェックが入れられていない場合でも allow_simultaneous
が有効とみなされます。これの指定方法や、ジョブテンプレート設定でのジョブスライス数の指定方法に関する情報は、「ジョブテンプレート」を参照してください。
「ジョブテンプレート」のセクションでは、ユーザーインターフェースの以下の操作を実行する方法が追加で提供されています。
スライスジョブが複数あるジョブテンプレートでワークフロージョブを起動する
スライスジョブのテンプレート軌道跡にワークフロー全体または個別ジョブをキャンセルする
スライスジョブの実行が完了した後にワークフロー全体または個別ジョブを再起動する
ジョブテンプレートの起動後にワークフローとスライスジョブに関する情報を表示する
スライスジョブ作成後に特定のスライスジョブを検索する (次のセクション「ジョブスライスの検索」を参照)
スライスジョブの検索を簡素化するには、検索機能を使用して検索フィルターを適用します。
ジョブリストに適用してスライスジョブだけを表示
ジョブリストに適用してジョブスライスの親ワークフロージョブのみを表示
ジョブテンプレートリストに適用してスライスジョブを生成するジョブテンプレートのみを表示
ジョブリストのスライスジョブのみを表示するには、他の多くの場合と同様に、タイプ (ここではジョブ) または unified_jobs
でフィルタリングできます。
/api/v2/jobs/?job_slice_count__gt=1
ジョブスライスの親ワークフロージョブのみを表示する方法:
/api/v2/workflow_jobs/?job_template__isnull=false
スライスジョブを生成するジョブテンプレートのみを表示する方法:
/api/v2/job_templates/?job_slice_count__gt=1