Saltar al contenido principal

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 Jobs y CronJobs

¿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 restartPolicy controla si los contenedores fallidos deben reiniciarse (Never o OnFailure).

Estados de un Job

Un Job puede tener los siguientes estados:

  • Pending: El Job está esperando recursos disponibles para ejecutarse.
  • Running: El Job está en ejecución.
  • Succeeded: Todas las ejecuciones se completaron con éxito.
  • Failed: El Job alcanzó 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 Jobs completados o fallidos se deben mantener en el historial con successfulJobsHistoryLimit y failedJobsHistoryLimit.
  • Control de concurrencia: El parámetro concurrencyPolicy define si los Jobs pueden 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.


Volver al índice