Ku­be­r­ne­tes supervisa ac­ti­va­me­n­te la ejecución de CronJobs y ejecuta acciones definidas por el usuario si se producen errores. La co­n­fi­gu­ra­ción de Cronjobs en Ku­be­r­ne­tes es sencilla a través de archivos YAML.

¿Qué es CronJob en Ku­be­r­ne­tes?

Un CronJob es un método para au­to­ma­ti­zar tareas. Es como un de­s­pe­r­ta­dor que suena a una hora de­te­r­mi­na­da. Los CronJobs pueden co­n­fi­gu­rar­se para que ejecuten au­to­má­ti­ca­me­n­te tareas definidas a horas pre­de­fi­ni­das. Un CronJob puede au­to­ma­ti­zar varios tipos de tareas, tales como como ac­tua­li­zar bases de datos, hacer copias de seguridad de archivos, ejecutar scripts o enviar correos ele­c­tró­ni­cos a in­te­r­va­los regulares. Al integrar CronJobs en Ku­be­r­ne­tes, las tareas pueden su­pe­r­vi­sar­se y co­n­tro­lar­se de forma aislada en co­n­te­ne­do­res.

Consejo

La or­que­s­ta­ción de clústeres con Ku­be­r­ne­tes también es fácil de realizar con IONOS. Con la Cloud Em­pre­sa­rial, obtendrás la última te­c­no­lo­gía de in­frae­s­tru­c­tu­ra como servicio (IaaS) y so­lu­cio­nes adaptadas a tu proyecto.

Co­n­fi­gu­rar de un CronJob en Ku­be­r­ne­tes

La creación de un CronJob es muy similar a la de un job regular en Ku­be­r­ne­tes. Para ello, debes crear un archivo de ma­ni­fie­s­to YAML. Este es un documento es­tru­c­tu­ra­do que contiene todos los detalles re­le­va­n­tes para el CronJob. En este archivo se es­ta­ble­cen pa­rá­me­tros im­po­r­ta­n­tes, como el cro­no­gra­ma para la ejecución del job, los co­n­te­ne­do­res y los comandos exactos que se deben ejecutar en esos co­n­te­ne­do­res.

Crea un archivo YAML

Abre el editor de texto que prefieras para crear el archivo de co­n­fi­gu­ra­ción YAML para el CronJob. Asegúrate de definir el cro­no­gra­ma del CronJob en el formato cron. Añade la de­fi­ni­ción del job, in­clu­ye­n­do la tarea a ejecutar. Luego, guarda el archivo con la extensión .yaml.

apiVersion: batch/v1 
kind: CronJob 
metadata: 
    name: new_cronjob 
spec: 
    schedule: "0     ****    " 
    jobTemplate: 
        spec: 
            template: 
                spec: 
                    containers: 
                    - name: container 
                        image: image:latest 
                        command:    
                     - /bin/sh
yaml

Añade a la es­pe­ci­fi­ca­ción del pod los re­qui­si­tos de recursos y otras co­n­fi­gu­ra­cio­nes, si fuese necesario:

spec: 
    containers: 
    - name: container 
        resources: 
            requests: 
                memory: "64Mi" 
                cpu: "250m" 
            limits: 
                memory: "128Mi" 
                cpu: "500m"
yaml

Activa el CronJob

Ingresa el siguiente comando en una terminal para crear el CronJob en el clúster de Ku­be­r­ne­tes:

kubectl apply -f [filename].yaml
shell

Supervisa el CronJob

Ejecuta el siguiente comando para obtener una lista de los CronJobs exi­s­te­n­tes en Ku­be­r­ne­tes, y el modo de ob­se­r­va­ción (Watch) se encargará de ac­tua­li­zar au­to­má­ti­ca­me­n­te la salida cuando cambie el estado de los CronJobs.

kubectl get cronjob --watch
shell

Sintaxis del cro­no­gra­ma del CronJob

La sintaxis del cro­no­gra­ma para los CronJobs de Ku­be­r­ne­tes se basa en el formato clásico de cron con cinco campos en el siguiente orden: minuto, hora, día del mes, mes y día de la semana. Aquí un breve resumen:

  • Minuto: (0–59)
  • Hora: (0–23)
  • Día del mes: (1–31)
  • Mes: (1–12 o Jan–Dec)
  • Día de la semana: (0–7 o Sun–Sat)

Ca­ra­c­te­res es­pe­cia­les:

  • *: cualquier valor válido para el campo
  • ,: indica varios valores
  • /: indica pasos

Ejemplos:

0 ****: cada hora 15 2 ***: diario a las 2:15 AM 0 0 1 **: el primer día de cada mes a me­dia­no­che 0 0 *3*: diario a me­dia­no­che en marzo 0 2 ** 1: todos los lunes a las 2 AM

Política de co­n­cu­rre­n­cia de CronJob

La política de co­n­cu­rre­n­cia puede es­pe­ci­fi­car­se en la co­n­fi­gu­ra­ción de un CronJob y afecta a cómo se manejan los jobs paralelos dentro del mismo CronJob de Ku­be­r­ne­tes.

  • Allow (pre­de­te­r­mi­na­do): si la política de co­n­cu­rre­n­cia se establece en __Allow__, se iniciará un nuevo job incluso si el job anterior aún no ha fi­na­li­za­do. Esto significa que pueden eje­cu­tar­se varias in­s­ta­n­cias del mismo job al mismo tiempo.
  • Forbid: con esta co­n­fi­gu­ra­ción, no se iniciará un nuevo job si uno anterior aún no ha fi­na­li­za­do. Esto asegura que en un momento dado solo se ejecute una instancia del job.
  • Replace: los jobs no co­m­ple­ta­dos se ca­n­ce­la­rán para que los nuevos puedan continuar. No deben eje­cu­tar­se in­s­ta­n­cias del mismo job al mismo tiempo.

