Cronjobs

En esta página, se explica cómo ejecutar CronJobs en Google Kubernetes Engine.

Descripción general

Puedes crear CronJobs para realizar tareas limitadas y relacionadas con la hora que se ejecutan una o varias veces en una hora especificada. CronJobs se puede usar para tareas puntuales automáticas, como las copias de seguridad, los informes y el envío de correos electrónicos.

CronJobs usa objetos trabajo para completar sus tareas. CronJobs crea un objeto trabajo alrededor de una vez por hora de ejecución de su programación.

Los CronJobs se crean, administran, escalan y borran de la misma manera que los trabajos. Para obtener más información sobre los trabajos, consulta Cómo ejecutar un trabajo.

Antes de comenzar

Sigue estos pasos a fin de prepararte para esta tarea:

  • Asegúrate de que habilitaste la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Asegúrate de que instalaste el SDK de Cloud.
  • Establece tu ID del proyecto predeterminado:
    gcloud config set project [PROJECT_ID]
  • Si trabajas con clústeres zonales, establece tu zona de procesamiento predeterminada:
    gcloud config set compute/zone [COMPUTE_ZONE]
  • Si trabajas con clústeres regionales, establece tu región de procesamiento predeterminada:
    gcloud config set compute/region [COMPUTE_REGION]
  • Actualiza gcloud a la versión más reciente:
    gcloud components update

Crea un CronJob

El el ejemplo siguiente de un CronJob, se imprime la hora actual y una string cada un minuto:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo "Hello, World!"
          restartPolicy: OnFailure

CronJobs usa el campo requerido jobTemplate que contiene la especificación de trabajo jobTemplate: spec para los trabajos que crea. La especificación de trabajo contiene una especificación del pod spec: template: spec de los pods que crea para llevar a cabo las tareas que especificas.

CronJobs usa el campo schedule requerido que acepta una hora en el formato crontab estándar de Unix. Todas las horas de CronJob están en UTC:

  • El primer valor indica el minuto (entre 0 y 59).
  • El segundo valor indica la hora (entre 0 y 23).
  • El tercer valor indica el día del mes (entre 1 y 31).
  • El cuarto valor indica el mes (entre 1 y 12).
  • El quinto valor indica el día de la semana (entre 0 y 6).

schedule también acepta * y ? como comodines. La combinación de / con los rangos especifica que la tarea se debe repetir a intervalos regulares. En el ejemplo anterior, */1 * * * * indica que la tarea se debe repetir cada un minuto, todos los días, todos los meses.

Para crear este CronJob, guarda el manifiesto anterior como config.yaml y, a continuación, ejecuta el comando siguiente:

kubectl apply -f cronjob.yaml

Como alternativa, para crear un CronJob sin crear un archivo de manifiesto, usa kubectl run:

kubectl run hello --schedule="*/1 * * * *" --restart OnFailure \
--image busybox -- /bin/sh -c "date; echo Hello, World\!"

Especifica una fecha límite

El campo opcional startingDeadlineSeconds indica el plazo límite (en segundos) para iniciar el CronJob en caso de que no cumpla con su hora programada por alguna razón. Los CronJobs que no se cumplen se consideran errores.

Para especificar un plazo límite, agrega el valor startingDeadlineSeconds al campo de CronJob spec en el archivo del manifiesto. Por ejemplo, en el manifiesto siguiente, se especifica que el CronJob tiene 100 segundos para comenzar:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  startingDeadlineSeconds: 100
  jobTemplate:
    spec:
    ...

Si no especificas un valor startingDeadlineSeconds, no se usa un plazo límite.

Especifica una política de simultaneidad

En el campo opcional concurrencyPolicy, se especifica cómo tratar las ejecuciones simultáneas de un trabajo creado mediante el controlador de CronJob. Debes especificar concurrencyPolicy en el campo spec de CronJob.

concurrencyPolicy admite los valores siguientes:

  • Allow: permite trabajos simultáneos por configuración predeterminada.
  • Forbid: prohíbe trabajos simultáneos y omite la próxima ejecución si la anterior aún no finalizó.
  • Replace: cancela el trabajo en ejecución actual y lo reemplaza con uno nuevo.

Suspende las ejecuciones posteriores

En el campo opcional suspend, cuando se establece en true, se suspenden todas las ejecuciones posteriores. Sin embargo, no suspende las ejecuciones en curso. Debes especificar suspend en el campo spec de CronJob.

El valor predeterminado de suspend es false.

Especifica los límites del historial

El successfulJobsHistoryLimit y failedJobsHistoryLimit opcional especifican la cantidad de trabajos completados y con errores que se deben conservar. Debes especificarlos en el campo spec de CronJob.

Según la configuración predeterminada, successfulJobsHistoryLimit se establece en 3 y failedJobsHistoryLimit se establece en 1. Establecer el valor de cualquiera de estos campos en 0 provoca que ninguno de los trabajos se conserve después de que finalicen.

Inspecciona un CronJob

Para verificar el estado de un CronJob, ejecuta el comando siguiente:

kubectl describe cronjob [CRON_JOB]

Para ver todos los recursos del pod en tu clúster, incluso los pods completados que creó CronJob, ejecuta el comando siguiente:

kubectl get pods -a

La marca -a especifica que se deben mostrar todos los recursos del tipo especificado (en este caso, Pods).

Borra un CronJob

Para borrar un CronJob, ejecuta el comando siguiente:

kubectl delete cronjob [CRON_JOB]

Cuando borras un CronJob, el recolector de elementos no utilizados de Kubernetes borra de forma automática los trabajos asociados y no se inician trabajos nuevos.

Pasos siguientes

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...