Execução de tarefas

É possível executar fluxos de trabalho de curta duração executando-os como tarefas no Kf. As tarefas são executadas em Apps, ou seja, cada uma delas precisa ter um app associado. Toda execução de tarefa usa os artefatos de build do app pai. Como as tarefas são de curta duração, o app não será implantado como um aplicativo de longa duração e não será preciso criar rotas para o app nem para a tarefa.

Enviar um app para executar tarefas

Navegue até o diretório do manifesto do app ou do código-fonte e crie um app para executar tarefas com o comando kf push APP_NAME --task. A flag --task indica que o app deve ser usado para executar tarefas. Portanto, o app não terá rotas criadas nem será implantado como um aplicativo de longa execução.

$ kf push helloworld --task

Verifique que nenhuma instância ou rota do app foi criada listando o app:

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

Executar tarefa no app

Ao executar uma tarefa no app, é possível e opcional especificar um comando de início com a flag --command. Se nenhum comando de início for especificado, ele usará aquele especificado no app. Quando o app não tem um comando de início especificado, ele procura na configuração de CMD da imagem do contêiner. É preciso haver um comando de início para executar a tarefa.

$ kf run-task helloworld --command "printenv"
Task helloworld-gd8dv is submitted successfully for execution.

O nome da tarefa é gerado automaticamente no servidor da API Kubernetes. Ele tem como prefixo o nome do app e como sufixo uma string arbitrária. O nome da tarefa é um identificador exclusivo para tarefas no mesmo cluster.

Especificar os limites de recursos da tarefa

Os limites de recursos (como núcleos de CPU/limite de memória/cota de disco) podem ser especificados no app (durante kf push) ou durante o comando kf run-task. Os limites especificados no comando kf run-task têm prioridade sobre aqueles especificados no app.

Para especificar os limites de recursos em um app, use as flags --cpu-cores, --memory-limit e --disk-quota no comando kf push:

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

Para substituir esses limites no app, use as flags --cpu-cores, --memory-limit e --disk-quota no comando kf run-task:

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

Especificar um nome de exibição personalizado para uma tarefa

É possível e opcional usar a flag --name para especificar um nome de exibição personalizado em uma tarefa para facilitar a identificação e o agrupamento:

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

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

Como gerenciar tarefas

Use o comando kf tasks APP_NAME para ver todas as tarefas de um app.

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

Cancelar uma tarefa

Use o comando kf terminate-task para cancelar uma tarefa ativa.

Cancele uma tarefa com o nome dela:

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

Ou cancele uma tarefa com APP_NAME + ID da tarefa.

$ kf terminate-task helloworld 2
Task "helloworld-6w6mz" is successfully submitted for termination
  • Observação: é possível cancelar tarefas pendentes e em execução. Não é possível cancelar tarefas concluídas.

As tarefas canceladas têm o status PipelineRunCancelled.

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

Ver registros da tarefa

Use o comando kf logs APP_NAME --task para ver os registros de uma tarefa.

$ kf logs helloworld --task