Es­ta­ble­cer un plazo para la ejecución

El campo startingDeadlineSeconds en un CronJob de Ku­be­r­ne­tes indica cuántos segundos después de la hora pro­gra­ma­da un job puede iniciarse como máximo. Si el job no se inicia dentro de este límite de tiempo, se co­n­si­de­ra­rá fallido.

apiVersion: batch/v1 
kind: CronJob 
metadata: 
    name: new_cronjob 
spec: 
    schedule: "0     ****    " 
    startingDeadlineSeconds: 300    
    jobTemplate: 
        spec: 
            template: 
                spec: 
                    containers: 
                    - name: container 
                        image: image:latest 
                        command: 
                     - /bin/sh
yaml

En este ejemplo, el job definido por el CronJob debe iniciarse dentro de los 300 segundos (5 minutos) po­s­te­rio­res al tiempo pro­gra­ma­do; de lo contrario, se co­n­si­de­ra­rá fallido.

Limitar el historial de jobs

En los CronJobs de Ku­be­r­ne­tes, las co­n­fi­gu­ra­cio­nes spec.successfulJobsHistoryLimit y spec.failedJobsHistoryLimit permiten limitar la cantidad de jobs al­ma­ce­na­dos en el historial del CronJob. spec.successfulJobsHistoryLimit es un campo opcional que es­pe­ci­fi­ca cuántos jobs co­m­ple­ta­dos exi­to­sa­me­n­te deben ma­n­te­ne­r­se en el historial. Esto es útil para controlar el uso de recursos y ase­gu­rar­se de que el historial no se so­bre­ca­r­gue con una cantidad excesiva de jobs exitosos. De manera similar, spec.failedJobsHistoryLimit permite controlar la cantidad de jobs fallidos que se mantienen en el historial.

apiVersion: batch/v1beta1 
kind: CronJob 
metadata: 
    name: new_cronjob 
spec: 
    schedule: "0     ****    " 
    successfulJobsHistoryLimit: 3    # Keep only the last 3 successfully completed jobs in history. 
    failedJobsHistoryLimit: 1                    # Keep only the last failed job in history. 
    jobTemplate: 
        spec: 
            template: 
                spec: 
                    containers: 
                    - name: container 
                        image: image:latest 
                        command: 
                     - /bin/sh
yaml

En el ejemplo es­pe­ci­fi­ca­mos mantener solo los últimos tres jobs co­m­ple­ta­dos exi­to­sa­me­n­te y el último job fallido en el historial del CronJob de Ku­be­r­ne­tes new_cronjob.

Errores y solución de problemas de un CronJob en Ku­be­r­ne­tes

En los CronJobs de Ku­be­r­ne­tes pueden pro­du­ci­r­se varios errores, por lo que debes conocer técnicas eficaces de re­so­lu­ción de problemas. A co­n­ti­nua­ción te indicamos algunas fuentes de error comunes y pro­ce­di­mie­n­tos de solución:

El job no se inicia

Cuando un CronJob en Ku­be­r­ne­tes no se inicia, puede haber varias causas. Estas pueden incluir un co­n­te­ne­dor con una imagen no di­s­po­ni­ble o de­fe­c­tuo­sa, así como permisos faltantes para la cuenta de servicio del pod. Para dia­g­no­s­ti­car el problema, revisa los registros del co­n­te­ne­dor con kubectl logs <pod-name>, los eventos del CronJob con kubectl describe cronjob <cronjob-name>, y los eventos del pod con kubectl describe pod <pod-name>. Asegúrate de que la cuenta de servicio tenga los permisos ne­ce­sa­rios revisando los roles y vi­n­cu­la­cio­nes de roles.

Co­n­fi­gu­ra­ción in­co­rre­c­ta del CronJob

Una co­n­fi­gu­ra­ción in­co­rre­c­ta de CronJob puede deberse a errores de sintaxis en el archivo YAML o a co­n­fi­gu­ra­cio­nes inválidas para Schedule y Re­s­ta­r­t­Po­li­cy. Para ide­n­ti­fi­car estos problemas, verifica que el archivo YAML tenga una sintaxis y co­n­fi­gu­ra­cio­nes correctas. Utiliza kubectl describe cronjob <cronjob-name> para obtener in­fo­r­ma­ción detallada sobre la co­n­fi­gu­ra­ción y detectar posibles errores o di­s­cre­pa­n­cias.

Límites de recursos excedidos

El exceso de los límites de recursos puede causar que los CronJobs no se ejecuten co­rre­c­ta­me­n­te. Para so­lu­cio­nar este problema, verifica los límites de recursos en el CronJob y los pods asociados uti­li­za­n­do kubectl describe cronjob <cronjob-name> y kubectl describe pod <pod-name>. Además, puedes mo­ni­to­rear el uso de recursos del clúster con kubectl top nodes y kubectl top pods, ya que pueden pro­po­r­cio­nar­te in­fo­r­ma­ción im­po­r­ta­n­te. Ajusta los límites de recursos según sea necesario en el archivo YAML.

Si te estás iniciando en la gestión de clústeres en Ku­be­r­ne­tes, te re­co­me­n­da­mos el tutorial de Ku­be­r­ne­tes de nuestra guía digital.

Ir al menú principal