Tarefas

Acerca do Tasks

Ao contrário das apps (processos de longa duração), as tarefas são executadas durante um período limitado e, em seguida, param. As tarefas são executadas nos seus próprios contentores com base na configuração da app principal e podem ser configuradas para usar recursos limitados (por exemplo, CPU/memória/armazenamento em disco efémero).

Exemplos de utilização do Tasks

  • Migrar uma base de dados
  • Executar uma tarefa em lote (agendada/não agendada)
  • Enviar um email
  • Transformar dados (ETL)
  • Tratamento de dados (carregamento/cópia de segurança/transferência)

Como funciona o Tasks

As tarefas são executadas de forma assíncrona e independente da app principal ou de outras tarefas em execução na mesma app. Uma app criada para executar tarefas não tem rotas criadas nem atribuídas, e o ciclo de vida de Execução é ignorado. Os ciclos de vida do Carregamento do código fonte e da Compilação continuam e resultam numa imagem de contentor usada para executar tarefas após o envio da app (consulte os ciclos de vida da app em Implementar uma aplicação).

O ciclo de vida de uma tarefa é o seguinte:

  1. Envia uma app para executar tarefas com o comando kf push APP_NAME --task.
  2. Executa uma tarefa na app com o comando kf run-task APP_NAME. A tarefa herda as variáveis de ambiente, as associações de serviços, a atribuição de recursos, o comando de arranque e os grupos de segurança associados à app.
  3. O Kf cria um PipelineRun do Tekton com valores da app e parâmetros do comando run-task.
  4. O Tekton PipelineRun cria um Kubernetes Pod que inicia um contentor com base nas configurações na app e na tarefa.
  5. A execução da tarefa é interrompida (a tarefa é terminada ou terminada manualmente) e o pod subjacente é interrompido ou terminado. Os pods de tarefas paradas são preservados e, por isso, os registos de tarefas são acessíveis através do comando kf logs APP_NAME --task.
  6. Se terminar uma tarefa antes de esta parar, o PipelineRun do Tekton é cancelado (consulte Cancelar um PipelineRun) e o pod subjacente, juntamente com os registos, é eliminado. Os registos de tarefas terminadas são enviados para os streams de registo ao nível do cluster, se configurados (por exemplo, Stackdriver, Fluentd).
  7. Se o número de tarefas executadas numa app for superior a 500, as tarefas mais antigas são eliminadas automaticamente.

Política de retenção do Tasks

As tarefas são criadas como recursos personalizados no cluster do Kubernetes. Por isso, é importante não esgotar o espaço da base de dados etcd subjacente. Por predefinição, o Kf mantém apenas as 500 tarefas mais recentes por cada app. Quando o número de tarefas atinge 500, as tarefas mais antigas (juntamente com os pods e os registos subjacentes) são eliminadas automaticamente.

Registo de tarefas e histórico de execuções

Todos os dados ou mensagens que a tarefa envia para STDOUT ou STDERR estão disponíveis através do comando kf logs APP_NAME --task. O mecanismo de registo ao nível do cluster (como o Stackdriver ou o Fluentd) envia os registos de tarefas para o destino de registo configurado.