Lab 7.3 - Jobs e CronJobs
Objetivos do Lab
Ao final deste lab, você será capaz de:
- Criar e executar Jobs para tarefas pontuais.
- Compreender os diferentes tipos de Jobs (completo, paralelo).
- Criar CronJobs para tarefas agendadas.
- Gerenciar o histórico de Jobs.
- Monitorar a execução de Jobs e CronJobs.
Duração Estimada
45-60 minutos
Pré-requisitos
- kubectl instalado e configurado.
- Cluster Kubernetes local funcional (minikube ou kind).
- Conhecimentos sobre Jobs e CronJobs (Capítulo 7.3).
Parte 1: Criação de um Job Simples
Um Job cria um ou mais Pods e garante que um certo número deles termine com sucesso.
Etapa 1.1: Criar um Job Simples
Crie um arquivo job-simple.yaml:
# job-simple.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: job-simple
spec:
template:
spec:
containers:
- name: task
image: busybox:1.35
command: ["/bin/sh", "-c"]
args: ["echo 'Tâche terminée avec succès!' && date"]
restartPolicy: Never # Jobs utilizam Never ou OnFailure
Explicação:
restartPolicy: Never: O Pod não será reiniciado automaticamente se falhar. Para Jobs, useNeverouOnFailure.- O Job cria um Pod que executa o comando e finaliza.
Aplique o Job:
kubectl apply -f job-simple.yaml
Etapa 1.2: Verificar a Execução
Verifique o status do Job:
kubectl get jobs
Verifique os Pods criados:
kubectl get pods -l job-name=job-simple
Após o Pod finalizar, verifique os logs:
kubectl logs -l job-name=job-simple
Você deve ver a mensagem "Tâche terminée avec succès!" e a data.
Etapa 1.3: Verificar o Status Completo
Verifique os detalhes do Job:
kubectl describe job job-simple
Você deve ver que o Job está Complete com 1/1 completado.
Parte 2: Job com Múltiplas Completions
Um Job pode ser configurado para rodar várias vezes (paralelamente ou sequencialmente).
Etapa 2.1: Criar um Job com Completions
Crie um arquivo job-multiple.yaml:
# job-multiple.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: job-multiple
spec:
completions: 5 # O Job deve rodar 5 vezes com sucesso
parallelism: 2 # Executar 2 Pods em paralelo por vez
template:
spec:
containers:
- name: task
image: busybox:1.35
command: ["/bin/sh", "-c"]
args: ["echo 'Tâche $(date +%s)' && sleep 2"]
restartPolicy: Never
Explicação:
completions: 5: O Job deve completar 5 execuções bem-sucedidas.parallelism: 2: Máximo de 2 Pods executando em paralelo por vez.
Aplique o Job:
kubectl apply -f job-multiple.yaml
Etapa 2.2: Observar a Execução
Monitore os Pods em tempo real:
kubectl get pods -l job-name=job-multiple -w
Você deve ver 2 Pods executando em paralelo, depois outros sendo criados até que 5 completions sejam atingidas.
Verifique o status do Job:
kubectl get job job-multiple
Quando finalizar, você deve ver 5/5 completions.
Parte 3: Job com Backoff Limit
O backoffLimit define o número de tentativas em caso de falha.
Etapa 3.1: Criar um Job que Falha
Crie um arquivo job-failure.yaml:
# job-failure.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: job-failure
spec:
backoffLimit: 3 # Máximo de 3 tentativas em caso de falha
template:
spec:
containers:
- name: task
image: busybox:1.35
command: ["/bin/sh", "-c"]
args: ["exit 1"] # Falha intencionalmente
restartPolicy: Never
Aplique o Job:
kubectl apply -f job-failure.yaml
Etapa 3.2: Observar as Tentativas
Monitore os Pods:
kubectl get pods -l job-name=job-failure -w
Você deve ver vários Pods sendo criados (até 3 tentativas) antes do Job ser marcado como Failed.
Verifique o status do Job:
kubectl get job job-failure
kubectl describe job job-failure
Parte 4: Criação de um CronJob
Um CronJob cria Jobs de forma recorrente conforme um agendamento (formato cron).
Etapa 4.1: Criar um CronJob
Crie um arquivo cronjob-example.yaml:
# cronjob-example.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: cronjob-example
spec:
schedule: "*/1 * * * *" # A cada minuto (para teste)
jobTemplate:
spec:
template:
spec:
containers:
- name: task
image: busybox:1.35
command: ["/bin/sh", "-c"]
args: ["echo 'Exécution CronJob - $(date)'"]
restartPolicy: OnFailure
successfulJobsHistoryLimit: 3 # Manter 3 Jobs bem-sucedidos no histórico
failedJobsHistoryLimit: 1 # Manter 1 Job com falha no histórico
Explicação:
schedule: "*/1 * * * *": Formato cron (minuto hora dia mês dia-semana). Aqui, a cada minuto.successfulJobsHistoryLimit: 3: Mantém os 3 últimos Jobs bem-sucedidos.failedJobsHistoryLimit: 1: Mantém o último Job com falha.
Aplique o CronJob:
kubectl apply -f cronjob-example.yaml
Etapa 4.2: Verificar o CronJob
Verifique o status do CronJob:
kubectl get cronjob cronjob-example
# ou
kubectl get cj cronjob-example
Aguarde um minuto e verifique se os Jobs foram criados:
kubectl get jobs
Você deve ver Jobs nomeados como cronjob-example-<timestamp>.
Verifique os Pods criados pelos Jobs:
kubectl get pods
Verifique os logs de um dos Jobs:
JOB_NAME=$(kubectl get jobs -o jsonpath='{.items[0].metadata.name}')
kubectl logs -l job-name=$JOB_NAME
Parte 5: Suspender um CronJob
Você pode suspender temporariamente um CronJob sem excluí-lo.
Etapa 5.1: Suspender o CronJob
Suspenda o CronJob:
kubectl patch cronjob cronjob-example -p '{"spec":{"suspend":true}}'
Verifique se o CronJob está suspenso:
kubectl get cronjob cronjob-example
Você deve ver True na coluna SUSPEND.
Etapa 5.2: Retomar o CronJob
Retome o CronJob:
kubectl patch cronjob cronjob-example -p '{"spec":{"suspend":false}}'
Parte 6: Exemplos de Schedules Cron
Aqui estão alguns exemplos comuns de schedules cron:
schedule: "0 0 * * *" # Todos os dias à meia-noite
schedule: "0 */6 * * *" # A cada 6 horas
schedule: "0 9 * * 1" # Todas as segundas-feiras às 9h
schedule: "0 0 1 * *" # No primeiro dia de cada mês à meia-noite
schedule: "*/30 * * * *" # A cada 30 minutos
Parte 7: Limpeza
Remova os recursos criados:
# Remover os CronJobs (remove também os Jobs associados)
kubectl delete cronjob cronjob-example
# Remover os Jobs
kubectl delete job job-simple job-multiple job-failure
# Remover os Pods restantes (opcional, normalmente removidos automaticamente)
kubectl delete pods -l job-name
Resumo do Lab
Neste lab, você explorou os Jobs e CronJobs. Você aprendeu a criar Jobs para tarefas pontuais, configurar Jobs paralelos, gerenciar falhas com backoffLimit e criar CronJobs para tarefas recorrentes agendadas.
Próximos Passos
O último lab deste módulo mostrará como usar Init Containers e Sidecars para padrões avançados.
Lab 7.4: Init Containers e Sidecars
Lab criado em: Dezembro 2024