Documentation

20. ジョブスライス

sliced job という用語は、分散されたジョブのコンセプトのことです。分散されたジョブは、大多数のホストでジョブを実行する場合に使用し、インベントリーのサブセット上で、複数の Ansible Playbook それぞれを実行することで、クラスターで並行してスケジューリングができます。

デフォルトでは、Ansible は単一のコントロールインスタンスからジョブを実行します。ホスト間のオーケストレーションが必要ないジョブの場合、ジョブスライスは、クラスター内の複数のノードに作業を分散する automation controller の機能を利用します。ジョブスライスは、ジョブテンプレートのフィールド job_slice_count を追加して、Ansible 実行をスライスするジョブの数を指定することで機能します。この数が 1 より大きい場合、automation controller はジョブではなくジョブテンプレートからワークフローを生成します。インベントリーが、複数のスライスジョブに均等に分散され、ワークフロージョブが起動し、通常のワークフローのように続行されます。ジョブを起動すると、API はジョブリソース (job_slice_count = 1 の場合) か、ワークフロージョブのリソースを返します。対応のユーザーインターフェースで、適切な画面にリダイレクトされ、実行のステータスが表示されます。

20.1. ジョブスライスの留意事項

ジョブスライスの設定時には以下を考慮してください。

  • スライスされたジョブは、ワークフロージョブを作成してからジョブを作成すること。

  • ジョブスライスはジョブテンプレート、インベントリー、スライス数で構成されること。

  • 実行時に、スライスされたジョブは、各インベントリーを「スライスサイズ」のチャンクに分割します。次に、適切なインベントリーのチャンクごとに、Ansible Playbook 実行のジョブをキューに追加します。Ansible Playbook にフィードしたインベントリーは、元のインベントリーを縮小したバージョンで、特定のスライスのホストだけを含みます。ジョブリストに表示される、完了したスライスジョブは随時、実行済みのスライスジョブ数で、ラベルがつけられます。

_images/sliced-job-shown-jobs-list-view.png
  • スライスされたジョブでのスケジュールの動作は、通常通りです (フォーク数、容量に合わせたキューへの追加、インベントリーマッピングをもとにしたインスタンスグループへの割り当て)。

注釈

Job slicing is intended to scale job executions horizontally. Enabling job slicing on a job template divides an inventory to be acted upon in the number of slices configured at launch time and then starts a job for each slice.

It is expected that the number of slices will be equal to or less than the number of controller nodes. Setting an extremely high number of job slices (e.g., thousands), while allowed, can cause performance degradation as the job scheduler is not designed to schedule simultaneously thousands of workflow nodes, which are what the sliced jobs become.

  • スライスされたジョブテンプレートにプロンプトや追加の変数が指定されている場合に、標準のジョブテンプレートと同じ動作をし、スライス後のワークフロージョブに含まれるスライスジョブセット全体に、全変数と制限が適用されます。ただし、スライスされたジョブに制限が課された場合には、この制限が原因で、スライスにホストが割り当てられず、これらのスライスが失敗するので、ジョブ全体が失敗してしまいます。

  • 分散されたジョブのジョブスライスのステータスは、ワークフロージョブと同じ方法で計算されます。サブジョブでの失敗した内容が未処理の場合は、失敗となります。

警告

(個別のホストだけに変更を適用するのではなく) ホスト全体でオーケストレーションを行う予定のジョブは、スライスジョブとして設定しないようにしてください。スライスジョブとして設定してしまうと、ジョブが失敗する可能性があり、automation controller では、スライスジョブとして設定されている場合に、失敗した Playbook の検出や対応は試行されません。

20.2. ジョブスライスの実行動作

ジョブをスライスすると、どのノードでも実行でき、(たとえば、システム内に容量が十分にない場合など) 同時に実行されないことがあります。スライスジョブの実行中は、ジョブの詳細で現在実行中のワークフローとジョブスライス以外に、個別の詳細を確認するためのリンクが表示されます。

_images/sliced-job-shown-jobs-output-view.png

デフォルトでは、ジョブテンプレートは通常同時に実行されるようには設定されていません (API で allow_simultaneous を有効にするか、UI で 同時実行ジョブの有効化 にチェックを入れる必要があります)。スライスすることで、この動作が上書きされ、対象の設定にチェックが入れられていない場合でも allow_simultaneous が有効とみなされます。これの指定方法や、ジョブテンプレート設定でのジョブスライス数の指定方法に関する情報は、「ジョブテンプレート」を参照してください。

ジョブテンプレート」のセクションでは、ユーザーインターフェースの以下の操作を実行する方法が追加で提供されています。

  • スライスジョブが複数あるジョブテンプレートでワークフロージョブを起動する

  • スライスジョブのテンプレート軌道跡にワークフロー全体または個別ジョブをキャンセルする

  • スライスジョブの実行が完了した後にワークフロー全体または個別ジョブを再起動する

  • ジョブテンプレートの起動後にワークフローとスライスジョブに関する情報を表示する

  • スライスジョブ作成後に特定のスライスジョブを検索する (次のセクション「ジョブスライスの検索」を参照)

20.3. ジョブスライスの検索

スライスジョブの検索を簡素化するには、検索機能を使用して検索フィルターを適用します。

  • ジョブリストに適用してスライスジョブだけを表示

  • ジョブリストに適用してジョブスライスの親ワークフロージョブのみを表示

  • ジョブテンプレートリストに適用してスライスジョブを生成するジョブテンプレートのみを表示

ジョブリストのスライスジョブのみを表示するには、他の多くの場合と同様に、タイプ (ここではジョブ) または 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