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.