您可以通过在 Kf 中以任务形式运行短期工作流来执行这些工作流。任务在应用下运行,这意味着每个任务都必须有一个关联的应用。每个任务执行过程都会使用父应用中的构建工件。由于任务是短期的,因此应用不会部署为长时间运行的应用,不应为应用或任务创建路由。
推送用于运行任务的应用
克隆 test-app 代码库:
git clone https://github.com/cloudfoundry-samples/test-app test-app
cd test-app
推送应用。
使用
kf push APP_NAME --task
命令推送应用。--task
标志表示该应用将用于运行任务,因此不会在应用上创建任何路由,它也不会部署为长时间运行的应用:kf push test-app --task
通过列出应用,确认没有创建应用实例或路由:
kf apps
请注意,该应用尚未启动,也没有网址:
Listing Apps in Space: test-space Name Instances Memory Disk CPU URLs test-app stopped 1Gi 1Gi 100m <nil>
在应用上运行任务
当您在应用上运行任务时,可以使用 --command
标志选择性指定启动命令。如果未指定启动命令,则使用应用中指定的启动命令。如果应用未指定启动命令,则查找容器映像的 CMD 配置。必须存在启动命令才能成功运行任务。
kf run-task test-app --command "printenv"
您会看到类似如下的内容,确认任务已提交:
Task test-app-gd8dv is submitted successfully for execution.
系统会自动生成任务名称,该名称以应用名称为前缀,并以任意字符串为后缀。任务名称是任务在同一集群中的唯一标识符。
指定任务资源限制
资源限制(例如 CPU 核心/内存限制/磁盘配额)可以在应用中(在 kf push
期间)或 kf run-task
命令期间指定。kf run-task
命令中指定的限制优先于应用中指定的限制。
如需在应用中指定资源限制,您可以在 kf push
命令中使用 --cpu-cores
、--memory-limit
和 --disk-quota
标志:
kf push test-app --command "printenv" --cpu-cores=0.5 --memory-limit=2G --disk-quota=5G --task
如需在应用中替换这些限制,您可以在 kf run-task
命令中使用 --cpu-cores
、--memory-limit
和 --disk-quota
标志:
kf run-task test-app --command "printenv" --cpu-cores=0.5 --memory-limit=2G --disk-quota=5G
为任务指定自定义显示名
您可以酌情使用 --name
标志为任务指定自定义显示名称,以方便识别/分组:
$ kf run-task test-app --command "printenv" --name foo
Task test-app-6swct is submitted successfully for execution.
$ kf tasks test-app
Listing Tasks in Space: test space
Name ID DisplayName Age Duration Succeeded Reason
test-app-6swct 3 foo 1m 21s True <nil>
管理任务
使用 kf tasks APP_NAME
命令查看应用的所有任务:
$ kf tasks test-app
Listing Tasks in Space: test space
Name ID DisplayName Age Duration Succeeded Reason
test-app-gd8dv 1 test-app-gd8dv 1m 21s True <nil>
取消任务
使用 kf terminate-task
命令取消活动任务:
按任务名称取消任务:
$ kf terminate-task test-app-6w6mz Task "test-app-6w6mz" is successfully submitted for termination
或者,按
APP_NAME
+ 任务 ID 取消任务:$ kf terminate-task test-app 2 Task "test-app-6w6mz" is successfully submitted for termination
已取消的任务的状态为 PipelineRunCancelled
。
$ kf tasks test-app
Listing Tasks in Space: test space
Name ID DisplayName Age Duration Succeeded Reason
test-app-gd8dv 1 test-app-gd8dv 1m 21s True <nil>
test-app-6w6mz 2 test-app-6w6mz 38s 11s False PipelineRunCancelled
查看任务日志
使用 kf logs APP_NAME --task
命令查看任务的日志:
$ kf logs test-app --task