Executando tarefas automatizadas com CronJob

Esta página mostra como executar tarefas automatizadas usando o objeto CronJob no kubernetes.

Antes de você começar

  • Você precisa ter um cluster do Kubernetes e a ferramenta de linha de comando kubectl deve estar configurada para se comunicar com seu cluster. É recomendado executar esse tutorial em um cluster com pelo menos dois nós que não estejam atuando como hosts de camada de gerenciamento. Se você ainda não possui um cluster, pode criar um usando o minikube ou pode usar um dos seguintes ambientes:

Criando um CronJob

Cron jobs requerem um arquivo de configuração. Aqui está um manifesto para CronJob que executa uma tarefa de demonstração simples a cada minuto:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "* * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            imagePullPolicy: IfNotPresent
            command:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

Execute o exemplo de CronJob usando o seguinte comando:

kubectl create -f https://k8s.io/examples/application/job/cronjob.yaml

A saída é semelhante a esta:

cronjob.batch/hello created

Após criar o cron job, obtenha o status usando este comando:

kubectl get cronjob hello

A saída é semelhante a esta:

NAME    SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
hello   */1 * * * *   False     0        <none>          10s

Como você pode ver pelos resultados do comando, o cron job ainda não agendou ou executou uma tarefa ainda. Observe que a tarefa será criada em cerca de um minuto:

kubectl get jobs --watch

A saída é semelhante a esta:

NAME               COMPLETIONS   DURATION   AGE
hello-4111706356   0/1                      0s
hello-4111706356   0/1           0s         0s
hello-4111706356   1/1           5s         5s

Agora você viu uma tarefa em execução agendada pelo cron job "hello". Você pode parar de observá-lo e visualizar o cron job novamente para ver que ele agendou a tarefa:

kubectl get cronjob hello

A saída é semelhante a esta:

NAME    SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE   AGE
hello   */1 * * * *   False     0        50s             75s

Você deve ver que o cron job hello agendou uma tarefa com sucesso no tempo especificado em LAST SCHEDULE. Existem atualmente 0 tarefas ativas, o que significa que a tarefa foi concluída ou falhou.

Agora, encontre os pods da última tarefa agendada criada e veja a saída padrão de um dos pods.

# Replace "hello-4111706356" with the job name in your system
pods=$(kubectl get pods --selector=job-name=hello-4111706356 --output=jsonpath={.items[*].metadata.name})

Veja os logs do pod:

kubectl logs $pods

A saída é semelhante a esta:

Fri Feb 22 11:02:09 UTC 2019
Hello from the Kubernetes cluster

Deletando um CronJob

Quando você não precisar mais de um cron job, exclua-o com kubectl delete cronjob <cronjob name>:

kubectl delete cronjob hello

Excluindo o cron job remove todas as tarefas e pods que ele criou e impede a criação de novas tarefas. Você pode ler mais sobre como remover tarefas em garbage collection.

Última modificação December 15, 2024 at 6:24 PM PST: Merge pull request #49087 from Arhell/es-link (2c4497f)