slurmrestd

部分: Slurm REST 守护进程 (8)
更新: Slurm REST 守护进程
索引

 

名称

slurmrestd - 通过 REST API 接口访问 Slurm。  

概述

slurmrestd [选项...] <[主机]:端口|unix:/path/to/socket>...  

描述

slurmrestd 是 Slurm 的 REST API 接口。它可以在两种模式下使用:

Inetd 模式: slurmrestd 将读取和写入 STDIO。如果 STDIN 是一个套接字文件描述符,slurmrestd 将检测到这一点并使用相关功能。如果检测到控制 TTY,将自动激活交互模式以提供额外的日志信息。此模式旨在与管道输入、inetd、xinetd 或 systemd 套接字激活一起使用。

监听模式: slurmrestd 将在每个请求的 主机:端口 对或 UNIX 套接字上打开一个监听套接字。

 

选项

[https://][host]:porthttps://][host]:port" href="#OPT_[https://][host]:port">
要监听的主机名和端口。主机 可以是一个可解析的 IPv4/IPv6 IP 或主机名。主机名仅在启动时查找,并且在进程的生命周期内不会更改。主机 是可选的;如果未提供,slurmrestd 将在所有网络接口上监听。https 是可选的;如果未提供,slurmrestd 将不使用 TLS 插件加密流量。如果指定了 https;slurmrestd 将使用(并要求)配置的 TLS 插件来加密流量。

unix:/path/to/socket
在本地 UNIX 套接字上监听。必须有权限在文件系统中创建套接字。

-a <plugin>[,plugin]...
要加载的身份验证插件的逗号分隔列表。默认情况下,将加载所有可用的身份验证插件。
list
显示可以加载的插件列表。

rest_auth/local
auth/munge 激活时,允许通过 UNIX 套接字进行身份验证。
注意: slurmrestd 和客户端进程必须在相同的 UID 下运行,否则客户端请求将被拒绝。

rest_auth/jwt
AuthAltTypes=auth/jwt 激活时,允许通过 TCP 和 UNIX 套接字进行身份验证。用户必须在每个请求中指定以下 HTTP cookie:
X-SLURM-USER-NAME:<用户名>
X-SLURM-USER-TOKEN:<JSON Web Token>
注意: 令牌通常通过调用 "scontrol token" 生成。

-d <plugin>[,plugin]...
数据解析插件的逗号分隔列表,将决定输出格式。可以包括用 '+' 符号表示的可选标志。默认情况下,所有可用的数据解析插件将被加载,而不带任何可选标志。另请参见 -s 以获取控制可用内容的 OpenAPI 插件。 默认值: 所有内置支持的数据解析插件。
list[+flags]
显示可以加载的插件列表。

latest
自动替换为最新插件版本。有关描述和潜在标志,请参见相关插件。

[data_parser/]v0.0.40[+fast]
加载 data_parser/]v0.0.40 插件以格式化数据。仅与 openapi/slurmctldopenapi/slurmdbd 内容插件兼容。
+fast
禁用内置警告和其他逻辑,以严格验证传入请求。应仅在生产环境中与经过充分测试的客户端一起使用,并且可能格式错误的请求将被接受且不会生成有关被忽略或不正确字段或值的警告。

[data_parser/]v0.0.41[+fast][+prefer_refs]
加载 data_parser/]v0.0.41 插件以格式化数据。仅与 openapi/slurmctldopenapi/slurmdbd 内容插件兼容。
+fast
禁用内置警告和其他逻辑,以严格验证传入请求。应仅在生产环境中与经过充分测试的客户端一起使用,并且可能格式错误的请求将被接受且不会生成有关被忽略或不正确字段或值的警告。
+prefer_refs
如果模式仅被引用一次,则优先在生成的 OpenAPI 规范中内联扩展引用的模式(通过 $ref)。

[data_parser/]v0.0.42[+fast][+minimize_refs][+inline_enums]
加载 data_parser/]v0.0.42 插件以格式化数据。仅与 openapi/slurmctldopenapi/slurmdbd 内容插件兼容。
+fast
禁用内置警告和其他逻辑,以严格验证传入请求。应仅在生产环境中与经过充分测试的客户端一起使用,并且可能格式错误的请求将被接受且不会生成有关被忽略或不正确字段或值的警告。
+minimize_refs
如果模式仅被引用一次,则避免在生成的 OpenAPI 规范中内联扩展引用的模式(通过 $ref)。
+inline_enums
避免在生成的 OpenAPI 规范中内联扩展引用的模式(通过 $ref)以处理枚举数组。

