运行作业
创建作业后,可以根据作业的定义来运行该作业,也可以使用覆盖属性来运行该作业。 从控制台或使用 CLI 运行作业。
每次作业运行时,引用的容器映像的最新版本都将用于作业运行,除非为该映像指定了标记。 如果为映像指定了标记,那么标记的映像将用于作业运行。
如果可能,将以并行方式运行已提交的批处理作业。 如果提交作业的数量或大小超过了配置的配额限制(如运行实例的最大数量),Code Engine 就会排队等候作业,并延迟运行作业,直到有足够的作业完成为止。 有关批处理作业的更多信息,请参阅 批处理作业工作量。 有关内存和 CPU 等作业配额和限制的更多信息,请参阅 Code Engine 的限制和配额。
订阅创建的工作运行将在十分钟后自动删除。 有关预订的更多信息,请参阅 预订入门。
一周后,自动删除已完成的工作。
从控制台运行作业
创建作业时,可以立即运行该作业。 但是,您可以随时提交和重新提交作业。 您还可以提交或重新提交先前创建的作业。
- 打开 Code Engine 控制台。
- 从导航菜单中选择项目。 选择项目作为当前上下文。
- 从“概述”页面中,从“摘要”部分中选择“作业”或从导航菜单中选择“作业”。
- 单击 作业 选项卡,然后单击要运行的作业的名称。
- 单击 提交作业 以打开“提交作业”对话框。 复审并 (可选) 更改缺省配置值,例如实例,CPU,内存,作业重试次数和作业超时。 有关这些选项的更多信息,请参阅 用于创建和运行作业的选项。
- 单击 提交作业 以运行作业。 系统会在作业详细信息页面上显示作业实例的状态。
- 如果您的作业出现任何运行失败的情况,请排除故障,然后点击 “重新运行失败的索引”,为失败的索引再次运行作业。 在“提交工作”面板中,查看并选择更改配置值。 Array索引部分会自动列出运行失败的作业实例的索引。 复审并 (可选) 更改配置值后,单击 提交作业 以运行作业。
如需排除常见作业运行索引错误,请参阅 了解作业运行索引失败的原因。
您也可以重新运行现有的作业。 要再次运行特定作业运行,请单击 作业运行 选项卡,然后单击要使用的作业运行的名称。 单击 重新运行 以再次运行此作业。
您可以在添加日志记录功能之后查看作业日志。 有关更多信息,请参阅查看日志。
每当作业运行时,都会自动将 JOB_INDEX
环境变量注入到作业的每个实例中。 有关 Code Engine设置的环境变量的更多信息,请参阅 我看到未创建的 configmap。 我可以删除它们吗?。
使用 CLI 运行作业
准备工作
- 设置 Code Engine 环境。
- 创建作业。
要使用 CLI 运行作业,请使用 jobrun submit
命令。 有关选项的完整列表,请参阅 ibmcloud ce jobrun submit
命令。
通过 CLI,您可以 根据作业配置运行作业,也可以 在不首先创建作业配置的情况下运行作业。
根据作业配置使用 CLI 运行作业
通过创建作业配置,您可以更轻松地多次运行作业。
例如,以下 jobrun submit
命令创建五个新实例以运行在定义的 myjob
作业配置中指定的容器映像。 要引用定义的作业配置,请使用 --job
选项。 虽然如果指定了 --job
选项,那么不需要 --name
选项,但以下示例命令指定 --name
选项以提供此作业运行的名称。
对于作业,cpu
的缺省值为 1
,而 memory
的缺省值为 4G
。 将对每个实例应用资源限制和请求,因此每个实例都将获取 4 G 内存和 1 vCPU。 此作业分配 5 \ * 4 G = 20 G 内存和 5 \ * 1 vCPU = 5 vCPUs。
ibmcloud ce jobrun submit --name testjobrun --job myjob --array-indices "1 - 5"
下表概述了此示例中与 jobrun submit
命令配合使用的选项。 有关该命令及其选项的更多信息,请参阅 ibmcloud ce jobrun submit
命令。
选项 | 描述 |
---|---|
--name |
此作业运行的名称。 如果未指定 --job 值,那么需要 --name 和 --image 值。 使用在项目中唯一的名称。-该名称必须以小写字母数字字符开头和结尾。 -该名称必须不超过 53 个字符,并且可以包含字母,数字,句点 (.) 和连字符 (-)。 |
--job |
这是要运行的作业的名称。 如果未指定 --name 和 --image 值,那么此值是必需的。 |
--array-indices |
指定用于运行作业的实例索引。 指定用连字符 (-) 或逗号 (,) 分隔的索引列表或范围;例如,1,3,6,9 或 1-5,7-8,10 。 最大值是 999999 。 此值是可选的。 默认值为 0 。 |
每当作业运行时,都会自动将 JOB_INDEX
环境变量注入到作业的每个实例中。 有关 Code Engine设置的环境变量的更多信息,请参阅 我看到未创建的 configmap。 我可以删除它们吗?。
使用 CLI 运行作业而不首先创建作业配置
通过 CLI,您可以在不首先创建作业配置的情况下提交作业运行。 您可以在 jobrun submit
和 jobrun resubmit
命令上指定与 job create
命令相同的配置选项。
例如,以下 ibmcloud ce jobrun submit
命令提交作业运行以通过使用 myregistry
访问信息来引用 us.icr.io/mynamespace/myhello_bld
映像。 由于此作业运行未引用定义的作业配置,因此必须为
--name
和 image
选项指定值。 使用 --name
来指定此作业运行的名称,并使用 --image
来提供用于此作业运行的映像的名称。 --array-indices
选项创建五个新实例以运行容器映像。 对于作业运行,cpu
的缺省值为 1
,memory
的缺省值为 4G
。 将对每个实例应用资源限制和请求,因此每个实例都将获取 4 G 内存和 1 vCPU。 此作业运行将分配 5 \ * 4 G = 20 G 内存和 5 \ * 1 vCPU = 5 vCPUs。
ibmcloud ce jobrun submit --name myhellojob-jobruna --image us.icr.io/mynamespace/myhello_bld --registry-secret myregistry --array-indices "1 - 5"
运行 jobrun get -n myhellojob-jobruna
命令以检查作业运行状态。
示例输出
[...]
Name: myhellojob-jobruna
ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name: myproject
Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111
Age: 3m6s
Created: 2021-06-04T11:56:22-04:00
Image: us.icr.io/mynamespace/myhello_bld
Resource Allocation:
CPU: 1
Ephemeral Storage: 400M
Memory: 4G
Registry Secrets:
myregistry
Runtime:
Mode: task
Array Indices: 1 - 5
Array Size: 5
JOP_ARRAY_SIZE Value: 5
Max Execution Time: 7200
Retry Limit: 3
Status:
Completed: 9s
Instance Statuses:
Succeeded: 5
Conditions:
Type Status Last Probe Last Transition
Pending True 16s 16s
Running True 13s 13s
Complete True 9s 9s
Events:
Type Reason Age Source Messages
Normal Updated 11s (x8 over 18s) batch-job-controller Updated JobRun "myhellojob-jobruna"
Normal Completed 11s batch-job-controller JobRun completed successfully
Instances:
Name Running Status Restarts Age
myhellojob-jobruna-1-0 0/1 Succeeded 0 18s
myhellojob-jobruna-2-0 0/1 Succeeded 0 18s
myhellojob-jobruna-3-0 0/1 Succeeded 0 18s
myhellojob-jobruna-4-0 0/1 Succeeded 0 18s
myhellojob-jobruna-5-0 0/1 Succeeded 0 18s
无法从控制台查看通过 CLI 提交 (或重新提交) 但未引用已定义作业配置的作业运行。
使用 CLI 重新提交作业
如果要根据先前作业运行的配置重新提交作业运行,请使用 jobrun resubmit
命令。 此命令需要先前作业运行的名称,并且还允许其他可选参数。 有关选项的完整列表,请参阅 ibmcloud ce jobrun resubmit
命令。
例如,以下 jobrun resubmit
命令重新提交 testjobrun
作业运行。
ibmcloud ce jobrun resubmit --jobrun testjobrun
示例输出
Getting job run 'testjobrun'...
Getting job 'myjob'...
Rerunning job run 'myjob-jobrun-fji48'...
Run 'ibmcloud ce jobrun get -n myjob-jobrun-fji48' to check the job run status.
例如,以下 jobrun resubmit
命令重新提交 myhellojob-jobruna
作业运行,该作业运行是在未首先创建作业配置的情况下运行的。 由于引用的作业运行没有相关作业配置,因此必须指定 --name
选项以指定此作业运行的名称。
ibmcloud ce jobrun resubmit --jobrun myhellojob-jobruna --name myhellojob-jobrunb
运行 jobrun get -n myhellojob-jobrunb
命令以检查作业运行状态。
示例输出
Getting jobrun 'myhellojob-jobrunb'...
[...]
Name: myhellojob-jobrunb
ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name: myproject
Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111
Age: 3m6s
Created: 2021-06-04T11:56:22-04:00
Image: us.icr.io/mynamespace/myhello_bld
Resource Allocation:
CPU: 1
Ephemeral Storage: 400M
Memory: 4G
Registry Secrets:
myregistry
Runtime:
Mode: task
Array Indices: 1 - 5
Array Size: 5
JOP_ARRAY_SIZE Value: 5
Max Execution Time: 7200
Retry Limit: 3
Status:
Completed: 91s
Instance Statuses:
Succeeded: 5
Conditions:
Type Status Last Probe Last Transition
Pending True 96s 96s
Running True 92s 92s
Complete True 91s 91s
Events:
Type Reason Age Source Messages
Normal Updated 93s (x7 over 97s) batch-job-controller Updated JobRun "myhellojob-jobrunb"
Normal Completed 93s batch-job-controller JobRun completed successfully
Instances:
Name Running Status Restarts Age
myhellojob-jobrunb-1-0 0/1 Succeeded 0 97s
myhellojob-jobrunb-2-0 0/1 Succeeded 0 97s
myhellojob-jobrunb-3-0 0/1 Succeeded 0 97s
myhellojob-jobrunb-4-0 0/1 Succeeded 0 97s
myhellojob-jobrunb-5-0 0/1 Succeeded 0 97s
无法从控制台查看通过 CLI 提交 (或重新提交) 但未引用已定义作业配置的作业运行。
后续步骤
-
既然您的作业已创建,请考虑使您的作业由事件驱动。 通过使用事件预订,您可以通过 定期调度 来触发作业,或者将作业设置为对诸如 文件上载 之类的事件作出反应。
-
您可以通过以下 任何 方式 更新作业 及其引用的代码,而与创建或先前更新作业的方式无关。
-
如果您具有容器映像,那么根据 Open Container Initiative(OCI)标准,您只需提供对该映像的引用,这将在创建 (或更新) 作业时指向容器注册表的位置。 您可以从 公共注册表 或 专用注册表 中的映像创建 (或更新) 作业,然后从作业运行中访问引用的映像。
如果使用
job create
命令创建了作业,并且指定了--build-source
选项以从本地或存储库源构建容器映像,并且要将作业更改为指向其他容器映像,那么必须首先从作业中除去该构建的关联。 例如,运行ibmcloud ce job update -n JOB_NAME --build-clear
。 从作业中除去构建的关联后,可以更新作业以引用其他映像。 -
如果要从位于 Git 存储库中的源代码开始,那么可以选择让 Code Engine 负责从源构建映像,并使用 单个 操作创建 (或更新) 作业。 在此场景中,Code Engine 将映像上载到 IBM Cloud® Container Registry。 要了解更多信息,请参阅 从存储库源代码创建作业。 如果要对映像的构建进行更多控制,那么可以选择在创建 (或更新) 作业并运行作业之前使用 Code Engine 来 构建映像。
-
如果是从本地工作站上的源代码开始,那么可以选择让 Code Engine 负责从源构建映像并使用 单个 CLI 命令创建作业。 在此场景中,Code Engine 将映像上载到 IBM Cloud® Container Registry。 要了解更多信息,请参阅 使用 CLI 从本地源代码创建作业。 如果要对映像构建进行更多控制,那么可以选择在创建 (或更新) 作业并运行作业之前使用 Code Engine 来 构建映像。
例如,您可以选择让 Code Engine 在为作业开发源时处理本地源的构建。 然后,在映像成熟后,您可以更新作业以引用所需的特定映像。 您可以根据需要重复此过程。
运行更新后的作业时,所引用容器映像的最新版本将用于作业运行,除非为该映像指定了标记。 如果为映像指定了标记,那么标记的映像将用于作业运行。
-
要查找更多代码示例吗? 请查看 样本 IBM Cloud Code Engine GitHub 存储库。