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
Clone o repositório test-app repo:
git clone https://github.com/cloudfoundry-samples/test-app test-app
cd test-app
Envie o aplicativo.
Envie o aplicativo com o comando
kf push APP_NAME --task
. A sinalização--task
indica que o aplicativo deve ser usado para executar o Tarefas e, portanto, nenhuma rota é criada no aplicativo e não é implantada como um aplicativo de longa duração.kf push test-app --task
Verifique se nenhuma instância ou rota do app foi criada listando o aplicativo:
kf apps
Observe que o aplicativo não foi iniciado e não tem URLs:
Listing Apps in Space: test-space Name Instances Memory Disk CPU URLs test-app stopped 1Gi 1Gi 100m <nil>
Executar uma tarefa no aplicativo
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 test-app --command "printenv"
Você verá algo como isto, confirmando que a tarefa foi enviada:
Task test-app-gd8dv is submitted successfully for execution.
O nome da tarefa é gerado automaticamente, prefixado com o nome do aplicativo e sufixado 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 prioridade em relação aos limites especificados no aplicativo.
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 test-app --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 test-app --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 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>
Gerenciar tarefas
Veja todas as tarefas de um app com o comando 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>
Cancelar uma tarefa
Cancele uma tarefa ativa usando o comando kf terminate-task
:
Cancelar uma tarefa por nome de tarefa:
$ kf terminate-task test-app-6w6mz Task "test-app-6w6mz" is successfully submitted for termination
Ou cancele uma tarefa até
APP_NAME
+ ID da tarefa:$ kf terminate-task test-app 2 Task "test-app-6w6mz" is successfully submitted for termination
Tarefas canceladas têm status 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
Ver registros da tarefa
Use o comando kf logs APP_NAME --task
para ver os registros de uma tarefa:
$ kf logs test-app --task