[data_parser/]v0.0.43[+fast][+minimize_refs]
加载 data_parser/]v0.0.43 插件以格式化数据。仅与 openapi/slurmctldopenapi/slurmdbd 内容插件兼容。
+fast
禁用内置警告和其他逻辑,以严格验证传入请求。应仅在生产环境中与经过充分测试的客户端一起使用,并且可能格式错误的请求将被接受且不会生成有关被忽略或不正确字段或值的警告。
+minimize_refs
如果模式仅被引用一次,则避免在生成的 OpenAPI 规范中内联扩展引用的模式(通过 $ref)。

-f <file>
从指定文件读取 Slurm 配置。请参见下面的 注意事项

--generate-openapi-spec
将 JSON 格式的 OpenAPI 规范转储到 stdout 并立即退出。加载所需的最小插件。所有 "内容" 字段将仅以 JSON 格式存在,即使 serializer/yaml 插件存在且可加载。通过传递额外参数 -f /dev/null 或在环境中设置 SLURM_CONF=/dev/null,可以禁用加载 slurm.conf(5)。

-g <group id>
在处理客户端请求之前更改组 ID(并删除补充组)。这应该是一个没有写入访问或特殊权限的唯一组。不要将其设置为 SlurmUser 或 root 所属的组,否则守护进程将无法以默认设置启动。

-h, --help
帮助;打印命令选项的简要摘要。

--max-connections <count>
设置一次处理的最大连接数。这与可以同时连接到 slurmrestd 的连接数无关。当启用 SYN cookie 时,内核允许任何数量的连接在任何时候待处理。
注意:
每个连接可能导致一个 RPC 到控制守护进程,可能导致控制器过载。每个连接还可以在连接的生命周期内占用内存。一次处理过多连接可能会消耗更多内存。当增加此值时,进程限制(ulimit(3))可能需要调整。
默认值: 124

-s <plugin>[,plugin]...
要加载的 OpenAPI 插件的逗号分隔列表,将决定可用内容。默认情况下,将加载所有可用的 OpenAPI 插件。另请参见 -d 以获取控制输出格式的数据解析插件。
list
显示可以加载的插件列表。

[openapi/]slurmctld
为加载的数据解析插件提供 'slurm/' 端点。

[openapi/]slurmdbd
为加载的数据解析插件提供 'slurmdb/' 端点。如果集群中未使用 accounting_storage/slurmdbd,则此插件将失败。

-t <线程数>
指定用于处理客户端连接的线程数。在 inetd 模式下被忽略。

-u <用户 id>
在处理客户端请求之前更改用户 ID。这应该是一个没有写入访问或特殊权限的唯一组。不要将此用户设置为 SlurmUser 或 root,否则守护进程将无法以默认设置启动。

-v
详细操作。可以指定多个 v,每个超过第一个的 v 都会增加详细程度,最多可达 6 次(即 -vvvvvv)。更高的详细级别将对性能产生显著影响。

-V
打印版本信息并退出。

 

环境变量

以下环境变量可用于覆盖编译到 slurmrestd 中的设置。

ABORT_ON_FATAL
当检测到致命错误时,使用 abort() 而不是 exit() 来终止进程。这允许在不重新编译 Slurm 的情况下捕获回溯。

SLURM_CONF
Slurm 配置文件的位置。

SLURM_DEBUG_FLAGS
指定 slurmrestd 使用的调试标志。有关完整的标志列表,请参见 slurm.conf(5) 手册页。环境变量优先于 slurm.conf 中的设置。

SLURMRESTD_JSONSLURM_JSON
控制 JSON 序列化:
compact
尽可能紧凑地输出 JSON。

pretty
以美观的格式输出 JSON,以提高可读性。

SLURM_JWT
必须设置此变量以使用 JWT 令牌身份验证。

SLURMRESTD_AUTH_TYPES
设置允许的身份验证类型。请参见 -a

SLURMRESTD_DEBUG
显式设置调试级别。有效值为 0-9,或与 slurm.conf(5) 中的调试选项相同的字符串值。如果在调用期间传递了 -v 参数,则忽略此设置。

SLURMRESTD_DATA_PARSER_PLUGINS
要加载的数据解析插件的逗号分隔列表。请参见 -d

SLURMRESTD_LISTEN
要监听的主机:端口对或 UNIX 套接字的逗号分隔列表。

