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, useNeveroOnFailure.- 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