Cronjobs

Nesta página, explicamos como executar CronJobs no Google Kubernetes Engine.

Visão geral

Crie CronJobs para executar tarefas finitas e relacionadas ao tempo em que são executadas uma ou várias vezes de acordo com o que você especificar. Use CronJobs em tarefas automáticas e rápidas como backups, geração de relatórios e envio de e-mails.

Os CronJobs usam objetos job para concluir as tarefas. Eles criam um objeto job uma vez a cada tempo de execução da respectiva programação.

Os CronJobs são criados, gerenciados, escalonados e excluídos da mesma forma que os jobs. Para saber mais sobre os jobs, consulte Como executar um job.

Antes de começar

Prepare-se para a tarefa tomando as seguintes medidas:

  • Verifique se você ativou a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Verifique se o SDK do Cloud está instalado.
  • Defina o código padrão do projeto:
    gcloud config set project [PROJECT_ID]
  • Se você estiver trabalhando com clusters zonais, defina a zona de computação padrão:
    gcloud config set compute/zone [COMPUTE_ZONE]
  • Se você estiver trabalhando com clusters regionais, defina a região de computação padrão:
    gcloud config set compute/region [COMPUTE_REGION]
  • Atualize o gcloud para a versão mais recente:
    gcloud components update

Como criar um CronJob

Veja um exemplo de um CronJob que imprime a hora atual e uma string por minuto:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo "Hello, World!"
          restartPolicy: OnFailure

Os CronJobs usam o campo jobTemplate requerido, que contém uma especificação do job, jobTemplate: spec, para os jobs criados. A especificação do job contém uma especificação de pod, spec: template: spec. Assim, os pods criados por ele executam as tarefas que você definir.

Os CronJobs usam o campo schedule obrigatório, que aceita horas no formato crontab padrão do Unix. Todos os horários de CronJob estão em UTC:

  • O primeiro valor indica o minuto (entre 0 e 59).
  • O segundo valor indica a hora (entre 0 e 23).
  • O terceiro valor indica o dia do mês (entre 1 e 31).
  • O quarto valor indica o mês (entre 1 e 12).
  • O quinto valor indica o dia da semana (entre 0 e 6).

O schedule também aceita * e ? como caracteres curinga. Combinar / com intervalos especifica que a tarefa se repetirá em um intervalo regular. No exemplo acima, */1 * * * * indica que a tarefa se repetirá a cada minuto de cada dia de cada mês.

Para criar esse CronJob, salve o manifesto acima como cronjob.yaml execute o comando a seguir:

kubectl apply -f cronjob.yaml

Como alternativa para criar um CronJob sem gerar um arquivo de manifesto, use kubectl run:

kubectl run hello --schedule="*/1 * * * *" --restart OnFailure \
--image busybox -- /bin/sh -c "date; echo Hello, World\!"

Como especificar um prazo

O campo opcional startingDeadlineSeconds indica a data limite (em segundos) para iniciar o CronJob se ele perder sua hora programada por qualquer motivo. Os CronJobs ausentes são considerados falhas.

Para especificar um prazo, adicione o valor startingDeadlineSeconds para o campo spec do CronJob no arquivo de manifesto. Por exemplo, o seguinte manifesto especifica que o CronJob tem 100 segundos para começar:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  startingDeadlineSeconds: 100
  jobTemplate:
    spec:
    ...

Se você não especificar um valor startingDeadlineSeconds, nenhum prazo será usado.

Como especificar uma política de simultaneidade

O campo opcional de concurrencyPolicy especifica como tratar execuções simultâneas de um job criado pelo controlador do CronJob. Você especifica concurrencyPolicy no campo spec do CronJob.

concurrencyPolicy aceita os seguintes valores:

  • Allow: permite jobs simultâneos. Padrão.
  • Forbid: proíbe jobs simultâneos e pula a próxima execução se a execução anterior ainda não tiver terminado.
  • Replace: cancela o job atual e o substitui por um novo.

Como suspender execuções subsequentes

O campo de suspend opcional, quando configurado como true, suspende todas as execuções subsequentes. Ele não suspende as execuções atuais. Você especifica suspend no campo spec do CronJob.

O valor padrão de suspend é false.

Como especificar limites de histórico

Os itens opcionais successfulJobsHistoryLimit e failedJobsHistoryLimit especificam o número de jobs concluídos e com falha que serão mantidos. Você especifica esses campos no campo spec do CronJob.

Por padrão, successfulJobsHistoryLimit é definido como 3 e failedJobsHistoryLimit é definido como 1. Definir o valor de qualquer um desses campos como 0 faz com que nenhum dos jobs seja mantido após o término.

Como inspecionar um CronJob

Para verificar o status de um CronJob, execute o comando a seguir:

kubectl describe cronjob [CRON_JOB]

Para visualizar todos os recursos do pod no seu cluster, incluindo pods criados pelo CronJob que foi concluído, execute:

kubectl get pods -a

A sinalização -a define que todos os recursos do tipo especificado (neste caso, pods) serão exibidos.

Como excluir um CronJob

Para excluir um CronJob, execute o comando a seguir:

kubectl delete cronjob [CRON_JOB]

Quando você exclui um CronJob, o coletor de lixo do Kubernetes exclui automaticamente os jobs associados e nenhum novo job é iniciado.

Próximas etapas

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Kubernetes Engine