タスクの実行

有効期間が短いワークフローは、Kf でタスクとして実行できます。タスクはアプリで実行されます。つまり、各タスクにはアプリを関連付ける必要があります。各タスクの実行では、親アプリのビルド アーティファクトが使用されます。タスクは有効期間が短いため、アプリは長時間実行アプリケーションとしてデプロイされず、アプリやタスク用のルートは作成されません。

タスクを実行するアプリを push する

  1. test-app リポジトリのクローンを作成します。

    git clone https://github.com/cloudfoundry-samples/test-app test-app
    cd test-app
  2. アプリを push します。

    kf push APP_NAME --task コマンドを使用してアプリを push します。--task フラグは、アプリがタスクの実行に使用されることを想定しています。そのため、アプリにルートは作成されず、またアプリは長時間実行されるものとしてデプロイされません。

    kf push test-app --task
  3. アプリの一覧を表示して、アプリ インスタンスまたはルートが作成されていないことを確認します。

    kf apps

    アプリが起動しておらず、URL がないことを確認します。

    Listing Apps in Space: test-space
    Name                     Instances  Memory  Disk  CPU   URLs
    test-app                 stopped    1Gi     1Gi   100m  <nil>
    

アプリでタスクを実行する

アプリでタスクを実行する際、--command フラグを使用して起動コマンドを指定することもできます。起動コマンドが指定されていない場合は、アプリで指定された起動コマンドが使用されます。アプリで起動コマンドが指定されていない場合は、コンテナ イメージの CMD 構成が検索されます。タスクを正常に実行するには、起動コマンドが必要です。

kf run-task test-app --command "printenv"

次のようなメッセージが表示され、タスクが送信されたことがわかります。

Task test-app-gd8dv is submitted successfully for execution.

タスク名が自動的に生成されます。先頭にアプリ名、末尾に任意の文字列が付いています。タスク名は、同じクラスタ内のタスクを識別する固有識別子です。

タスクのリソース制限を指定する

リソース制限(CPU コア / メモリ上限 / ディスクの割り当てなど)は、アプリ(kf push 内)または kf run-task コマンド内で指定できます。kf run-task コマンドで指定した制限は、アプリで指定された制限よりも優先されます。

アプリでリソース制限を指定するには、kf push コマンドで --cpu-cores--memory-limit--disk-quota フラグを使用します。

kf push test-app --command "printenv" --cpu-cores=0.5 --memory-limit=2G --disk-quota=5G --task

アプリでこれらの制限をオーバーライドするには、kf run-task コマンドで --cpu-cores--memory-limit--disk-quota フラグを使用します。

kf run-task test-app --command "printenv" --cpu-cores=0.5 --memory-limit=2G --disk-quota=5G

タスクのカスタム表示名を指定する

必要に応じて --name フラグを使用してタスクのカスタム表示名を指定すると、識別やグループ化が容易になります。

$ kf run-task test-app --command "printenv" --name foo
Task test-app-6swct is submitted successfully for execution.

$ kf tasks test-app
Listing Tasks in Space: test space
Name              ID  DisplayName        Age    Duration  Succeeded  Reason
test-app-6swct    3   foo                1m     21s       True       <nil>

タスクを管理する

kf tasks APP_NAME コマンドを使用して、アプリのすべてのタスクを表示します。

$ kf tasks test-app
Listing Tasks in Space: test space
Name              ID  DisplayName        Age    Duration  Succeeded  Reason
test-app-gd8dv    1   test-app-gd8dv     1m     21s       True       <nil>

タスクをキャンセルする

kf terminate-task コマンドを使用して、アクティブなタスクをキャンセルします。

タスク名を指定してタスクをキャンセルします。

$ kf terminate-task test-app-6w6mz
Task "test-app-6w6mz" is successfully submitted for termination

または、APP_NAME とタスク ID を指定してタスクをキャンセルします。

$ kf terminate-task test-app 2
Task "test-app-6w6mz" is successfully submitted for termination

キャンセルされたタスクのステータスは PipelineRunCancelled になります。

$ kf tasks test-app
Listing Tasks in Space: test space
Name              ID  DisplayName        Age    Duration  Succeeded  Reason
test-app-gd8dv    1   test-app-gd8dv     1m     21s       True       <nil>
test-app-6w6mz    2   test-app-6w6mz     38s    11s       False      PipelineRunCancelled

タスクログを表示する

kf logs APP_NAME --task コマンドを使用して、タスクのログを表示します。

$ kf logs test-app --task