タスク

タスクについて

アプリ(長時間実行プロセス)とは対照的に、タスクは一定時間に実行されてから、停止します。タスクは親アプリの構成に基づいて独自のコンテナ内で実行されます。また、制限されたリソース(CPU / メモリ / エフェメラル ディスク ストレージなど)を使用するように構成することもできます。

タスクのユースケース

  • データベースの移行
  • バッチジョブの実行(スケジュールあり / スケジュールなし)
  • メール送信
  • データの変換(ETL)
  • データの処理(アップロード / バックアップ / ダウンロード)

タスクの仕組み

タスクは親アプリや同じアプリで実行されるその他のタスクと非同期的かつ独立して実行されます。タスクの実行用に作成したアプリではルートの作成や割り当てがなされず、実行ライフサイクルはスキップされます。ソースコードのアップロードビルドのライフサイクルはそのまま続行され、アプリを push した後、タスクの実行に使用されるコンテナ イメージが作成されます(アプリケーションのデプロイのアプリ ライフサイクルをご覧ください)。

タスクのライフサイクルは次のとおりです。

  1. タスクを実行するために、kf push APP_NAME --task コマンドを使用してアプリを push します。
  2. kf run-task APP_NAME コマンドを使用してアプリ上でタスクを実行します。タスクは、アプリにバインドされている環境変数、サービス バインディング、リソースの配分、起動コマンド、セキュリティ グループを継承します。
  3. Kf がアプリからの値と run-task コマンドからのパラメータを使用して、Tekton PipelineRun を作成します。
  4. Tekton PipelineRun が、アプリとタスクの構成に基づいてコンテナを起動する Kubernetes Pod を作成します。
  5. タスクの実行が停止(タスクの終了、または手動での終了)し、基盤となる Pod も停止または終了します。停止したタスクの Pod は保持されるため、kf logs APP_NAME --task コマンドでタスクログにアクセスできます。
  6. タスクが停止する前に終了すると、Tekton PipelineRun がキャンセルされ(PipelineRun のキャンセルを参照)、基盤となる Pod もログとともに削除されます。終了したタスクのログは、Stackdriver や Fluentd などのクラスタレベルのロギング ストリームに配信されます(構成されている場合)。
  7. アプリで実行されるタスクの数が 500 を超えると、最も古いタスクが自動的に削除されます。

タスクの保持ポリシー

タスクは Kubernetes クラスタでカスタム リソースとして作成されるため、基盤となる etcd データベースのスペースを占有しないようにすることが重要です。デフォルトでは、Kf はアプリごとに最新の 500 のタスクのみを保持します。タスクの数が 500 に達すると、最も古いタスクが基盤となる Pod とログとともに自動的に削除されます。

タスクのロギングと実行履歴

タスクが STDOUT や STDERR に出力するデータやメッセージは、kf logs APP_NAME --task コマンドを使用して確認できます。クラスタレベルのロギング メカニズム(Stackdriver、Fluentd など)は、構成されたログの宛先にタスクログを配信します。