Tarefas

Sobre Tarefas

Diferentemente de "Apps" (processos de longa duração), o Tarefas é executado por um período finito e, em seguida, para. 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 periférico).

Casos de uso do Tarefas

  • Como migrar um banco de dados
  • Como executar um job em lote (programado/não programado)
  • Como enviar um e-mail
  • Transformação de dados (ETL)
  • Processamento de dados (upload/backup/download)

Como o Tarefas funciona

As tarefas são executadas de forma assíncrona e executadas independentemente 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 do código-fonte e criação ainda prosseguem e resultam em uma imagem de contêiner usada para executar o Tarefas depois de enviar o app. Consulte "Ciclos de vida do app" em Como implantar um aplicativo.

O ciclo de vida de uma tarefa é o seguinte:

  1. Você envia um app para executar tarefas com o comando kf push APP_NAME --task.
  2. Você executa uma tarefa no app com o comando kf run-task APP_NAME. A tarefa herda as variáveis de ambiente, vinculações de serviço, alocação de recursos, comando de inicialização e grupos de segurança vinculados ao app.
  3. Kf cria um PipelineRun do Tekton com valores do app e de parâmetros do comando run-task.
  4. O Tekton PipelineRun cria um pod do Kubernetes que inicia um contêiner com base nas configurações do app e da tarefa.
  5. A execução da tarefa é interrompida (a tarefa é encerrada 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.
  6. Se você encerrar uma tarefa antes de ela parar, o Tekton PipelineRun será cancelado (consulte Como cancelar um PipelineRun), o pod subjacente com os registros será excluído. Os registros de Tarefas rescindidas são entregues aos fluxos de registros no nível do cluster, se configurados (por exemplo, Stackdriver ou Fluentd).
  7. 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 gera para 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) enviará os registros de tarefas para o destino de geração de registros configurado.

Como programar tarefas

Conforme descrito acima, o Tarefas pode ser executado de maneira assíncrona usando o comando kf run-task APP_NAME. Outra opção é programar o Tarefas para execução. Primeiro, crie um job usando o comando kf create-job e, em seguida, programe-o com o comando kf schedule-job JOB_NAME. É possível programar esse job para executar tarefas automaticamente com base em uma programação unix-cron especificada.

Como as tarefas são programadas

Crie e programe um job para executar a tarefa. Um job descreve a tarefa a ser executada e gerencia automaticamente a criação dela.

As tarefas são criadas dentro da programação, mesmo que as execuções anteriores ainda estejam em andamento. Se, por algum motivo, alguma execução for perdida, 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 programado ainda estarão sujeitas à política de retenção de tarefas.

Diferenças em relação ao PCF Scheduler

O PCF Scheduler permite várias programações para um único job, enquanto o Kf é compatível com apenas uma programação por job. É possível replicar o comportamento do PCF Scheduler criando vários jobs, um para cada programação.