Tareas

Acerca de las tareas

A diferencia de las aplicaciones (procesos de larga duración), las tareas se ejecutan durante un tiempo finito y, luego, se detienen. Se ejecutan en sus propios contenedores según la configuración de la app principal y se pueden configurar para usar recursos limitados (p. ej., CPU/memoria/almacenamiento efímero de disco).

Casos de uso para las tareas

  • Migra una base de datos
  • Ejecuta un trabajo por lotes (programado o no programado)
  • Envía un correo electrónico
  • Transforma datos (ETL)
  • Procesamiento de datos (carga, copia de seguridad y descarga)

Cómo funcionan las tareas

Las tareas se ejecutan de forma asincrónica y de manera independiente desde la aplicación principal o cualquier otra tarea que se ejecute en la misma aplicación. Una app creada para ejecutar tareas no tiene rutas creadas o asignadas, y se omite el ciclo de vida de ejecución. Los ciclos de vida de carga de código fuente y de compilación continúan y generan una imagen de contenedor que se usa para ejecutar tareas después de enviar la app (consulta los ciclos de vida de la app en la sección Implementar una aplicación).

El ciclo de vida de una tarea es el siguiente:

  1. Envía una aplicación para ejecutar tareas con el comando kf push APP_NAME --task.
  2. Ejecuta una tarea en la app con el comando kf run-task APP_NAME. La tarea hereda las variables de entorno, las vinculaciones del servicio, la asignación de recursos, el comando de inicio y los grupos de seguridad vinculados a la app.
  3. Kf crea un PipelineRun de Tekton con valores de la app y parámetros del comando run-task.
  4. La PipelineRun de Tekton crea un pod de Kubernetes que inicia un contenedor basado en las configuraciones de la aplicación y la tarea.
  5. La ejecución de la tarea se detiene (la tarea finaliza o se termina de forma manual), el Pod subyacente se detiene o se finaliza. Los Pods de las tareas detenidas se conservan y, por lo tanto, se puede acceder a los registros de tareas a través del comando de kf logs APP_NAME --task.
  6. Si finalizas una tarea antes de que se detenga, se cancela la PipelineRun de Tekton (consulta Cancela una PipelineRun) y se borra el Pod subyacente junto con los registros. Los registros de las tareas finalizadas se entregan a las transmisiones de registros a nivel de clúster si están configuradas (p. ej., Stackdriver o Fluentd).
  7. Si la cantidad de tareas que se ejecutan en una app es mayor que 500, se borran automáticamente las tareas más antiguas.

Política de retención de las tareas

Las tareas se crean como recursos personalizados en el clúster de Kubernetes, por lo tanto, es importante no agotar el espacio de la base de datos etcd subyacente. De forma predeterminada, Kf solo conserva las últimas 500 tareas por cada app. Cuando la cantidad de tareas alcance las 500, las tareas más antiguas (junto con los Pods y registros subyacentes) se borrarán automáticamente.

Registro de tareas e historial de ejecución

Cualquier dato o mensaje que la tarea envíe a STDOUT o STDERR está disponible con el comando kf logs APP_NAME --task. El mecanismo de registro a nivel de clúster (como Stackdriver o Fluentd) entregará los registros de la tarea al destino de registro configurado.

Programa las tareas

Como se describió antes, las tareas se pueden ejecutar de forma asíncrona con el comando kf run-task APP_NAME. Como alternativa, puedes programar tareas para su ejecución si primero creas un trabajo con el comando kf create-job y, luego, lo programas con el comando kf schedule-job JOB_NAME. Puedes programar ese trabajo para que ejecute las tareas automáticamente en un programa unix-cron especificado.

Cómo se programan las tareas

Crea y programa un trabajo para ejecutar las tareas. Un trabajo describe las tareas para ejecutar y administrar la creación de tareas de manera automática.

Las tareas se crean según el programa, incluso si las ejecuciones anteriores de la tarea aún se ejecutan. Si se pierde alguna ejecución por algún motivo, solo la ejecución más reciente se ejecuta cuando el sistema se recupera.

Si borras un trabajo, se borran todas las tareas asociadas. Si hay tareas asociadas en curso, se borrarán de manera forzosa sin ejecutarse hasta el final.

Las tareas creadas por un trabajo programado aún están sujetas a la política de retención de tareas.

Diferencias con el programador de PCF

El programador de PCF permite varios programas para un solo trabajo, mientras que Kf solo admite un programa único por trabajo. Puedes replicar el comportamiento del programador de PCF mediante la creación de varios trabajos, uno para cada programa.