SLURMRESTD_MAX_CONNECTIONS
设置一次处理的最大连接数。请参见 --max-connections

SLURMRESTD_OPENAPI_PLUGINS
要加载的 OpenAPI 插件的逗号分隔列表。请参见 -s

SLURMRESTD_RESPONSE_STATUS_CODES
在 OpenAPI 规范中生成的逗号分隔的 OpenAPI 方法响应列表。 默认值: 200,default

SLURMRESTD_SECURITY
使用以下逗号分隔的值控制 slurmrestd 的安全功能:
become_user
允许 slurmrestd 以 root 身份运行,以便成为所有请求的请求用户。当与 rest_auth/local 结合使用时,当用户通过命名的 UNIX 套接字连接时,slurmrestd 将 setuid()/setgid() 到该用户/组,然后以给定用户的身份完成所有请求。此模式仅适用于 inet 模式,因为用户更改在进程的生命周期内是永久的。此模式与 rest_auth/jwt 不兼容,建议使用 "-a rest_auth/local" 参数启动 slurmrestd

disable_unshare_files
禁用与父进程共享文件描述符。

disable_unshare_sysv
禁用共享 SYSV 命名空间。

disable_user_check
禁用检查 slurmrestd 是否不是以 root 或 SlurmUser 身份运行,或与 root 或 SlurmUser 的主组一起运行。禁用此检查将允许 slurmrestd 以 root 或 SlurmUser 身份运行,这将允许任何可以与此守护进程通信的人以 root 用户的身份在集群上运行任何操作。

SLURMRESTD_YAMLSLURM_YAML
控制 YAML 序列化:
compact
尽可能紧凑地输出 YAML。

no_tag
输出不带数据类型 !!tags 的 YAML。

pretty
以美观的格式输出 YAML,以提高可读性。

 

信号

SIGINT
slurmrestd 将正常关闭。

SIGPIPE
此信号被明确忽略。

 

注意事项

SPANKclifilter 插件在 slurmrestd 中不受支持,因为它们缺乏线程安全性。活动的 SPANK 插件和 JobSubmitPluginsslurmctld 中独立于 slurmrestd,可以用于强制执行作业提交的站点策略。

 

示例

生成没有配置的 OpenAPI 架构

$ slurmrestd -f /dev/null  --generate-openapi-spec -s slurmdbd,slurmctld -d v0.0.42 > openapi.json

以监听模式启动 slurmrestd,使用 UNIX 套接字:

$ export SLURMRESTD=/var/spool/slurm/restd/rest
$ slurmrestd -s slurmctld,slurmdbd -d v0.0.42 unix:$SLURMRESTD

使用 ping 验证与 slurmctld 的连接,slurmrestd 在监听模式下运行:

$ export $(scontrol token)
$ curl --unix-socket "${SLURMRESTD}" -H "X-SLURM-USER-TOKEN:${SLURM_JWT}" 'http://ignored_with_unix_sockets/slurm/v0.0.42/ping' | jq '.pings'
[
  {
    "hostname": "omicronpersei8",
    "pinged": "UP",
    "latency": 314,
    "mode": "primary"
  }
]

使用 diag 请求验证与 slurmdbd 的连接,slurmrestd 在监听模式下运行:

$ export $(scontrol token)
$ curl --unix-socket "${SLURMRESTD}" -H "X-SLURM-USER-TOKEN:${SLURM_JWT}" 'http://ignored_with_unix_sockets/slurmdb/v0.0.42/diag' | jq '.pings'
1722009793

在 INETD 模式下使用 slurmrestd 查询节点状态:

$ echo -e "GET http://ignored/slurm/v0.0.42/node/host1 HTTP/1.1\r\n" | slurmrestd
HTTP/1.1 200 OK
Content-Length: 3174
Content-Type: application/json

