Nomad
nomad job run 命令参考
别名:nomad run
job run 命令用于将新作业提交到 Nomad,或更新现有作业。作业文件必须符合 作业规范 格式。
用法
nomad job run [options] <job file>
job run 命令需要一个参数,用于指定包含有效 作业规范 的文件的路径。将读取该文件,并将作业提交到 Nomad 进行调度。如果提供的路径是“-”,则从 STDIN 读取作业文件。否则,从提供的路径处读取它,或从指定的 URL 下载并读取它。Nomad 使用 go-getter 下载作业文件,并支持 go-getter 语法。
默认情况下,在成功提交作业后,`run` 命令将进入交互式监控,并显示日志信息,详细说明调度决策、放置信息以及提供的作业的部署状态(如果适用)(`batch` 和 `system` 作业不会创建部署)。监控将在调度和部署完成或失败后退出。
在成功提交和调度作业后,将返回退出代码 0。如果遇到作业放置问题(不满足的约束、资源耗尽等),则退出代码将为 2。任何其他错误,包括部署失败、客户端连接问题或内部错误,都由退出代码 1 表示。
如果作业指定了区域,`-region` 标志和 `$NOMAD_REGION` 环境变量将被覆盖,并使用作业的区域。
当启用 ACL 时,此命令需要一个具有作业命名空间的 `submit-job` 权限的令牌。挂载 CSI 卷的作业需要一个具有卷命名空间的 `csi-mount-volume` 权限的令牌。挂载主机卷的作业需要一个具有该卷的 `host_volume` 权限的令牌。
选项
-check-index:如果设置,仅当传入的作业修改索引与服务器端版本匹配时,作业才会注册或更新。如果传入的 check-index 值为零,则仅当作业尚不存在时才注册该作业。如果传入非零值,则确保正在从已知状态更新作业。此标志最常与job plancommand 结合使用。-detach:立即返回,而不进行监控。将输出一个新的评估 ID,可使用 eval status 命令查看评估状态。-eval-priority:覆盖因提交此作业而产生的评估的优先级。默认情况下,该优先级设置为作业的优先级。-json:将作业文件解析为 JSON。如果外部对象具有 Job 字段,例如来自“nomad job inspect”或“nomad run -output”,则该字段的值将用作作业。有关详细信息,请参阅 JSON 作业。-hcl2-strict:是否应从 HCL2 解析器产生错误,其中提供了未在根变量中定义的变量。默认值为 true。-output:输出将提交到 HTTP API 的 JSON,而不提交作业。-policy-override:设置标志以强制覆盖任何软强制 Sentinel 策略。-preserve-counts:如果设置,更新任务时会保留现有的任务组计数。-preserve-resources:如果设置,更新任务时会保留现有的任务资源,从而避免自动扩展的更改被覆盖。- 如果设置,任务中的任何服务都将注册到指定的 Consul 命名空间。任何从 Consul KV 读取的企业版
template块都将限定到指定的 Consul 命名空间。必须配置 Consul 以使用 Nomad 工作负载身份进行身份验证。 -vault-namespace:如果设置,传递的 Vault 命名空间将在发送到 Nomad 服务器之前存储在任务中。-var=<key=value>:模板变量,可以多次使用。-var-file=<path>:包含用户变量的 HCL2 文件的路径。-verbose:显示完整信息。-ui:在浏览器中打开任务页面。
示例
调度包含在文件 example.nomad.hcl 中的任务,监控放置和部署
$ nomad job run example.nomad.hcl
==> 2021-06-09T15:22:58-07:00: Monitoring evaluation "52dee78a"
2021-06-09T15:22:58-07:00: Evaluation triggered by job "example"
2021-06-09T15:22:58-07:00: Allocation "5e0b39f0" created: node "3e84d3d2", group "group1"
==> 2021-06-09T15:22:59-07:00: Monitoring evaluation "52dee78a"
2021-06-09T15:22:59-07:00: Evaluation within deployment: "62eb607c"
2021-06-09T15:22:59-07:00: Allocation "5e0b39f0" status changed: "pending" -> "running"
2021-06-09T15:22:59-07:00: Evaluation status changed: "pending" -> "complete"
==> 2021-06-09T15:22:59-07:00: Evaluation "52dee78a" finished with status "complete"
==> 2021-06-09T15:22:59-07:00: Monitoring deployment "62eb607c"
⠦ Deployment "62eb607c" in progress...
2021-06-09T15:22:59-07:00
ID = 62eb607c
Job ID = example
Job Version = 0
Status = running
Description = Deployment is running
Deployed
Task Group Desired Placed Healthy Unhealthy Progress Deadline
cache 2 2 1 0 2021-06-09T15:32:58-07:00
web 1 1 1 0 2021-06-09T15:32:58-07:00
$ nomad job run -check-index 5 example.nomad.hcl
Enforcing job modify index 5: job exists with conflicting job modify index: 6
Job not updated
$ nomad job run -check-index 6 example.nomad.hcl
==> 2021-06-09T16:57:29-07:00: Monitoring evaluation "5ef16dff"
2021-06-09T16:57:29-07:00: Evaluation triggered by job "example"
2021-06-09T16:57:29-07:00: Allocation "6ec7d16f" modified: node "6e1f9bf6", group "cache"
==> 2021-06-09T16:57:30-07:00: Monitoring evaluation "5ef16dff"
2021-06-09T16:57:30-07:00: Evaluation within deployment: "62eb607c"
2021-06-09T16:57:30-07:00: Evaluation status changed: "pending" -> "complete"
==> 2021-06-09T16:57:30-07:00: Evaluation "5ef16dff" finished with status "complete"
==> 2021-06-09T16:57:30-07:00: Monitoring deployment "62eb607c"
✓ Deployment "62eb607c" successful
2021-06-09T16:57:30-07:00
ID = 62eb607c
Job ID = example
Job Version = 2
Status = successful
Description = Deployment completed successfully
Deployed
Task Group Desired Placed Healthy Unhealthy Progress Deadline
cache 1 1 1 0 2021-06-09T17:07:00-07:00
调度包含在 example.nomad.hcl 中的任务并立即返回
$ nomad job run -detach example.nomad.hcl
Job registration successful
Evaluation ID: e18819c1-b83d-dc17-5e7b-b6f264990283
调度一个无法成功放置的任务。这将导致调度失败,并打印出放置的详细信息
$ nomad job run failing.nomad.hcl
==> 2021-06-09T16:49:00-07:00: Monitoring evaluation "2ae0e6a5"
2021-06-09T16:49:00-07:00: Evaluation triggered by job "example"
==> 2021-06-09T16:49:01-07:00: Monitoring evaluation "2ae0e6a5"
2021-06-09T16:49:01-07:00: Evaluation within deployment: "db0c5e57"
2021-06-09T16:49:01-07:00: Evaluation status changed: "pending" -> "complete"
==> 2021-06-09T16:49:01-07:00: Evaluation "2ae0e6a5" finished with status "complete" but failed to place all allocations:
2021-06-09T16:49:01-07:00: Task Group "cache" (failed to place 1 allocation):
* Class "foo" filtered 1 nodes
* Constraint "${attr.kernel.name} = linux" filtered 1 nodes
2021-06-09T16:49:01-07:00: Evaluation "67493a64" waiting for additional capacity to place remainder
==> 2021-06-09T16:49:01-07:00: Monitoring deployment "db0c5e57"
⠧ Deployment "db0c5e57" in progress...
2021-06-09T16:49:03-07:00
ID = db0c5e57
Job ID = example
Job Version = 8
Status = running
Description = Deployment is running
Deployed
Task Group Desired Placed Healthy Unhealthy Progress Deadline
cache 1 0 0 0 N/A
调度系统作业时的示例输出,该作业不会创建部署
$ nomad job run example.nomad.hcl
==> 2021-06-14T09:25:08-07:00: Monitoring evaluation "88a91284"
2021-06-14T09:25:08-07:00: Evaluation triggered by job "example"
2021-06-14T09:25:08-07:00: Allocation "03501797" created: node "7849439f", group "cache"
==> 2021-06-14T09:25:09-07:00: Monitoring evaluation "88a91284"
2021-06-14T09:25:09-07:00: Evaluation status changed: "pending" -> "complete"
==> 2021-06-14T09:25:09-07:00: Evaluation "88a91284" finished with status "complete"
常规选项
-address=<addr>:Nomad 服务器的地址。如果已设置,则会覆盖NOMAD_ADDR环境变量。默认值为http://127.0.0.1:4646。-region=<region>:要转发命令到的 Nomad 服务器的区域。如果已设置,则会覆盖NOMAD_REGION环境变量。默认值为 Agent 的本地区域。-namespace=<namespace>:与命名空间关联的查询和操作的目标命名空间。如果已设置,则会覆盖NOMAD_NAMESPACE环境变量。如果设置为'*',则支持此功能的子命令将查询用户授权的所有命名空间。默认值为“default”命名空间。-no-color:禁用彩色命令输出。或者,可以设置NOMAD_CLI_NO_COLOR。此选项优先于-force-color。-force-color:强制彩色命令输出。当常规终端检测失败时,可以使用此选项。或者,可以设置NOMAD_CLI_FORCE_COLOR。如果同时使用-no-color,则此选项无效。-ca-cert=<path>:用于验证 Nomad 服务器 SSL 证书的 PEM 编码 CA 证书文件的路径。如果已设置,则会覆盖NOMAD_CACERT环境变量。-ca-path=<path>:用于验证 Nomad 服务器 SSL 证书的 PEM 编码 CA 证书文件目录的路径。如果同时指定了-ca-cert和-ca-path,则使用-ca-cert。如果已设置,则会覆盖NOMAD_CAPATH环境变量。-client-cert=<path>:用于与 Nomad 服务器进行 TLS 身份验证的 PEM 编码客户端证书的路径。必须同时指定-client-key。如果已设置,则会覆盖NOMAD_CLIENT_CERT环境变量。-client-key=<path>:与-client-cert客户端证书匹配的未加密 PEM 编码私钥的路径。如果已设置,则会覆盖NOMAD_CLIENT_KEY环境变量。-tls-server-name=<value>:通过 TLS 连接时要用作 SNI 主机的服务器名称。如果已设置,则会覆盖NOMAD_TLS_SERVER_NAME环境变量。-tls-skip-verify:不要验证 TLS 证书。强烈不建议这样做。如果设置了NOMAD_SKIP_VERIFY,也会跳过验证。-token: 用于对 API 请求进行身份验证的 ACL 令牌的 SecretID。如果设置,则会覆盖NOMAD_TOKEN环境变量。