タスクについて
アプリ(長時間実行プロセス)とは対照的に、タスクは一定時間に実行されてから、停止します。タスクは親アプリの構成に基づいて独自のコンテナ内で実行されます。また、制限されたリソース(CPU / メモリ / エフェメラル ディスク ストレージなど)を使用するように構成することもできます。
タスクのユースケース
- データベースの移行
- バッチジョブの実行(スケジュールあり / スケジュールなし)
- メール送信
- データの変換(ETL)
- データの処理(アップロード / バックアップ / ダウンロード)
タスクの仕組み
タスクは親アプリや同じアプリで実行されるその他のタスクと非同期的かつ独立して実行されます。タスクの実行用に作成したアプリではルートの作成や割り当てがなされず、実行ライフサイクルはスキップされます。ソースコードのアップロードとビルドのライフサイクルはそのまま続行され、アプリを push した後、タスクの実行に使用されるコンテナ イメージが作成されます(アプリケーションのデプロイのアプリ ライフサイクルをご覧ください)。
タスクのライフサイクルは次のとおりです。
- タスクを実行するために、
kf push APP_NAME --task
コマンドを使用してアプリを push します。 kf run-task APP_NAME
コマンドを使用してアプリ上でタスクを実行します。タスクは、アプリにバインドされている環境変数、サービス バインディング、リソースの配分、起動コマンド、セキュリティ グループを継承します。- Kf がアプリからの値と
run-task
コマンドからのパラメータを使用して、Tekton PipelineRun を作成します。 - Tekton PipelineRun が、アプリとタスクの構成に基づいてコンテナを起動する Kubernetes Pod を作成します。
- タスクの実行が停止(タスクの終了、または手動での終了)し、基盤となる Pod も停止または終了します。停止したタスクの Pod は保持されるため、
kf logs APP_NAME --task
コマンドでタスクログにアクセスできます。 - タスクが停止する前に終了すると、Tekton PipelineRun がキャンセルされ(PipelineRun のキャンセルを参照)、基盤となる Pod もログとともに削除されます。終了したタスクのログは、Stackdriver や Fluentd などのクラスタレベルのロギング ストリームに配信されます(構成されている場合)。
- アプリで実行されるタスクの数が 500 を超えると、最も古いタスクが自動的に削除されます。
タスクの保持ポリシー
タスクは Kubernetes クラスタでカスタム リソースとして作成されるため、基盤となる etcd
データベースのスペースを占有しないようにすることが重要です。デフォルトでは、Kf はアプリごとに最新の 500 のタスクのみを保持します。タスクの数が 500 に達すると、最も古いタスクが基盤となる Pod とログとともに自動的に削除されます。
タスクのロギングと実行履歴
タスクが STDOUT や STDERR に出力するデータやメッセージは、kf logs APP_NAME --task
コマンドを使用して確認できます。クラスタレベルのロギング メカニズム(Stackdriver、Fluentd など)は、構成されたログの宛先にタスクログを配信します。
タスクのスケジュール設定
前述のように、タスクは kf run-task APP_NAME
コマンドで非同期に実行できます。また、kf create-job
コマンドでジョブを作成してから、kf schedule-job JOB_NAME
コマンドでジョブをスケジュールすることで、実行するタスクのスケジュールを設定することもできます。指定した unix-cron スケジュールでタスクが自動的に実行されるようにジョブをスケジュールできます。
タスクのスケジュール方法
ToDo リストを実行するジョブを作成し、スケジュールを設定します。ジョブは、実行する ToDo リストを記述し、ToDo リストの作成を自動的に管理します。
ToDo リストは、ToDo リストの以前の実行がまだ実行中でも、スケジュールで作成されます。 なんらかの理由で実行されなかった場合は、システムが回復したときに、最後に実行されなかった実行のみが実行されます。
ジョブを削除すると、関連付けられているすべての ToDo リストが削除されます。進行中の関連付けられている ToDo リストがまだ存在する場合は、実行が完了することなく、強制的に削除されます。
スケジュールされたジョブによって作成された ToDo リストは、引き続き ToDo リストの保持ポリシーの対象です。
PCF Scheduler との違い
PCF Scheduler では、1 つのジョブに複数のスケジュールを作成できますが、Kf では 1 つのジョブに 1 つのスケジュールしか作成できません。PCF Scheduler と同じ動作を再現するには、スケジュールごとに 1 つのジョブを作成します。