

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# PCS 中的 Slurm REST API 常见问题解答 AWS
<a name="slurm-rest-api-faq"></a>

本节回答了有关 PCS 中的 Slurm REST API 的 AWS 常见问题。

**什么是 Slurm REST API？**  
Slurm REST API 是一个 HTTP 接口，允许你以编程方式与 Slurm 工作负载管理器进行交互。您可以使用标准 HTTP 方法（例如 GET、POST 和 DELETE）来提交作业、监控集群状态和管理资源，而无需命令行访问集群。

**我可以使用由生成的代币`scontrol token`吗？**  
不是，标准`scontrol token`输出与 AWS PCS 不兼容。PCS Slurm REST API 需要包含包含特定身份声明的丰富的 JWT 令牌，包括用户名 (`sun`)、POSIX 用户 ID (`uid`) 和群组 ()。 IDs `gids`标准 Slurm 代币缺少这些必需的声明，因此会被 API 拒绝。

**我能否从我的 VPC 外部访问 API？**  
不可以，只有在您的 VPC 中使用 Slurm 控制器的私有 IP 地址才能访问 REST API 终端节点。要启用外部访问，请实施诸如带有 VPC Link 的 Application Load Balancer、API Gateway 之类的 AWS 服务，或者建立 VPC 对等或 VPN 连接以实现安全连接。

**为什么 API 使用 HTTP 而不是 HTTPS？**  
Slurm REST API 旨在成为集群私有网络中的内部终端节点。对于需要加密的生产部署，您可以在架构中更高级别实现 SSL/TLS 终止，例如通过 API 网关、负载均衡器或反向代理。

**如何控制对 REST API 的访问权限？**  
配置集群的安全组规则，以限制对 Slurm 控制器上的 6820 端口的访问。将入站规则设置为仅允许来自可信 IP 范围或 VPC 内特定来源的连接，从而阻止对 API 终端节点的未经授权的访问。

**如何轮换 JWT 签名密钥？**  
将您的集群置于没有活动实例的维护模式，然后通过 Secrets Manager 启动 AWS 密钥轮换。轮换完成后，重新启用队列。所有现有 JWT 令牌都将失效，必须使用 Secrets Manager 中的新签名密钥重新生成。

**我需要启用 Slurm 记账功能才能使用 REST API 吗？**  
不，作业提交和监控等基本 REST API 操作不需要 Slurm 记账。但是，整个`/slurmdb`端点都需要记账才能处于活动状态。

**哪些第三方工具可以与 AWS PCS REST API 配合使用？**  
许多现有的 Slurm REST API 客户端都应使用 AWS PCS，包括适用于 Prometheus 的 Slurm Exporter，以及遵循标准 Slurm REST API SlurmWeb 格式的自定义应用程序。但是，依赖身份验证`scontrol token`的工具需要修改才能满足 AWS PCS JWT 的要求。

**使用 REST API 会产生任何额外费用吗？**  
不，启用或使用 Slurm REST API 功能不收取任何额外费用。您只需像往常一样为底层群集资源付费。

**如何对 REST API 进行故障排除？**  
+ **网络连接问题**

  如果您无法访问 API 终端节点，则在向集群控制器发出 HTTP 请求时，您将看到连接超时或 “连接被拒绝” 错误。

  **操作方法**：验证您的客户端位于同一 VPC 中或网络路由正确，并确认您的安全组允许来自您的源 IP 或子网的 6820 端口上的 HTTP 流量。
+ **Slurm REST 身份验证问题**

  如果您的 JWT 令牌无效、过期或签名不正确，API 请求将在响应的错误字段中返回 “协议身份验证错误”。

  错误消息示例：

  ```
  {
  "errors": [
      {
      "description": "Batch job submission failed",
      "error_number": 1007,
      "error": "Protocol authentication error",
      "source": "slurm_submit_batch_job()"
      }
    ]
  }
  ```

  **操作方法**：检查您的 JWT 令牌的格式是否正确，未过期，并使用来自 Secrets Manager 的正确密钥进行签名。验证令牌的格式是否正确且包含所需的声明，以及您使用的身份验证标头格式是否正确。
+ **提交后 Job 无法运行**

  如果您的 JWT 令牌有效但包含不正确的内部结构或内容，则任务可能已进入带有原因代码的 pause `PD` d () 状态。`JobAdminHead``scontrol show job <job-id>`用于检查作业 — 你会看到`JobState=PENDING, Reason=JobHeldAdmin`，和`SystemComment=slurm_cred_create failure, holding job`。

  **怎么做**：根本原因可能是 JWT 中的值错误。根据PCS文档，验证令牌的结构是否正确，并包含所需的声明。
+ **工作目录权限问题**

  如果您的 JWT 中指定的用户身份缺少对作业工作目录的写入权限，则作业将因权限错误而失败，类似于`sbatch --chdir`使用无法访问的目录。

  **操作方法**：确保您的 JWT 令牌中指定的用户对作业的工作目录具有相应的权限。