Saltar al contenido principal

Lab 7.3 - Jobs y CronJobs

Objetivos del Lab​

Al final de este laboratorio, usted será capaz de:

  • Crear y ejecutar Jobs para tareas puntuales.
  • Comprender los diferentes tipos de Jobs (completo, paralelo).
  • Crear CronJobs para tareas programadas.
  • Gestionar el historial de Jobs.
  • Supervisar la ejecución de Jobs y CronJobs.

Duración Estimada​

45-60 minutos

Requisitos Previos​

  • kubectl instalado y configurado.
  • Cluster Kubernetes local funcional (minikube o kind).
  • Conocimientos sobre Jobs y CronJobs (Capítulo 7.3).

Parte 1: Creación de un Job Simple​

Un Job crea uno o varios Pods y garantiza que un cierto número de ellos finalicen con éxito.

Paso 1.1: Crear un Job Simple​

Cree un archivo 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 utilizan Never o OnFailure

Explicación:

  • restartPolicy: Never: El Pod no se reiniciará automáticamente si falla. Para los Jobs, use Never o OnFailure.
  • El Job crea un Pod que ejecuta el comando y finaliza.

Aplique el Job:

kubectl apply -f job-simple.yaml

Paso 1.2: Verificar la Ejecución​

Verifique el estado del Job:

kubectl get jobs

Verifique los Pods creados:

kubectl get pods -l job-name=job-simple

Una vez que el Pod haya finalizado, verifique los logs:

kubectl logs -l job-name=job-simple

Debería ver el mensaje "Tâche terminée avec succès!" y la fecha.

Paso 1.3: Verificar el Estado Completo​

Verifique los detalles del Job:

kubectl describe job job-simple

Debería ver que el Job está Complete con 1/1 completado.


Parte 2: Job con Múltiples Completions​

Un Job puede configurarse para ejecutarse varias veces (en paralelo o secuencialmente).

Paso 2.1: Crear un Job con Completions​

Cree un archivo job-multiple.yaml:

# job-multiple.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: job-multiple
spec:
completions: 5 # El Job debe ejecutarse 5 veces con éxito
parallelism: 2 # Ejecutar 2 Pods en paralelo a la vez
template:
spec:
containers:
- name: task
image: busybox:1.35
command: ["/bin/sh", "-c"]
args: ["echo 'Tâche $(date +%s)' && sleep 2"]
restartPolicy: Never

Explicación:

  • completions: 5: El Job debe completar 5 ejecuciones exitosas.
  • parallelism: 2: Máximo 2 Pods se ejecutan en paralelo a la vez.

Aplique el Job:

kubectl apply -f job-multiple.yaml

Paso 2.2: Observar la Ejecución​

Supervise los Pods en tiempo real:

kubectl get pods -l job-name=job-multiple -w

Debería ver 2 Pods ejecutándose en paralelo, luego otros se crearán hasta que se alcancen las 5 completions.

Verifique el estado del Job:

kubectl get job job-multiple

Una vez terminado, debería ver 5/5 completions.


Parte 3: Job con Backoff Limit​

El backoffLimit define el número de intentos en caso de fallo.

Paso 3.1: Crear un Job que Falla​

Cree un archivo job-failure.yaml:

# job-failure.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: job-failure
spec:
backoffLimit: 3 # Máximo 3 intentos en caso de fallo
template:
spec:
containers:
- name: task
image: busybox:1.35
command: ["/bin/sh", "-c"]
args: ["exit 1"] # Falla intencionalmente
restartPolicy: Never

Aplique el Job:

kubectl apply -f job-failure.yaml

Paso 3.2: Observar los Intentos​

Supervise los Pods:

kubectl get pods -l job-name=job-failure -w

Debería ver varios Pods crearse (hasta 3 intentos) antes de que el Job sea marcado como Failed.

Verifique el estado del Job:

kubectl get job job-failure
kubectl describe job job-failure

Parte 4: Creación de un CronJob​

Un CronJob crea Jobs de manera recurrente según un calendario (formato cron).

Paso 4.1: Crear un CronJob​

Cree un archivo cronjob-example.yaml:

# cronjob-example.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: cronjob-example
spec:
schedule: "*/1 * * * *" # Cada minuto (para la prueba)
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 # Mantener 3 Jobs exitosos en el historial
failedJobsHistoryLimit: 1 # Mantener 1 Job fallido en el historial

Explicación:

  • schedule: "*/1 * * * *": Formato cron (minuto hora día mes día-semana). Aquí, cada minuto.
  • successfulJobsHistoryLimit: 3: Mantiene los 3 últimos Jobs exitosos.
  • failedJobsHistoryLimit: 1: Mantiene el último Job fallido.

Aplique el CronJob:

kubectl apply -f cronjob-example.yaml

Paso 4.2: Verificar el CronJob​

Verifique el estado del CronJob:

kubectl get cronjob cronjob-example
# o
kubectl get cj cronjob-example

Espere un minuto, luego verifique que se hayan creado Jobs:

kubectl get jobs

Debería ver Jobs llamados cronjob-example-<timestamp>.

Verifique los Pods creados por los Jobs:

kubectl get pods

Verifique los logs de uno de los Jobs:

JOB_NAME=$(kubectl get jobs -o jsonpath='{.items[0].metadata.name}')
kubectl logs -l job-name=$JOB_NAME

Parte 5: Suspender un CronJob​

Puede suspender temporalmente un CronJob sin eliminarlo.

Paso 5.1: Suspender el CronJob​

Suspenda el CronJob:

kubectl patch cronjob cronjob-example -p '{"spec":{"suspend":true}}'

Verifique que el CronJob esté suspendido:

kubectl get cronjob cronjob-example

Debería ver True en la columna SUSPEND.

Paso 5.2: Reanudar el CronJob​

Reanude el CronJob:

kubectl patch cronjob cronjob-example -p '{"spec":{"suspend":false}}'

Parte 6: Ejemplos de Schedules Cron​

Aquí algunos ejemplos de schedules cron comunes:

schedule: "0 0 * * *"        # Todos los días a medianoche
schedule: "0 */6 * * *" # Cada 6 horas
schedule: "0 9 * * 1" # Todos los lunes a las 9h
schedule: "0 0 1 * *" # El primer día de cada mes a medianoche
schedule: "*/30 * * * *" # Cada 30 minutos

Parte 7: Limpieza​

Elimine los recursos creados:

# Eliminar los CronJobs (también elimina los Jobs asociados)
kubectl delete cronjob cronjob-example

# Eliminar los Jobs
kubectl delete job job-simple job-multiple job-failure

# Eliminar los Pods restantes (opcional, normalmente se eliminan automáticamente)
kubectl delete pods -l job-name

Resumen del Lab​

En este laboratorio, usted ha explorado los Jobs y CronJobs. Ha aprendido a crear Jobs para tareas puntuales, a configurar Jobs paralelos, a gestionar los fallos con backoffLimit, y a crear CronJobs para tareas programadas recurrentes.


Próximos Pasos​

El último laboratorio de este módulo le mostrará cómo utilizar los Init Containers y Sidecars para patrones avanzados.

Lab 7.4: Init Containers y Sidecars


Lab creado el: diciembre 2024