Você pode executar fluxos de trabalho de curta duração executando-os como Tarefas no Kafka. As tarefas são executadas em "Apps", o que significa que cada tarefa deve ter um app associado. Cada execução de tarefa usa os artefatos de compilação 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 nenhuma rota para o app ou 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 sinalização --task
indica que o app deve ser usado para executar tarefas. Portanto, nenhuma rota será criada no app e não será implantada como um aplicativo de longa duração.
$ kf push helloworld --task
Verifique se nenhuma instância ou rota do app foi criada listando o aplicativo.
$ 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, você tem a opção de especificar um comando inicial usando a sinalização --command
. Se nenhum comando inicial for especificado, ele usará o comando inicial especificado no app. Se o app não tiver um comando inicial especificado, ele pesquisará a configuração de CMD da imagem do contêiner. É preciso ter um comando inicial 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 o prefixo do app e é fixado com uma string arbitrária. O nome da tarefa é um identificador exclusivo do Tarefas no mesmo cluster.
Especificar 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 precedência sobre os limites especificados no app.
Para especificar os limites de recursos em um app, use as sinalizações --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 modificar esses limites no App, use as sinalizações --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
Opcionalmente, você pode usar a sinalização --name
para especificar um nome de exibição personalizado para uma Tarefa para facilitar a identificaçã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
Veja todas as tarefas de um app com o comando kf tasks APP_NAME
.
$ 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
Cancele uma tarefa ativa usando o comando kf terminate-task
.
Cancelar uma tarefa por nome de tarefa.
$ kf terminate-task helloworld-6w6mz
Task "helloworld-6w6mz" is successfully submitted for termination
Ou cancele uma tarefa de APP_NAME + ID da tarefa.
$ kf terminate-task helloworld 2
Task "helloworld-6w6mz" is successfully submitted for termination
- Observação: você só pode cancelar tarefas que estejam pendentes/em execução. As tarefas concluídas não podem ser canceladas.
Tarefas canceladas têm 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
Veja os registros de uma tarefa usando o comando kf logs APP_NAME --task
.
$ kf logs helloworld --task