

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

# 使用独立实例作为 AWS PCS 登录节点
<a name="working-with_login-nodes_standalone"></a>

您可以设置独立的 EC2 实例来与 AWS PCS 集群的 Slurm 调度器进行交互。这对于创建登录节点、工作站或专用工作流管理主机非常有用，这些主机可以与 AWS PCS 集群配合使用，但在 AWS PCS 管理之外运行。为此，每个独立实例必须：

1. 安装兼容的 Slurm 软件版本。

1. 能够连接到 AWS PCS 集群的 Slurmctld 终端节点。

1. 使用 AWS PCS 集群的终端节点和密钥正确配置 Slurm Auth 和 Cred Kiosk Daemon (`sackd`)。有关更多信息，请参阅 [Slurm 文档中的 sackd](https://slurm.schedmd.com/sackd.html)。

 本教程帮助您配置连接到 AWS PCS 集群的独立实例。

**Contents**
+ [步骤 1-检索目标 AWS PCS 集群的地址和密码](working-with_login-nodes_standalone_get-addr.md)
+ [步骤 2-启动 EC2 实例](working-with_login-nodes_standalone_launch.md)
+ [步骤 3-在实例上安装 Slurm](working-with_login-nodes_standalone_install-slurm.md)
+ [步骤 4-检索和存储集群密钥](working-with_login-nodes_standalone_get-secret.md)
+ [步骤 5-配置与 AWS PCS 集群的连接](working-with_login-nodes_standalone_configure-connection.md)
+ [步骤 6-（可选）测试连接](working-with_login-nodes_standalone_test.md)

# 步骤 1-检索目标 AWS PCS 集群的地址和密码
<a name="working-with_login-nodes_standalone_get-addr"></a>

使用以下命令检索有关目标 AWS PCS 集群的详细信息。 AWS CLI 在运行命令之前，进行以下替换：
+ *region-code*替换为目标 AWS 区域 集群的运行位置。
+ *cluster-ident*替换为目标集群的名称或标识符

```
aws pcs get-cluster --region region-code --cluster-identifier cluster-ident
```

该命令将返回类似于此示例的输出。

```
{
    "cluster": {
        "name": "get-started",
        "id": "pcs_123456abcd",
        "arn": "arn:aws:pcs:us-east-1:111122223333:cluster/pcs_123456abcd",
        "status": "ACTIVE",
        "createdAt": "2024-12-17T21:03:52+00:00",
        "modifiedAt": "2024-12-17T21:03:52+00:00",
        "scheduler": {
            "type": "SLURM",
            "version": "25.05"
        },
        "size": "SMALL",
        "slurmConfiguration": {
            "authKey": {
                "secretArn": "arn:aws:secretsmanager:us-east-1:111122223333:secret:pcs!slurm-secret-pcs_123456abcd-a12ABC",
                "secretVersion": "ef232370-d3e7-434c-9a87-ec35c1987f75"
            }
        },
        "networking": {
            "subnetIds": [
                "subnet-0123456789abcdef0"
            ],
            "securityGroupIds": [
                "sg-0123456789abcdef0"
            ]
        },
        "endpoints": [
            {
                "type": "SLURMCTLD",
                "privateIpAddress": "10.3.149.220",
                "port": "6817"
            }
        ]
    }
}
```

在此示例中，集群 Slurm 控制器端点的 IP 地址为，`10.3.149.220`并且正在端口上运行。`6817``secretArn`将在后面的步骤中使用来检索集群密钥。IP 地址和端口将在后续步骤中用于配置`sackd`服务。

# 步骤 2-启动 EC2 实例
<a name="working-with_login-nodes_standalone_launch"></a>

**启动 EC2 实例**

1. 打开 [Amazon EC2 控制台](https://console.aws.amazon.com/ec2)。

1. 在导航窗格中，请选择 **Instances**（实例），然后选择 **Launch Instances**（启动实例）以打开新的启动实例向导。

1. （可选）在**名称和标签**部分中，提供实例的名称，例如`PCS-LoginNode`。名称作为资源标签（`Name=PCS-LoginNode`）分配给实例。

1. 在 “**应用程序和操作系统映像**” 部分，为 AWS PCS 支持的操作系统选择一个 AMI。有关更多信息，请参阅 [支持的操作系统](working-with_ami_installers.md#working-with_ami_installers_os)。

1. 在**实例类型**部分中，选择支持的实例类型。有关更多信息，请参阅 [支持的实例类型](working-with_ami_installers.md#working-wth_ami_installers_instance-types)。

1. 在**密钥对**部分，选择要用于实例的 SSH 密钥对。

1. 在**网络设置** 部分中：

   1. 选择**编辑**。

     1. 选择您的 PC AWS S 集群的 VPC。

     1. 对于**防火墙（安全组）**，请选择**选择现有安全组**。

        1. 选择一个允许在实例和目标 AWS PCS 集群的 Slurm 控制器之间进行流量的安全组。有关更多信息，请参阅 [安全组要求和注意事项](working-with_networking_sg.md#working-with_networking_sg-requirements)。

        1. （可选）选择允许对您的实例进行入站 SSH 访问的安全组。

1. 在 “**存储**” 部分，根据需要配置存储卷。确保配置足够的空间来安装应用程序和库，以启用您的用例。

1.  在 “**高级**” 下，选择允许访问集群密钥的 IAM 角色。有关更多信息，请参阅 [获取 Slurm 集群的秘密](working-with_clusters_secrets_get.md)。

1.  在**摘要**窗格中，选择**启动实例**。

# 步骤 3-在实例上安装 Slurm
<a name="working-with_login-nodes_standalone_install-slurm"></a>

当实例启动并变为活动状态时，请使用您的首选机制连接到该实例。使用提供的 Slurm 安装程序将 Slurm 安装 AWS 到实例上。有关更多信息，请参阅 [Slurm 安装程序](working-with_ami_installers.md#working-with_ami_installers_slurm)。

下载 Slurm 安装程序，将其解压缩，然后使用`installer.sh`脚本安装 Slurm。有关更多信息，请参阅 [第 3 步 — 安装 Slurm](working-with_ami_custom_install-slurm.md)。

# 步骤 4-检索和存储集群密钥
<a name="working-with_login-nodes_standalone_get-secret"></a>

这些说明需要 AWS CLI. 有关更多信息，请参阅[版本 2 AWS Command Line Interface 用户指南 AWS CLI中的安装或更新到最新](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)*版本的*。

使用以下命令存储集群密钥。
+ 为 Slurm 创建配置目录。

  ```
  sudo mkdir -p /etc/slurm
  ```
+ 检索、解码和存储集群密钥。在运行此命令之前，请*region-code*替换为运行目标集群的区域，并*secret-arn*替换为[步骤 1](working-with_login-nodes_standalone_get-addr.md) 中`secretArn`检索到的值。

  ```
  aws secretsmanager get-secret-value \
   --region region-code \
   --secret-id 'secret-arn' \
   --version-stage AWSCURRENT \
   --query 'SecretString' \
   --output text | base64 -d | sudo tee /etc/slurm/slurm.key
  ```
**警告**  
在多用户环境中，任何有权访问实例的用户只要能够访问实例元数据服务 (IMDS)，都可能能够获取集群密钥。反过来，这可能允许他们冒充其他用户。考虑仅限根用户或管理员用户访问 IMDS。或者，可以考虑使用另一种不依赖实例配置文件来获取和配置密钥的机制。
+ 设置 Slurm 密钥文件的所有权和权限。

  ```
  sudo chmod 0600 /etc/slurm/slurm.key
  sudo chown slurm:slurm /etc/slurm/slurm.key
  ```
**注意**  
Slurm 密钥必须归运行`sackd`服务的用户和群组所有。

# 步骤 5-配置与 AWS PCS 集群的连接
<a name="working-with_login-nodes_standalone_configure-connection"></a>

要建立与 AWS PCS 集群的连接，请按照以下步骤`sackd`作为系统服务启动。

**注意**  
 如果您使用 Slurm 25.05 或更高版本，则可以使用脚本将登录节点设置为连接到多个集群。有关更多信息，请参阅 [将独立登录节点连接到 AWS PCS 中的多个集群](multi-cluster-login-script.md)。

1. 使用以下命令为`sackd`服务设置环境文件。在运行命令之前，请将*ip-address*和*port*替换为[步骤 1](working-with_login-nodes_standalone_get-addr.md) 中从端点检索到的值。

   ```
   sudo echo "SACKD_OPTIONS='--conf-server=ip-address:port'" > /etc/sysconfig/sackd
   ```

1. 创建用于管理`sackd`流程的`systemd`服务文件。

   ```
   sudo cat << EOF > /etc/systemd/system/sackd.service
   [Unit]
   Description=Slurm auth and cred kiosk daemon
   After=network-online.target remote-fs.target
   Wants=network-online.target
   ConditionPathExists=/etc/sysconfig/sackd
   
   [Service]
   Type=notify
   EnvironmentFile=/etc/sysconfig/sackd
   User=slurm
   Group=slurm
   RuntimeDirectory=slurm
   RuntimeDirectoryMode=0755
   ExecStart=/opt/aws/pcs/scheduler/slurm-25.05/sbin/sackd --systemd \$SACKD_OPTIONS
   ExecReload=/bin/kill -HUP \$MAINPID
   KillMode=process
   LimitNOFILE=131072
   LimitMEMLOCK=infinity
   LimitSTACK=infinity
   
   [Install]
   WantedBy=multi-user.target
   EOF
   ```

1. 设置`sackd`服务文件的所有权。

   ```
   sudo chown root:root /etc/systemd/system/sackd.service && \
       sudo chmod 0644 /etc/systemd/system/sackd.service
   ```

1. 启用该`sackd`服务。

   ```
   sudo systemctl daemon-reload && sudo systemctl enable sackd
   ```

1. 启动 `sackd` 服务。

   ```
   sudo systemctl start sackd
   ```

# 步骤 6-（可选）测试连接
<a name="working-with_login-nodes_standalone_test"></a>

确认`sackd`服务正在运行。示例输出如下。如果有错误，它们通常会出现在这里。

```
[root@ip-10-3-27-112 ~]# systemctl status sackd
[x] sackd.service - Slurm auth and cred kiosk daemon
   Loaded: loaded (/etc/systemd/system/sackd.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2024-12-17 16:34:55 UTC; 8s ago
 Main PID: 9985 (sackd)
   CGroup: /system.slice/sackd.service
           └─9985 /opt/aws/pcs/scheduler/slurm-25.05/sbin/sackd --systemd --conf-server=10.3.149.220:6817

Dec 17 16:34:55 ip-10-3-27-112.ec2.internal systemd[1]: Starting Slurm auth and cred kiosk daemon...
Dec 17 16:34:55 ip-10-3-27-112.ec2.internal systemd[1]: Started Slurm auth and cred kiosk daemon.
Dec 17 16:34:55 ip-10-3-27-112.ec2.internal sackd[9985]: sackd: running
```

使用 Slurm 客户端命令（例如`sinfo`和）确认与集群的连接是否正常运行。`squeue`以下是的输出示例`sinfo`。

```
[root@ip-10-3-27-112 ~]# /opt/aws/pcs/scheduler/slurm-25.05/bin/sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
all up infinite 4 idle~ compute-[1-4]
```

您还应该能够提交工作。例如，类似于此示例的命令将在集群中的 1 个节点上启动交互式作业。

```
/opt/aws/pcs/scheduler/slurm-25.05/bin/srun --nodes=1 -p all --pty bash -i
```