Jobs y CronJobs en Kubernetes
Los Jobs y los CronJobs son recursos en Kubernetes diseñados para automatizar tareas de forma puntual o recurrente. A diferencia de los Pods, los Jobs tienen un número de ejecuciones definido y un tiempo de vida limitado, mientras que los CronJobs permiten programar tareas recurrentes basadas en un cronograma.
Estos recursos son ideales para tareas de mantenimiento, como limpieza de logs, backups de datos o cualquier tarea que no requiera ejecución continua.
Dentro vídeo: https://youtu.be/DJGkIhNxE94

¿Qué es un Job?
Un Job en Kubernetes asegura que un conjunto de tareas se ejecuten una cantidad específica de veces. Una vez que se completan todas las ejecuciones, el Job finaliza.
Ejemplo básico de un Job
apiVersion: batch/v1
kind: Job
metadata:
name: test-job
spec:
completions: 5 # Número de ejecuciones deseadas
backoffLimit: 3 # Número máximo de reintentos en caso de fallo
template:
spec:
containers:
- name: test
image: busybox
command: ["/bin/sleep"]
args: ["3"] # Simula una tarea que dura 3 segundos
restartPolicy: Never
Características principales de un Job
- Control de ejecuciones: Puedes definir cuántas veces debe ejecutarse la tarea utilizando el parámetro
completions. - Reintentos automáticos: Si una tarea falla, Kubernetes puede reintentarla automáticamente según el valor de
backoffLimit. - Política de reinicio: El parámetro
restartPolicycontrola si los contenedores fallidos deben reiniciarse (NeveroOnFailure).
Estados de un Job
Un Job puede tener los siguientes estados:
- Pending: El
Jobestá esperando recursos disponibles para ejecutarse. - Running: El
Jobestá en ejecución. - Succeeded: Todas las ejecuciones se completaron con éxito.
- Failed: El
Jobalcanzó el límite de reintentos sin éxito.
¿Qué es un CronJob?
Un CronJob en Kubernetes permite programar tareas recurrentes basadas en un cronograma. Es ideal para tareas que necesitan ejecutarse en intervalos regulares, como limpiezas diarias o backups semanales.
Ejemplo básico de un CronJob
apiVersion: batch/v1
kind: CronJob
metadata:
name: test-cronjob
spec:
schedule: "*/1 * * * *" # Ejecuta la tarea cada minuto
successfulJobsHistoryLimit: 3 # Mantiene un historial de 3 ejecuciones exitosas
failedJobsHistoryLimit: 1 # Mantiene un historial de 1 ejecución fallida
concurrencyPolicy: Forbid # No permite que dos Jobs se ejecuten en paralelo
jobTemplate:
spec:
completions: 1
backoffLimit: 2
template:
spec:
containers:
- name: test
image: busybox
command: ["/bin/sleep"]
args: ["3"]
restartPolicy: Never
Características principales de un CronJob
- Programación flexible: Utiliza la sintaxis de cron para definir cuándo debe ejecutarse la tarea.
- Historial de ejecuciones: Puedes controlar cuántos
Jobscompletados o fallidos se deben mantener en el historial consuccessfulJobsHistoryLimityfailedJobsHistoryLimit. - Control de concurrencia: El parámetro
concurrencyPolicydefine si losJobspueden ejecutarse en paralelo (Allow), deben esperar a que termine el anterior (Forbid), o si se cancela el anterior antes de iniciar uno nuevo (Replace).
Explicación del parámetro schedule
La sintaxis de schedule sigue el formato cron:
# ┌───────────── minuto (0 - 59)
# │ ┌───────────── hora (0 - 23)
# │ │ ┌───────────── día del mes (1 - 31)
# │ │ │ ┌───────────── mes (1 - 12)
# │ │ │ │ ┌───────────── día de la semana (0 - 6) (domingo a sábado)
# │ │ │ │ │
# * * * * *
Ejemplos comunes:
@daily: Ejecuta la tarea una vez al día.@hourly: Ejecuta la tarea una vez por hora.@weekly: Ejecuta la tarea una vez por semana.
Continuaremos en el siguiente capítulo viendo los servicios y cómo exponer aplicaciones en Kubernetes.
- Lista de vídeos en Youtube: Curso Kubernetes