任务

关于任务

与应用(长时间运行的进程)相比,任务运行的时间有限,然后会停止。任务基于父级应用上的配置在自己的容器中运行,并且可配置为使用有限的资源(例如 CPU/内存/临时磁盘存储空间)。

任务用例

  • 迁移数据库
  • 运行批量作业(计划/未安排)
  • 发送电子邮件
  • 转换数据 (ETL)
  • 处理数据(上传/备份/下载)

任务的工作原理

任务异步执行,独立于父应用或运行于同一应用的其他任务运行。为运行任务创建的应用没有创建或分配路由,并且会跳过运行生命周期。源代码上传构建生命周期仍然会继续,并在推送应用后生成用于运行任务的容器映像(请参阅部署应用中的“应用生命周期”)。

任务的生命周期如下所示:

  1. 使用 kf push APP_NAME --task 命令推送用于运行任务的应用。
  2. 您可以使用 kf run-task APP_NAME 命令在应用上运行任务。任务会继承绑定到应用的环境变量、服务绑定、资源分配、启动命令和安全组。
  3. Kf 使用来自应用的值和 run-task 命令的参数创建 Tekton PipelineRun
  4. Tekton PipelineRun 创建一个 Kubernetes Pod,其会根据应用和任务上的配置启动容器。
  5. 任务执行停止(任务退出或手动终止),底层 Pod 已停止或终止。系统会保留已停止任务的 Pod,因此可通过 kf logs APP_NAME --task 命令访问任务日志。
  6. 如果您在任务停止之前终止该任务,则 Tekton PipelineRun 将被取消(请参阅取消 PipelineRun),底层 Pod 将随日志一起删除。如果已配置集群级层日志记录流(例如 Stackdriver、Fluentd),则系统会将已终止任务的日志传递至这些记录流。
  7. 如果应用上运行的任务数量大于 500 个,则系统会自动删除最旧的任务。

任务保留政策

任务是作为 Kubernetes 集群中的自定义资源创建的,因此,切勿耗尽底层 etcd 数据库的空间。默认情况下,Kf 仅为每个应用保留最新的 500 个任务。当任务数达到 500 时,最早的任务(连同底层 Pod 和日志)将自动删除。

任务日志记录和执行历史记录

通过使用 kf logs APP_NAME --task 命令,任务输出到 STDOUT 或 STDERR 的所有数据或消息均可用。集群级层日志记录机制(例如 Stackdriver、Fluentd)将任务日志发送到配置的日志记录目标位置。