Sobre tarefas
Ao contrário dos apps (processos de longa duração), as tarefas são executadas por um período finito e depois param. As tarefas são executadas nos próprios contêineres com base na configuração do app principal e podem ser configuradas para usar recursos limitados (por exemplo, CPU/memória/armazenamento de disco temporário).
Casos de uso das tarefas
- Migrar um banco de dados
- Executar um job em lote (programado ou não)
- Enviar um e-mail
- Transformar dados (ETL)
- Processar dados (upload/backup/download)
Como as tarefas funcionam
As tarefas são executadas de forma assíncrona e são independentes do app pai ou de outras tarefas em execução no mesmo app. Um app criado para executar tarefas não tem rotas criadas ou atribuídas, e o ciclo de vida Executar é ignorado. Os ciclos de vida de upload do código-fonte e compilação ainda prosseguem e resultam em uma imagem de contêiner usada para executar as tarefas depois do push do app. Consulte "Ciclos de vida do app" em Como implantar um aplicativo.
O ciclo de vida de uma tarefa é o seguinte:
- Você envia um app por push para executar tarefas com o comando
kf push APP_NAME --task
. - Você executa uma tarefa no app com o comando
kf run-task APP_NAME
. A tarefa herda as variáveis de ambiente, a vinculações de serviço, a alocação de recursos, o comando de inicialização e os grupos de segurança vinculados ao app. - O Kf cria um PipelineRun do Tekton com valores do app e de parâmetros do comando
run-task
. - O Tekton PipelineRun cria um pod do Kubernetes, que inicia um contêiner com base nas configurações do app e da tarefa.
- A execução da tarefa é interrompida (a tarefa termina ou é encerrada manualmente), o pod subjacente é interrompido ou encerrado. Os pods de tarefas interrompidas são preservados e, portanto, os registros de tarefas são acessíveis por meio do comando
kf logs APP_NAME --task
. - Se você encerrar uma tarefa antes de ela parar, o Tekton PipelineRun será cancelado (consulte Como cancelar um PipelineRun) e o pod subjacente com os registros será excluído. Os registros das tarefas encerradas são entregues aos fluxos de registros no nível do cluster, se configurados (por exemplo, Stackdriver ou Fluentd).
- Se o número de tarefas executadas em um app for maior que 500, as tarefas mais antigas serão excluídas automaticamente.
Política de retenção de tarefas
As tarefas são criadas como recursos personalizados no cluster do Kubernetes. Portanto, é importante não esgotar o espaço do banco de dados etcd
subjacente. Por padrão, o Kf mantém apenas as 500 tarefas mais recentes por app. Quando o número de tarefas chegar a 500, as tarefas mais antigas (junto com os pods e registros subjacentes) serão excluídas automaticamente.
Geração de registros e histórico de execução
Todos os dados ou mensagens que a tarefa envia a STDOUT ou STDERR são disponibilizados usando o comando kf logs APP_NAME --task
. O mecanismo de geração de registros no nível de cluster (como Stackdriver e Fluentd) envia os registros de tarefas ao destino de geração de registros configurado.
Como agendar tarefas
Conforme descrito acima, é possível executar tarefas de forma assíncrona com o comando kf run-task APP_NAME
.
Outra opção é agendar a execução da tarefa. Primeiro, crie um job usando o comando kf create-job
. Depois faça o agendamento com o comando kf schedule-job JOB_NAME
. É possível agendar esse job para executar tarefas automaticamente com base em uma programação unix-cron especificada.
Como as tarefas são agendadas
Crie e agende um job para executar a tarefa. O job descreve a tarefa a ser executada e gerencia automaticamente a criação dela.
As tarefas são criadas dentro do agendamento, mesmo que as execuções anteriores ainda estejam em andamento. Se alguma execução for perdida por algum motivo, somente a última execução perdida será executada quando o sistema se recuperar.
A exclusão de um job exclui todas as tarefas associadas. Tarefas associadas que ainda estiverem em andamento serão excluídas à força sem serem concluídas.
As tarefas criadas por um job agendado ainda estarão sujeitas à política de retenção de tarefas.
Diferenças em relação ao PCF Scheduler
O PCF Scheduler permite vários agendamentos para um único job, enquanto o Kf é compatível com apenas um agendamento por job. É possível replicar o comportamento do PCF Scheduler criando vários jobs, um para cada agendamento.