创建作业
使用 UI、CLI 或 API 创建和管理作业
您可以通过以下任何方式创建和管理 DC/OS 群集的作业:
DC/OS UI 仅提供通过dcos job
CLI 和作业 API 提供的作业相关功能子集的访问权限。对于更多高级作业配置和活动,请使用 CLI dcos job
命令或 作业 API。
DC/OS 应用程序编程接口 (API) 提供可通过 DC/OS UI 和 CLI 访问的基础功能。在大多数情况下,只有将其与自定义程序或自动化脚本集成时,才能直接使用 API。
# 使用 DC/OS UI 管理作业
您可以通过 DC/OS UI 交互式地管理最常见的作业相关活动。例如,您可以直接从 UI 中的 作业 选项卡添加、修改、运行和移除作业。
图 1 -“作业”选项卡和作业列表
### 分画面屏幕
请注意,在所有 作业 UI 配置屏幕中,您可以选择单独查看 UI,或在 UI 和 JSON 编辑器 窗口之间分割屏幕。在对 作业 配置选项的以下讨论中,我们将向您介绍分画面屏幕,以便您能看到它们如何共同工作的,但您也可以始终选择自己使用 UI。要调用 JSON 编辑器,请单击 提交 按钮旁边的 JSON 编辑器 切换开关。
对任一界面作出的编辑都会立即反映在另一个界面中。例如,如果您在左侧 UI 的任何字段中输入一个值,它将被添加到右侧的 JSON 文件中。
要消除 JSON 编辑器 屏幕,请再次单击切换按钮。
图 2 - 分画面屏幕
## 添加作业
在 DC/OS UI 中创建作业的方法有两种。
- 如果未配置任何作业,“作业”屏幕将包含一个指出您没有活动作业的通知,并显示 创建作业按钮。
- 无论您是否有活动的作业,您始终都可以单击右上角的 + 标志来创建新的作业。
名称 | 说明 |
---|---|
常规 | 设置最基本的作业设置,如作业标识符、CPU、内存和磁盘要求。 |
容器运行时 | 指定作业运行是否使用通用容器运行时或 Docker 引擎。 |
计划 | 为您的作业设置计划。您可以使用 cron 格式。 |
环境 | 指定要附加到每个作业实例的环境变量。 |
卷 | 通过设置持久卷来配置有状态的作业。 |
放置 | 指定分域和分区中代理节点的放置以获得高可用性,或者将能力扩展到新分域。 |
运行配置 | 作业的高级设置。 |
密钥 | 设置一个密钥存储库,以保护私钥、API 令牌等重要值。 |
- 单击 提交 以创建作业。
- 通过单击 作业,验证您是否已添加新作业。 图 15. 作业列表
marketing.myjob
来添加作业,可在 marketing
作业组中创建新的 myjob
。在 DC/OS Enterprise 中,您可以使用作业组实现细粒度用户访问。
如需更多关于通过作业组控制作业访问权限的信息,请参阅 授予对作业的访问权限。
## 查看、修改或删除特定作业
您可以查看和修改与作业相关的信息,包括通过 DC/OS UI 交互式运行历史和配置设置的详细信息。从 作业 选项卡,单击作业名称。然后您可以使用右上角的菜单编辑、运行、禁用或删除选定的作业。
图 16. 查看和修改作业详细信息
当作业正在运行时,您可以单击作业实例深入查看 详细信息、文件 和 日志 数据。
您可以看到 编辑作业 屏幕包含与 新作业 屏幕相同的配置选项卡:
图 17 - 编辑作业屏幕上的一般配置选项卡
# 使用 DC/OS CLI 管理作业
您可以使用 dcos job
命令从 DC/OS CLI 中创建和管理作业。若要查看带有使用信息的可用命令的完整列表,请运行 dcos job —help
或查阅 CLI 文档。
## 为新作业创建 JSON 文件
- 在文本编辑器中打开一个新文件,以 JSON 格式创建一个作业文件。
-
在新文件中,指定定义作业所需的基本参数,包括以下内容:
- 用于管理该作业的作业
id
- 要运行的特定命令
- CPU、内存和磁盘要求
- 作业计划
{
"id": "myjob",
"description": "A job that sleeps regularly",
"run": {
"cmd": "sleep 20000",
"cpus": 0.01,
"mem": 32,
"disk": 0
},
"schedules": [
{
"id": "sleep-schedule",
"enabled": true,
"cron": "20 0 ",
"concurrencyPolicy": "ALLOW"
}
]
}
- 用于管理该作业的作业
-
使用易于识别的文件名保存新作业的 JSON 文件。例如,您可以将作业信息保存为
mysleepjob.json
。 -
通过运行类似于以下内容的命令来添加作业:
例如:dcos job add <myjob>.json
dcos job add mysleepjob.json
-
通过运行类似于以下内容的命令来验证是否已添加新作业:
命令显示类似于以下内容的作业列表:dcos job list
ID STATUS LAST RUN
mysleepjob Scheduled N/A
mypingjob Running N/A
concurrencyPolicy
设置为 ALLOW。
## 创建计划专用 JSON 文件
如果您在该作业的 JSON 文件中指定了作业计划,则只能为要运行的作业分配一个计划。
但是,如果希望对多项作业使用相同的计划,则可以专门为计划创建单独的 JSON 文件。然后可以使用 dcos job schedule add <job-id> <schedule-file>
命令将作业与计划关联。
-
必要时,在文本编辑器中打开一个新文件,以 JSON 格式 创建新作业 文件。
您必须使用您为该作业定义的作业
id
将计划 JSON 文件与作业关联。如果希望使用计划专用 JSON 文件来控制作业运行时间,为防止计划冲突或意外的作业运行,不应为作业定义计划参数。 -
在文本编辑器中打开一个新文件,以 JSON 格式创建希望使用的计划。
例如,新计划的 JSON 文件可能与此类似:
{
"concurrencyPolicy": "ALLOW",
"cron": "20 0
",
"enabled": true,
"id": "nightly",
"nextRunAt": "2016-07-26T00:20:00.000+0000",
"startingDeadlineSeconds": 900,
"timezone": "UTC"
}
-
使用易于识别的文件名保存新计划的 JSON 文件。例如,您可以将计划信息保存为
my-cron-def.json
。 -
通过运行类似于以下内容的命令将作业与计划关联:
例如:dcos job schedule add <job-id> <schedule-file>
如果尝试将计划定义添加到已定义了计划的作业中,命令显示类似于以下内容的错误:dcos job schedule add mytestjob my-cron-def.json
Error: 409 - requirement failed: A schedule with id nightly already exists
-
通过运行类似于以下内容的命令来验证是否已添加新作业计划:
此命令显示指定作业的计划信息,类似于以下内容:dcos job schedule show mytestjob
ID CRON ENABLED NEXT RUN CONCURRENCY POLICY
nightly 20 0 * True 2019-04-11T00:20:00.000+0000 ALLOW
- 按需手动
- 根据您定义的计划自动进行
- 在有或无计划的情况下通过自动化按编程方式进行
例如,如果作业 ID 为
dcos job run <job-id>
mytestjob
,则运行:
每次执行命令时,从命令行或通过 DC/OS UI 手动启动作业会触发新作业运行。按需手动触发的作业会忽略并发策略设置。 但是,如果计划用于启动作业,则作业的并发策略会确定是否触发新的作业运行实例。能够控制作业是否同时运行是手动或使用计划触发作业运行之间的主要差异之一。 ## 从命令行移除作业 只要作业没有任何活动的作业实例在运行,您就可以使用命令行程序
dcos job run mytestjob
dcos job remove <job-id>
移除作业。如果作业有任何当前正在运行的实例,则必须停止所有当前活动的作业。停止所有正在运行的作业实例后,可以使用 dcos job remove <job-id>
命令移除该作业。
若要移除作业:
-
通过运行类似以下内容的命令检查活动作业的状态:
dcos job list
-
通过运行以下命令,停止要删除作业的所有正在运行的作业实例并移除该作业:
dcos job remove <job-id> —stop-current-job-runs
-
通过运行以下命令,验证是否已移除指定的作业:
dcos job list
### 修改作业的计划 您可以通过两种方式更新作业计划,具体取决于您的作业是否具有
dcos job update <job-file>.json
<job-file>.json
中指定的计划,或者作业的计划是否保存在单独的文件中。
#### 使用计划修改作业
修改 schedules
的 <job-file>.json
参数。然后运行
#### 使用单独的计划文件修改作业 修改
dcos job update <job-file>.json
<schedule-file>.json
。然后运行以下命令之一:
## 查看作业详细信息 列出所有作业:
dcos job schedule add <job-id> <schedule-file>.json
dcos job schedule remove <job-id> <schedule-id>
dcos job schedule update <job-id> <schedule-file>.json
列出作业之前所有的运行:
dcos job list
若要查看有关作业的详细信息,请运行:
dcos job history <job-id>
若要查看有关作业计划的详细信息,请运行:
dcos job show <job-id>
### 查看作业日志 若要查看工作日志:
dcos job schedule show <job-id>
若要仅获取特定作业的日志,请使用
dcos task log —completed <job-id>
dcos job history <job-id>
中的作业运行 ID
# 使用 DC/OS API 管理作业 您可以通过对作业 API 端点的调用来创建和管理作业。本部分重点介绍通过作业相关的 API 调用来执行的最常见任务。关于作业 API 的更多完整信息,请参阅 [作业 API 参考](http://dcos.github.io/metronome/docs/generated/api.html) 信息。 ## 准备使用 API 调用 本部分中的代码示例说明如何包括作业 API 调用来使用客户端 URL (cURL) 程序执行与作业相关的任务。有关使用
dcos task log —completed <job-run-id>
curl
命令的详细信息,请参阅 curl
手册页。
此外,使用 DC/OS CLI 或 UI 和 API 之间的一个重要区别是如何配置作业计划。DC/OS CLI 和 UI 支持组合 JSON 格式,允许您在作业描述符中指定一个计划。若要使用 Jobs API 计划一个作业,您必须使用两个单独的调用:
- 使用一个调用来添加 未计划 作业。
- 使用另一个调用将特定 计划文件 (
schedule-file.json
) 与作业关联。
使用 API 调用添加作业
以下命令将添加名为 myjob.json
的作业。
curl -X POST -H "Content-Type: application/json" -H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/service/metronome/v1/jobs -d@/Users/<your-username>/<myjob>.json
使用 API 调用移除作业
无论作业是否运行,以下命令将删除作业:
curl -X DELETE -H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/service/metronome/v1/jobs/<myjob>?stopCurrentJobRuns=true
若要只在作业未运行时删除作业,请将 stopCurrentJobRuns
设置为 False
。
使用 API 调用修改或查看作业
以下命令显示所有作业:
curl -H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/service/metronome/v1/jobs
以下命令列出作业运行:
curl -H "Authorization: token=$(dcos config show core.dcos_acs_token)" "$(dcos config show core.dcos_url)/service/metronome/v1/jobs/<myjob>/runs/"
使用以下命令停止运行:
curl -X POST -H "Authorization: token=$(dcos config show core.dcos_acs_token)" "$(dcos config show core.dcos_url)/service/metronome/v1/jobs/<myjob>/runs/20160725212507ghwfZ/actions/stop"
为作业添加计划
以下命令为作业添加计划:
curl -X POST -H "Content-Type: application/json" -H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/service/metronome/v1/jobs/<job-id>/schedules -d@<schedule-file>.json
使用 API 调用启动作业
您可以使用 DC/OS API 以编程方式启动作业。类似于使用 UI 或 CLI 来启动作业,您必须在调用中指定作业标识符。
若要触发作业运行启动,可以使用类似于以下内容的 REST API 调用:
curl -X POST -H "Authorization: token=$(dcos config show core.dcos_acs_token)" $(dcos config show core.dcos_url)/service/metronome/v1/jobs/{jobId}/runs