{
  "nodes": [
    {
      "architecture": "x86_64",
      "burstbuffer_network_address": "",
      "boards": 1,
      "boot_time": {
        "set": true,
        "infinite": false,
        "number": 1720820315
      },
      "cluster_name": "",
      "cores": 16,
      "specialized_cores": 0,
      "cpu_binding": 0,
      "cpu_load": 446,
      "free_mem": {
        "set": true,
        "infinite": false,
        "number": 39871
      },
      "cpus": 32,
      "effective_cpus": 32,
      "specialized_cpus": "",
      "energy": {
        "average_watts": 0,
        "base_consumed_energy": 0,
        "consumed_energy": 0,
        "current_watts": {
          "set": false,
          "infinite": false,
          "number": 0
        },
        "previous_consumed_energy": 0,
        "last_collected": 0
      },
      "external_sensors": {},
      "extra": "",
      "power": {},
      "features": [],
      "active_features": [],
      "gpu_spec": "",
      "gres": "gpu:fake1:1(S:0),gpu:fake2:1(S:0)",
      "gres_drained": "N/A",
      "gres_used": "gpu:fake1:0(IDX:N/A),gpu:fake2:0(IDX:N/A)",
      "instance_id": "",
      "instance_type": "",
      "last_busy": {
        "set": true,
        "infinite": false,
        "number": 1722009794
      },
      "mcs_label": "",
      "specialized_memory": 0,
      "name": "host1",
      "next_state_after_reboot": [
        "INVALID"
      ],
      "address": "localhost",
      "hostname": "omicronpersei8",
      "state": [
        "IDLE"
      ],
      "operating_system": "Linux 6.5.0-44-generic #44-Ubuntu SMP PREEMPT_DYNAMIC Fri Jun  7 15:10:09 UTC 2024",
      "owner": "",
      "partitions": [
        "debug"
      ],
      "port": 5015,
      "real_memory": 127927,
      "res_cores_per_gpu": 0,
      "comment": "",
      "reason": "",
      "reason_changed_at": {
        "set": true,
        "infinite": false,
        "number": 0
      },
      "reason_set_by_user": "",
      "resume_after": {
        "set": true,
        "infinite": false,
        "number": 0
      },
      "reservation": "",
      "alloc_memory": 0,
      "alloc_cpus": 0,
      "alloc_idle_cpus": 32,
      "tres_used": "",
      "tres_weighted": 0.0,
      "slurmd_start_time": {
        "set": true,
        "infinite": false,
        "number": 1722009794
      },
      "sockets": 1,
      "threads": 2,
      "temporary_disk": 0,
      "weight": 1,
      "tres": "cpu=32,mem=127927M,billing=32,gres/gpu=2",
      "version": "24.11.0-0rc1"
    }
  ],
  "last_update": {
    "set": true,
    "infinite": false,
    "number": 1722010273
  },
  "meta": {
<<< TRIMMED >>>
  },
  "errors": [],
  "warnings": []
}

向运行在监听模式下的 slurmrestd 提交作业:

$ jq . example_job.json
{
  "job": {
    "script": "#!/bin/bash\nsleep 30",
    "name": "示例作业",
    "account": "sub1",
    "environment": [
      "PATH=/usr/bin/:/bin/"
    ],
    "current_working_directory": "/tmp/",
    "tasks": 12,
    "memory_per_cpu": 100,
    "time_limit": 240
  }
}

$ curl -H "Content-Type: application/json" --data-binary @example_job.json --unix-socket "${SLURMRESTD}" 'http://ignored/slurm/v0.0.42/job/submit'
{
  "job_id": 9,
  "step_id": "batch",
  "job_submit_user_msg": "",
  "meta": {
<<< TRIMMED >>>
  },
  "errors": [],
  "warnings": []
}

$ curl -H "Content-Type: application/json" --data-binary @example_job.json --unix-socket "${SLURMRESTD}" 'http://ignored/slurm/v0.0.42/job/submit'
{
  "job_id": 7,
  "step_id": "batch",
  "job_submit_user_msg": "",
  "meta": {
  },
  "errors": [],
  "warnings": [
    {
      "description": "预期 OpenAPI 类型=array (Slurm 类型=list),但获得 OpenAPI 类型=object (Slurm 类型=dictionary): {      "source": "#/job/environment/"
    }
  ]
}

 

版权

版权 (C) 2019-2022 SchedMD LLC。

此文件是 Slurm 的一部分,一个资源管理程序。 有关详细信息,请参见 <https://slurm.schedmd.com/>。

Slurm 是自由软件;您可以根据自由软件基金会发布的 GNU 通用公共许可证的条款重新分发和/或修改它;许可证的版本 2,或(根据您的选择)任何更高版本。

Slurm 的分发希望它会有用,但不提供任何担保;甚至不提供适销性或特定用途适用性的默示担保。有关详细信息,请参见 GNU 通用公共许可证。

 

另见

slurm.conf(5), slurmctld(8), slurmdbd(8)


 

索引

名称
概述
描述
选项
环境变量
信号
注意事项
示例
版权
另见

此文档由 man2html 使用手册页创建。
时间: 2025年7月2日 13:21:54 GMT