

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

# 使用 AWS ParallelCluster
<a name="using-parallelcluster-v3"></a>

**Topics**
+ [AWS ParallelCluster 用户界面](pcui-using-v3.md)
+ [AWS Lambda 中的 VPC 配置 AWS ParallelCluster](lambda-vpc-v3.md)
+ [AWS Identity and Access Management 中的权限 AWS ParallelCluster](iam-roles-in-parallelcluster-v3.md)
+ [网络配置](network-configuration-v3.md)
+ [由配置的登录节点 AWS ParallelCluster](login-nodes-v3.md)
+ [自定义引导操作](custom-bootstrap-actions-v3.md)
+ [使用 Amazon S3](s3_resources-v3.md)
+ [使用竞价型实例](spot-v3.md)
+ [支持的调度器 AWS ParallelCluster](schedulers-v3.md)
+ [共享存储](shared-storage-quotas-integration-v3.md)
+ [标签](resources-tags-v3.md)
+ [监控 AWS ParallelCluster 和日志](monitoring-overview.md)
+ [AWS CloudFormation 自定义资源](cloudformation-v3.md)
+ [Elastic Fabric Adapter](efa-v3.md)
+ [启用 Intel MPI](intelmpi-v3.md)
+ [AWS ParallelCluster API](api-reference-v3.md)
+ [AWS ParallelCluster 适用于 Terraform](terraform-what-is.md)
+ [通过 Amazon DCV 连接到头节点和登录节点](dcv-v3.md)
+ [使用 `pcluster update-cluster`](using-pcluster-update-cluster-v3.md)
+ [AWS ParallelCluster AMI 自定义](custom-ami-v3.md)
+ [使用按需容量预留（ODCR）启动实例](launch-instances-odcr-v3.md)
+ [使用容量块（CB）启动实例](launch-instances-capacity-blocks.md)
+ [AMI 修补和亚马逊 EC2 实例更换](instance-updates-ami-patch-v3.md)
+ [操作系统](operating-systems-v3.md)

# AWS ParallelCluster 用户界面
<a name="pcui-using-v3"></a>

用户 AWS ParallelCluster 界面 (PCUI) 是一个基于 Web 的用户界面，可用作用于创建、监控和管理集群的仪表板。您可以在中安装并访问 PCUI。 AWS 账户 PCUI 是在 3.5.0 AWS ParallelCluster 版本中添加的。

要安装并开始使用 PCUI，请参阅[安装 PCUI](install-pcui-v3.md)和[使用 PCUI 配置和创建集群](configure-create-pcui-v3.md)。

![\[在 PCUI 主页中，您可以创建、编辑和删除集群。您还可以查看集群列表和所选集群的详细信息，并导航到集群、官方映像、自定义映像和用户。\]](http://docs.aws.amazon.com/zh_cn/parallelcluster/latest/ug/images/ui-image.png)


**PCUI 支持以下功能：**
+ 显示以下内容：
  + 您在使用中创建的集群列表 AWS ParallelCluster。 AWS 账户 
  + 所列集群的可用状态和详细信息。
  + CloudFormation 堆栈事件和可用于监控的 AWS ParallelCluster 日志。
  + 您的集群上运行的作业的状态。
  + 可用于构建集群的自定义映像的列表。
  + UI 用于创建集群的官方映像的列表。
  + 有权访问 PCUI 的用户的列表。您可以添加和删除用户。
+ 提供有关创建和编辑（更新）集群以及选择要添加、编辑或删除的支持的集群功能的 step-by-step指南。对于所编辑的集群配置，不能更改无法访问的输入字段。您可以选择在部署集群之前对集群配置进行试运行验证。
+ **集群**视图中具有用于访问头节点的直接 Shell 链接。在 step-by-step指导**中选择 “添加 SSM 会话**” 以添加直接 shell 访问权限，并在头节点上添加 **SSM 托管实例核心**策略。

**在使用 PCUI 创建和管理集群时请考虑以下事项：**
+ 您只能使用与创建 PCUI 相同的 AWS ParallelCluster 版本创建和编辑集群或构建映像。只能查看早期版本的集群或映像。如果您管理多个版本的集群和映像，我们建议您创建支持每个版本的 PCUI 实例。
+ PCUI 旨在镜像 `pcluster` CLI 功能。但存在一些区别。如果您符合 step-by-step指南，则说明您正在使用所有支持的功能。在部署之前，您可以选择手动编辑集群或映像配置。如果您这样做，我们建议您通过选择**试运行**来验证配置，以确认您的编辑完全受支持。

**注意**  
PCUI 不支持 AWS Batch。

# AWS Lambda 中的 VPC 配置 AWS ParallelCluster
<a name="lambda-vpc-v3"></a>

AWS ParallelCluster AWS Lambda 用于在集群的生命周期内执行操作。[AWS Lambda 函数始终在 Lambda 服务拥有的 VPC 内运行](https://docs.aws.amazon.com/lambda/latest/dg/foundation-networking.html)。也可以将此 Lambda 函数连接到虚拟私有云 (VPC) 中的私有子网以访问私有资源。

**注意**  
Lambda 函数无法直接连接到具有专用实例租赁的 VPC。要连接到专用 VPC 中的资源，请将专用 VPC 对等连接到具有可以连接到专用 VPC 的默认租赁第二个 VPC。  
有关更多信息，请参阅 *Amazon Linux 实例 EC2 用户指南中的[专用](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html)实例*和[如何将 Lambda 函数连接到专用 VPC](https://aws.amazon.com/premiumsupport/knowledge-center/lambda-dedicated-vpc/)？ 来自*AWS 知识中心*。

由创建的 Lambda 函数 AWS ParallelCluster 可以连接到私有 VPC。这些 Lambda 函数需要访问 AWS 服务。您可以使用以下方法通过互联网或 VPC 端点提供访问权限。
+ **互联网访问**

  要访问互联网和 AWS 服务，Lambda 函数需要网络地址转换 (NAT)。将来自您的私有子网的出站流量路由到公有子网中的 [NAT 网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)。
+ **VPC 端点**

  有几项 AWS 服务提供 [VPC 终端节点](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html)。您可以使用 VPC 终端节点 AWS 服务 从无法访问互联网的 VPC 进行连接。要查看 AWS ParallelCluster VPC 终端节点列表，请参阅[网络](aws-parallelcluster-in-a-single-public-subnet-no-internet-v3.md)。

**注意**  
子网和安全组的每种组合都必须 AWS 服务 使用其中一种方法提供访问权限。子网和安全组必须位于同一 VPC。

 有关更多信息，请参阅 *Amazon Virtual Private Cloud 用户指南* 中的 [VPC 端点](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html)和 *AWS Lambda 开发人员指南* 中的 [VPC 连接函数的 Internet 和服务访问](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-internet)。

要配置 Lambda 函数和的使用 VPCs，请参阅 [`DeploymentSettings`](DeploymentSettings-cluster-v3.md)/（有关集群）或 [`DeploymentSettings`](DeploymentSettings-build-image-v3.md)/（[`LambdaFunctionsVpcConfig`](DeploymentSettings-cluster-v3.md#DeploymentSettings-cluster-v3-LambdaFunctionsVpcConfig)有关图像）[`LambdaFunctionsVpcConfig`](DeploymentSettings-build-image-v3.md#DeploymentSettings-build-image-v3-LambdaFunctionsVpcConfig)。

# AWS Identity and Access Management 中的权限 AWS ParallelCluster
<a name="iam-roles-in-parallelcluster-v3"></a>

AWS ParallelCluster 在创建和管理集群时，使用 IAM 权限来控制对资源的访问权限。

**要在 AWS 账户中创建和管理集群， AWS ParallelCluster 需要两个级别的权限：**
+ `pcluster` 用户调用 `pcluster` CLI 命令创建和管理集群所需的权限。
+ 集群资源执行集群操作所需的权限。

**AWS ParallelCluster 使用** A [mazon EC2 实例配置文件和角色](#iam-ec2-instance-role)来提供集群资源权限。要管理集群资源权限， AWS ParallelCluster 还需要对 IAM 资源的权限。有关更多信息，请参阅 [AWS ParallelCluster 用于管理 IAM 资源的用户示例策略](#iam-roles-in-parallelcluster-v3-user-policy-manage-iam)。

**`pcluster` 用户需要** IAM 权限才能使用 [`pcluster`](pcluster-v3.md) CLI 创建和管理集群及其资源。这些权限包含在可以添加到用户或角色的 IAM 策略中。有关 IAM 角色的更多信息，请参阅 *AWS Identity and Access Management 用户指南* 中的 [创建用户角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)。

您还可以使用 [AWS ParallelCluster 用于管理 IAM 权限的配置参数](#iam-roles-in-parallelcluster-v3-params-for-iam)。

以下各节包含所需的权限及示例。

要使用示例策略，请将 `<REGION>`、`<AWS ACCOUNT ID>` 和类似的字符串替换为相应的值。

以下示例策略包括资源的亚马逊资源名称 (ARNs)。如果您在 AWS GovCloud (US) 或 AWS 中国分区中工作，则必须 ARNs 对其进行更改。具体而言，对于分区，必须将其从 “arn: a aws-us-gov ws” 更改为 “arn:”，对于中国 AWS GovCloud (US) 分区，必须将其从 “arn: aws-cn” 更改为 “arn: aws-cn”。 AWS 有关更多信息，请参阅*AWS GovCloud (US) 用户指南*[中 AWS GovCloud (US) 区域中的 Amazon 资源名称 (ARNs)](https://docs.aws.amazon.com/govcloud-us/latest/UserGuide/using-govcloud-arns.html)，以及[ARNs 中国 AWS 服务](https://docs.amazonaws.cn/aws/latest/userguide/ARNs.html)*入门 AWS 中的中国服务*。

您可以在[上的AWS ParallelCluster 文档](https://github.com/awsdocs/aws-parallelcluster-user-guide/blame/main/doc_source/iam-roles-in-parallelcluster-v3.md)中跟踪示例政策的更改 GitHub。

**Topics**
+ [AWS ParallelCluster 亚马逊 EC2 实例角色](#iam-ec2-instance-role)
+ [AWS ParallelCluster `pcluster`用户策略示例](#iam-roles-in-parallelcluster-v3-example-user-policies)
+ [AWS ParallelCluster 用于管理 IAM 资源的用户示例策略](#iam-roles-in-parallelcluster-v3-user-policy-manage-iam)
+ [AWS ParallelCluster 用于管理 IAM 权限的配置参数](#iam-roles-in-parallelcluster-v3-params-for-iam)

## AWS ParallelCluster 亚马逊 EC2 实例角色
<a name="iam-ec2-instance-role"></a>

使用默认配置设置创建集群时， AWS ParallelCluster 使用 Amazon EC2 [实例配置文件](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html)自动创建默认集群 Amazon EC2 [实例角色](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)，该角色提供创建和管理集群及其资源所需的权限。

### 使用默认 AWS ParallelCluster 实例角色的替代方法
<a name="iam-roles-in-parallelcluster-v3-existing-roles"></a>

您可以使用`InstanceRole`集群配置设置来代替默认 AWS ParallelCluster 实例角色，为 EC2 指定自己的现有 IAM 角色。有关更多信息，请参阅 [AWS ParallelCluster 用于管理 IAM 权限的配置参数](#iam-roles-in-parallelcluster-v3-params-for-iam)。通常，您可以指定现有 IAM 角色来完全控制授予给 EC2 的权限。

如果您打算向默认实例角色添加额外的策略，我们建议您使用 [`AdditionalIamPolicies`](#iam-roles-in-parallelcluster-v3-cluster-config-additionaliampolicies) 配置设置而不是 [`InstanceProfile` 或 `InstanceRole`](#iam-roles-in-parallelcluster-v3-cluster-config-headnode-instanceprofile) 设置来传递其他 IAM 策略。您可以在更新集群时进行更新 `AdditionalIamPolicies`，但不能在更新集群时更新 `InstanceRole`。

## AWS ParallelCluster `pcluster`用户策略示例
<a name="iam-roles-in-parallelcluster-v3-example-user-policies"></a>

以下示例显示了使用 `pcluster` CLI 创建 AWS ParallelCluster 和管理其资源所需的用户策略。您可以将策略附加到用户或角色。

**Topics**
+ [基本 AWS ParallelCluster `pcluster` 用户策略](#iam-roles-in-parallelcluster-v3-base-user-policy)
+ [使用 AWS Batch 日程安排时的其他 AWS ParallelCluster `pcluster`用户政策](#iam-roles-in-parallelcluster-v3-user-policy-batch)
+ [使用 Amazon FSx for Lustre 时的其他 AWS ParallelCluster `pcluster`用户政策](#iam-roles-in-parallelcluster-v3-user-policy-fsxlustre)
+ [AWS ParallelCluster 镜像构建`pcluster`用户政策](#iam-roles-in-parallelcluster-v3-user-policy-build-image)

### 基本 AWS ParallelCluster `pcluster` 用户策略
<a name="iam-roles-in-parallelcluster-v3-base-user-policy"></a>

以下策略显示了运行 AWS ParallelCluster `pcluster`命令所需的权限。

策略中列出的最后一个操作用于验证集群配置中指定的任何密钥。例如， AWS Secrets Manager 密钥用于配置集[`DirectoryService`](DirectoryService-v3.md)成。在这种情况下，只有当 [`PasswordSecretArn`](DirectoryService-v3.md#yaml-DirectoryService-PasswordSecretArn) 中存在有效密钥时，才会创建集群。如果省略此操作，则会跳过密钥验证。为了改善您的安全状况，我们建议您通过仅添加集群配置中指定的密钥来缩小此策略声明的范围。

**注意**  
如果现有 Amazon EFS 文件系统是集群中使用的唯一文件系统，则可以将示例 Amazon EFS 策略声明的范围缩小到集群配置文件中 [`SharedStorage` 部分](SharedStorage-v3.md) 引用的特定文件系统。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "ec2:Describe*"
            ],
            "Resource": "*",
            "Effect": "Allow",
            "Sid": "EC2Read"
        },
        {
            "Action": [
                "ec2:AllocateAddress",
                "ec2:AssociateAddress",
                "ec2:AttachNetworkInterface",
                "ec2:AuthorizeSecurityGroupEgress",
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:CreateFleet",
                "ec2:CreateLaunchTemplate",
                "ec2:CreateLaunchTemplateVersion",
                "ec2:CreateNetworkInterface",
                "ec2:CreatePlacementGroup",
                "ec2:CreateSecurityGroup",
                "ec2:CreateSnapshot",
                "ec2:CreateTags",
                "ec2:DeleteTags",
                "ec2:CreateVolume",
                "ec2:DeleteLaunchTemplate",
                "ec2:DeleteNetworkInterface",
                "ec2:DeletePlacementGroup",
                "ec2:DeleteSecurityGroup",
                "ec2:DeleteVolume",
                "ec2:DisassociateAddress",
                "ec2:ModifyLaunchTemplate",
                "ec2:ModifyNetworkInterfaceAttribute",
                "ec2:ModifyVolume",
                "ec2:ModifyVolumeAttribute",
                "ec2:ReleaseAddress",
                "ec2:RevokeSecurityGroupEgress",
                "ec2:RevokeSecurityGroupIngress",
                "ec2:RunInstances",
                "ec2:TerminateInstances"
            ],
            "Resource": "*",
            "Effect": "Allow",
            "Sid": "EC2Write"
        },
        {
            "Action": [
                "dynamodb:DescribeTable",
                "dynamodb:ListTagsOfResource",
                "dynamodb:CreateTable",
                "dynamodb:DeleteTable",
                "dynamodb:GetItem",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:Query",
                "dynamodb:TagResource",
                "dynamodb:UntagResource"
            ],
            "Resource": "arn:aws:dynamodb:*:111122223333:table/parallelcluster-*",
            "Effect": "Allow",
            "Sid": "DynamoDB"
        },
        {
            "Action": [
                "route53:ChangeResourceRecordSets",
                "route53:ChangeTagsForResource",
                "route53:CreateHostedZone",
                "route53:DeleteHostedZone",
                "route53:GetChange",
                "route53:GetHostedZone",
                "route53:ListResourceRecordSets",
                "route53:ListQueryLoggingConfigs"
            ],
            "Resource": "*",
            "Effect": "Allow",
            "Sid": "Route53HostedZones"
        },
        {
            "Action": [
                "cloudformation:*"
            ],
            "Resource": "*",
            "Effect": "Allow",
            "Sid": "CloudFormation"
        },
        {
            "Action": [
                "cloudwatch:PutDashboard",
                "cloudwatch:ListDashboards",
                "cloudwatch:DeleteDashboards",
                "cloudwatch:GetDashboard",
                "cloudwatch:PutMetricAlarm",
                "cloudwatch:DeleteAlarms",
                "cloudwatch:DescribeAlarms",
                "cloudwatch:PutCompositeAlarm",
                "cloudwatch:TagResource",
                "cloudwatch:UntagResource"
            ],
            "Resource": "*",
            "Effect": "Allow",
            "Sid": "CloudWatch"
        },
        {
            "Action": [
                "iam:GetRole",
                "iam:GetRolePolicy",
                "iam:GetPolicy",
                "iam:SimulatePrincipalPolicy",
                "iam:GetInstanceProfile"
            ],
            "Resource": [
                "arn:aws:iam::111122223333:role/*",
                "arn:aws:iam::111122223333:policy/*",
                "arn:aws:iam::aws:policy/*",
                "arn:aws:iam::111122223333:instance-profile/*"
            ],
            "Effect": "Allow",
            "Sid": "IamRead"
        },
        {
            "Action": [
                "iam:CreateInstanceProfile",
                "iam:DeleteInstanceProfile",
                "iam:AddRoleToInstanceProfile",
                "iam:RemoveRoleFromInstanceProfile"
            ],
            "Resource": [
                "arn:aws:iam::111122223333:instance-profile/parallelcluster/*"
            ],
            "Effect": "Allow",
            "Sid": "IamInstanceProfile"
        },
        {
            "Condition": {
                "StringEqualsIfExists": {
                    "iam:PassedToService": [
                        "lambda.amazonaws.com",
                        "ec2.amazonaws.com",
                        "spotfleet.amazonaws.com"
                    ]
                }
            },
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::111122223333:role/parallelcluster/*"
            ],
            "Effect": "Allow",
            "Sid": "IamPassRole"
        },
        {
            "Action": [
                "lambda:CreateFunction",
                "lambda:DeleteFunction",
                "lambda:GetFunctionConfiguration",
                "lambda:GetFunction",
                "lambda:InvokeFunction",
                "lambda:AddPermission",
                "lambda:RemovePermission",
                "lambda:UpdateFunctionConfiguration",
                "lambda:TagResource",
                "lambda:ListTags",
                "lambda:UntagResource"
            ],
            "Resource": [
                "arn:aws:lambda:*:111122223333:function:parallelcluster-*",
                "arn:aws:lambda:*:111122223333:function:pcluster-*"
            ],
            "Effect": "Allow",
            "Sid": "Lambda"
        },
        {
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::parallelcluster-*",
                "arn:aws:s3:::aws-parallelcluster-*"
            ],
            "Effect": "Allow",
            "Sid": "S3ResourcesBucket"
        },
        {
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": "arn:aws:s3:::*-aws-parallelcluster*",
            "Effect": "Allow",
            "Sid": "S3ParallelClusterReadOnly"
        },
        {
            "Action": [
                "elasticfilesystem:*"
            ],
            "Resource": [
                "arn:aws:elasticfilesystem:*:111122223333:*"
            ],
            "Effect": "Allow",
            "Sid": "EFS"
        },
        {
            "Action": [
                "logs:DeleteLogGroup",
                "logs:PutRetentionPolicy",
                "logs:DescribeLogGroups",
                "logs:CreateLogGroup",
                "logs:TagResource",
                "logs:UntagResource",
                "logs:FilterLogEvents",
                "logs:GetLogEvents",
                "logs:CreateExportTask",
                "logs:DescribeLogStreams",
                "logs:DescribeExportTasks",
                "logs:DescribeMetricFilters",
                "logs:PutMetricFilter",
                "logs:DeleteMetricFilter",
                "logs:ListTagsForResource"
            ],
            "Resource": "*",
            "Effect": "Allow",
            "Sid": "CloudWatchLogs"
        },
        {
            "Action": [
                "resource-groups:ListGroupResources"
            ],
            "Resource": "*",
            "Effect": "Allow",
            "Sid": "ResourceGroupRead"
        },
        {
            "Sid": "AllowDescribingFileCache",
            "Effect": "Allow",
            "Action": [
                "fsx:DescribeFileCaches"
            ],
            "Resource": "*"
        },
        {
            "Action": "secretsmanager:DescribeSecret",
            "Resource": "arn:aws:secretsmanager:us-east-1:111122223333:secret:<SECRET NAME>",
            "Effect": "Allow"
        }
    ]
}
```

------

### 使用 AWS Batch 日程安排时的其他 AWS ParallelCluster `pcluster`用户政策
<a name="iam-roles-in-parallelcluster-v3-user-policy-batch"></a>

如果您需要使用 AWS Batch 调度程序创建和管理集群，则需要以下附加策略。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Condition": {
                "StringEqualsIfExists": {
                    "iam:PassedToService": [
                        "ecs-tasks.amazonaws.com",
                        "batch.amazonaws.com",
                        "codebuild.amazonaws.com"
                    ]
                }
            },
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::111122223333:role/parallelcluster/*"
            ],
            "Effect": "Allow",
            "Sid": "IamPassRole"
        },
        {
            "Condition": {
                "StringEquals": {
                    "iam:AWSServiceName": [
                        "batch.amazonaws.com"
                    ]
                }
            },
            "Action": [
                "iam:CreateServiceLinkedRole",
                "iam:DeleteServiceLinkedRole"
            ],
            "Resource": [
                "arn:aws:iam::111122223333:role/aws-service-role/batch.amazonaws.com/*"
            ],
            "Effect": "Allow"
        },
        {
            "Action": [
                "codebuild:*"
            ],
            "Resource": "arn:aws:codebuild:*:111122223333:project/pcluster-*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "ecr:*"
            ],
            "Resource": "*",
            "Effect": "Allow",
            "Sid": "ECR"
        },
        {
            "Action": [
                "batch:*"
            ],
            "Resource": "*",
            "Effect": "Allow",
            "Sid": "Batch"
        },
        {
            "Action": [
                "events:*"
            ],
            "Resource": "*",
            "Effect": "Allow",
            "Sid": "AmazonCloudWatchEvents"
        },
        {
            "Action": [
                "ecs:DescribeContainerInstances",
                "ecs:ListContainerInstances"
            ],
            "Resource": "*",
            "Effect": "Allow",
            "Sid": "ECS"
        }
    ]
}
```

------

### 使用 Amazon FSx for Lustre 时的其他 AWS ParallelCluster `pcluster`用户政策
<a name="iam-roles-in-parallelcluster-v3-user-policy-fsxlustre"></a>

如果您需要使用 Amazon FSx for Lustre 创建和管理集群，则需要遵循以下附加策略。

**注意**  
如果现有的 Amazon FSx 文件系统是您的集群中唯一使用的文件系统，则可以将示例 Amazon FSx 策略声明的范围缩小到集群配置文件中引用的特定文件系统。[`SharedStorage` 部分](SharedStorage-v3.md)

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Condition": {
                "StringEquals": {
                    "iam:AWSServiceName": [
                        "fsx.amazonaws.com",
                        "s3.data-source.lustre.fsx.amazonaws.com"
                    ]
                }
            },
            "Action": [
                "iam:CreateServiceLinkedRole",
                "iam:DeleteServiceLinkedRole"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "fsx:*"
            ],
            "Resource": [
                "arn:aws:fsx:*:111122223333:*"
            ],
            "Effect": "Allow",
            "Sid": "FSx"
        },
        {
            "Action": [
                "iam:CreateServiceLinkedRole",
                "iam:AttachRolePolicy",
                "iam:PutRolePolicy"
            ],
            "Resource": "arn:aws:iam::111122223333:role/aws-service-role/s3.data-source.lustre.fsx.amazonaws.com/*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "s3:Get*",
                "s3:List*",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
            "Effect": "Allow"
        }
    ]
}
```

------

### AWS ParallelCluster 镜像构建`pcluster`用户政策
<a name="iam-roles-in-parallelcluster-v3-user-policy-build-image"></a>

打算使用创建自定义 Amazon EC2 映像的用户 AWS ParallelCluster 必须具有以下一组权限。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeImages",
                "ec2:DescribeInstanceTypeOfferings",
                "ec2:DescribeInstanceTypes",
                "ec2:DeregisterImage",
                "ec2:DeleteSnapshot"
            ],
            "Resource": "*",
            "Effect": "Allow",
            "Sid": "EC2"
        },
        {
            "Action": [
                "iam:CreateInstanceProfile",
                "iam:AddRoleToInstanceProfile",
                "iam:CreateRole",
                "iam:TagRole",
                "iam:GetRole",
                "iam:PutRolePolicy",
                "iam:GetRolePolicy",
                "iam:GetInstanceProfile",
                "iam:RemoveRoleFromInstanceProfile"
            ],
            "Resource": [
                "arn:aws:iam::111122223333:instance-profile/parallelcluster/*",
                "arn:aws:iam::111122223333:instance-profile/ParallelClusterImage*",
                "arn:aws:iam::111122223333:role/parallelcluster/*"
            ],
            "Effect": "Allow",
            "Sid": "IAM"
        },
        {
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": [
                        "lambda.amazonaws.com",
                        "ec2.amazonaws.com"
                    ]
                }
            },
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::111122223333:instance-profile/parallelcluster/*",
                "arn:aws:iam::111122223333:role/parallelcluster/*"
            ],
            "Effect": "Allow",
            "Sid": "IAMPassRole"
        },
        {
            "Action": [
                "logs:GetLogEvents",
                "logs:CreateLogGroup",
                "logs:TagResource",
                "logs:UntagResource",
                "logs:DeleteLogGroup"
            ],
            "Resource": [
                "arn:aws:logs:*:111122223333:log-group:/aws/imagebuilder/ParallelClusterImage-*",
                "arn:aws:logs:*:111122223333:log-group:/aws/lambda/ParallelClusterImage-*"
            ],
            "Effect": "Allow",
            "Sid": "CloudWatch"
        },
        {
            "Action": [
                "cloudformation:DescribeStacks",
                "cloudformation:CreateStack",
                "cloudformation:DeleteStack"
            ],
            "Resource": [
                "arn:aws:cloudformation:*:111122223333:stack/*"
            ],
            "Effect": "Allow",
            "Sid": "CloudFormation"
        },
        {
            "Action": [
                "lambda:CreateFunction",
                "lambda:GetFunction",
                "lambda:AddPermission",
                "lambda:RemovePermission",
                "lambda:DeleteFunction",
                "lambda:TagResource",
                "lambda:ListTags",
                "lambda:UntagResource"
            ],
            "Resource": [
                "arn:aws:lambda:*:111122223333:function:ParallelClusterImage-*"
            ],
            "Effect": "Allow",
            "Sid": "Lambda"
        },
        {
            "Action": [
                "imagebuilder:Get*"
            ],
            "Resource": "*",
            "Effect": "Allow",
            "Sid": "ImageBuilderGet"
        },
        {
            "Action": [
                "imagebuilder:CreateImage",
                "imagebuilder:TagResource",
                "imagebuilder:CreateImageRecipe",
                "imagebuilder:CreateComponent",
                "imagebuilder:CreateDistributionConfiguration",
                "imagebuilder:CreateInfrastructureConfiguration",
                "imagebuilder:DeleteImage",
                "imagebuilder:DeleteComponent",
                "imagebuilder:DeleteImageRecipe",
                "imagebuilder:DeleteInfrastructureConfiguration",
                "imagebuilder:DeleteDistributionConfiguration"
            ],
            "Resource": [
                "arn:aws:imagebuilder:*:111122223333:image/parallelclusterimage-*",
                "arn:aws:imagebuilder:*:111122223333:image-recipe/parallelclusterimage-*",
                "arn:aws:imagebuilder:*:111122223333:component/parallelclusterimage-*",
                "arn:aws:imagebuilder:*:111122223333:distribution-configuration/parallelclusterimage-*",
                "arn:aws:imagebuilder:*:111122223333:infrastructure-configuration/parallelclusterimage-*"
            ],
            "Effect": "Allow",
            "Sid": "ImageBuilder"
        },
        {
            "Action": [
                "s3:CreateBucket",
                "s3:ListBucket",
                "s3:ListBucketVersions"
            ],
            "Resource": [
                "arn:aws:s3:::parallelcluster-*"
            ],
            "Effect": "Allow",
            "Sid": "S3Bucket"
        },
        {
            "Action": [
                "sns:GetTopicAttributes",
                "sns:TagResource",
                "sns:CreateTopic",
                "sns:Subscribe",
                "sns:Publish",
                "SNS:DeleteTopic",
                "SNS:Unsubscribe"
            ],
            "Resource": [
                "arn:aws:sns:*:111122223333:ParallelClusterImage-*"
            ],
            "Effect": "Allow",
            "Sid": "SNS"
        },
        {
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion"
            ],
            "Resource": [
                "arn:aws:s3:::parallelcluster-*/*"
            ],
            "Effect": "Allow",
            "Sid": "S3Objects"
        },
        {
            "Action": "iam:CreateServiceLinkedRole",
            "Effect": "Allow",
            "Resource": "arn:aws:iam::*:role/aws-service-role/imagebuilder.amazonaws.com/AWSServiceRoleForImageBuilder",
            "Condition": {
                "StringLike": {
                    "iam:AWSServiceName": "imagebuilder.amazonaws.com"
                }
            }
        }
    ]
}
```

------

## AWS ParallelCluster 用于管理 IAM 资源的用户示例策略
<a name="iam-roles-in-parallelcluster-v3-user-policy-manage-iam"></a>

使用 AWS ParallelCluster 创建集群或自定义集群时 AMIs，必须提供包含向 AWS ParallelCluster 组件授予所需权限集的权限的 IAM 策略。在创建集群 AWS ParallelCluster 或自定义映像时，这些 IAM 资源可以由自动创建，也可以作为输入提供。

您可以使用以下模式通过在配置中使用其他 IAM 策略为 AWS ParallelCluster 用户提供访问 IAM 资源所需的权限。

**Topics**
+ [特权 IAM 访问模式](#iam-roles-in-parallelcluster-v3-privileged-iam-access)
+ [受限的 IAM 访问模式](#iam-roles-in-parallelcluster-v3-restricted-iam-access)
+ [`PermissionsBoundary` 模式](#iam-roles-in-parallelcluster-v3-permissionsboundary-mode)

### 特权 IAM 访问模式
<a name="iam-roles-in-parallelcluster-v3-privileged-iam-access"></a>

在此模式下， AWS ParallelCluster 会自动创建所有必要的 IAM 资源。这些 IAM 策略的范围已缩小，仅允许访问集群资源。

要启用特权 IAM 访问模式，请向用户角色添加以下策略。

**注意**  
如果您配置 [`HeadNode`](HeadNode-v3.md)/[`Iam`](HeadNode-v3.md#HeadNode-v3-Iam)/[`AdditionalPolicies`](HeadNode-v3.md#yaml-HeadNode-Iam-AdditionalIamPolicies)或 [`Scheduling`](Scheduling-v3.md)//[`SlurmQueues`[`Iam`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-Iam)](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`AdditionalPolicies`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Iam-AdditionalIamPolicies)参数，则必须向 AWS ParallelCluster 用户提供为每个其他策略附加和分离角色策略的权限，如以下策略所示。将附加策略 ARNs 添加到附加和分离角色策略的条件中。

**警告**  
此模式使用户能够在中拥有 IAM 管理员权限 AWS 账户

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "iam:CreateServiceLinkedRole",
                "iam:DeleteRole",
                "iam:TagRole",
                "iam:UntagRole"
            ],
            "Resource": [
                "arn:aws:iam::111122223333:role/parallelcluster/*"
            ],
            "Effect": "Allow",
            "Sid": "IamRole"
        },
        {
            "Action": [
                "iam:CreateRole"
            ],
            "Resource": [
                "arn:aws:iam::111122223333:role/parallelcluster/*"
            ],
            "Effect": "Allow",
            "Sid": "IamCreateRole"
        },
        {
            "Action": [
                "iam:PutRolePolicy",
                "iam:DeleteRolePolicy"
            ],
            "Resource": "arn:aws:iam::111122223333:role/parallelcluster/*",
            "Effect": "Allow",
            "Sid": "IamInlinePolicy"
        },
        {
            "Condition": {
                "ArnLike": {
                    "iam:PolicyARN": [
                        "arn:aws:iam::111122223333:policy/parallelcluster*",
                        "arn:aws:iam::111122223333:policy/parallelcluster/*",
                        "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy",
                        "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore",
                        "arn:aws:iam::aws:policy/AWSBatchFullAccess",
                        "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess",
                        "arn:aws:iam::aws:policy/service-role/AWSBatchServiceRole",
                        "arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role",
                        "arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy",
                        "arn:aws:iam::aws:policy/service-role/AmazonEC2SpotFleetTaggingRole",
                        "arn:aws:iam::aws:policy/EC2InstanceProfileForImageBuilder",
                        "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
                    ]
                }
            },
            "Action": [
                "iam:AttachRolePolicy",
                "iam:DetachRolePolicy"
            ],
            "Resource": "arn:aws:iam::111122223333:role/parallelcluster/*",
            "Effect": "Allow",
            "Sid": "IamPolicy"
        }
    ]
}
```

------

### 受限的 IAM 访问模式
<a name="iam-roles-in-parallelcluster-v3-restricted-iam-access"></a>

如果没有向用户授予其他 IAM 策略，则集群或自定义映像构建所需的 IAM 角色需要由管理员手动创建，并作为集群配置的一部分进行传递。

创建集群时，需要使用以下参数：
+  [`Iam`](Iam-v3.md) / [`Roles`](Iam-v3.md#yaml-Iam-Roles) / [`LambdaFunctionsRole`](Iam-v3.md#yaml-Iam-Roles-LambdaFunctionsRole)
+  [`HeadNode`](HeadNode-v3.md) / [`Iam`](HeadNode-v3.md#HeadNode-v3-Iam) / [`InstanceRole`](HeadNode-v3.md#yaml-HeadNode-Iam-InstanceRole) \$1 [`InstanceProfile`](HeadNode-v3.md#yaml-HeadNode-Iam-InstanceProfile)
+  [`Scheduling`](Scheduling-v3.md) / [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues) / [`Iam`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-Iam) / [`InstanceRole`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Iam-InstanceRole) \$1 [`InstanceProfile`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Iam-InstanceProfile)

构建自定义映像时，需要使用以下参数：
+ [`Build`](Build-v3.md) / [`Iam`](Build-v3.md#Build-v3-Iam) / [`InstanceRole`](Build-v3.md#yaml-build-image-Build-Iam-InstanceRole) \$1 [`InstanceProfile`](Build-v3.md#yaml-build-image-Build-Iam-InstanceProfile) 
+ [`Build`](Build-v3.md) / [`Iam`](Build-v3.md#Build-v3-Iam) / [`CleanupLambdaRole`](Build-v3.md#yaml-build-image-Build-Iam-CleanupLambdaRole)

作为上面所列参数的一部分传递的 IAM 角色必须以 `/parallelcluster/` 路径前缀进行创建。如果无法做到这一点，则需要更新用户策略以便对特定自定义角色授予 `iam:PassRole` 权限，如以下示例所示。

```
{
   "Condition": {
       "StringEqualsIfExists": {
           "iam:PassedToService": [
               "ecs-tasks.amazonaws.com",
               "lambda.amazonaws.com",
               "ec2.amazonaws.com",
               "spotfleet.amazonaws.com",
               "batch.amazonaws.com",
               "codebuild.amazonaws.com"
           ]
       }
   },
   "Action": [
       "iam:PassRole"
   ],
   "Resource": [
       <list all custom IAM roles>
   ],
   "Effect": "Allow",
   "Sid": "IamPassRole"
}
```

**警告**  
目前，此模式不允许管理 AWS Batch 集群，因为并非所有 IAM 角色都可以在集群配置中传递。

### `PermissionsBoundary` 模式
<a name="iam-roles-in-parallelcluster-v3-permissionsboundary-mode"></a>

此模式委托创建绑 AWS ParallelCluster 定到已配置的 IAM 权限边界的 IAM 角色。有关 IAM 权限边界的更多信息，请参阅 *IAM 用户指南* 中的 [IAM 实体的权限边界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)。

需要将以下策略添加到用户角色。

在策略中，*<permissions-boundary-arn>*替换为要作为权限边界强制执行的 IAM 策略 ARN。

**警告**  
如果您配置 [`HeadNode`](HeadNode-v3.md)/[`Iam`](HeadNode-v3.md#HeadNode-v3-Iam)/[`AdditionalPolicies`](HeadNode-v3.md#yaml-HeadNode-Iam-AdditionalIamPolicies) 或 [`Scheduling`](Scheduling-v3.md)/[`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`Iam`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-Iam)/ 参数，则必须向用户授予为每个其他策略附加和分离角色策略的权限，如以下策略所示。将附加策略 ARNs 添加到附加和分离角色策略的条件中。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "iam:CreateServiceLinkedRole",
                "iam:DeleteRole",
                "iam:TagRole"
            ],
            "Resource": [
                "arn:aws:iam::111122223333:role/parallelcluster/*"
            ],
            "Effect": "Allow",
            "Sid": "IamRole"
        },
        {
            "Condition": {
                "StringEquals": {
                    "iam:PermissionsBoundary": [
                        "<permissions-boundary-arn>"
                    ]
                }
            },
            "Action": [
                "iam:CreateRole"
            ],
            "Resource": [
                "arn:aws:iam::111122223333:role/parallelcluster/*"
            ],
            "Effect": "Allow",
            "Sid": "IamCreateRole"
        },
        {
            "Condition": {
                "StringEquals": {
                    "iam:PermissionsBoundary": [
                        "<permissions-boundary-arn>"
                    ]
                }
            },
            "Action": [
                "iam:PutRolePolicy",
                "iam:DeleteRolePolicy"
            ],
            "Resource": "arn:aws:iam::111122223333:role/parallelcluster/*",
            "Effect": "Allow",
            "Sid": "IamInlinePolicy"
        },
        {
            "Condition": {
                "StringEquals": {
                    "iam:PermissionsBoundary": [
                        "<permissions-boundary-arn>"
                    ]
                },
                "ArnLike": {
                    "iam:PolicyARN": [
                        "arn:aws:iam::111122223333:policy/parallelcluster*",
                        "arn:aws:iam::111122223333:policy/parallelcluster/*",
                        "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy",
                        "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore",
                        "arn:aws:iam::aws:policy/AWSBatchFullAccess",
                        "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess",
                        "arn:aws:iam::aws:policy/service-role/AWSBatchServiceRole",
                        "arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role",
                        "arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy",
                        "arn:aws:iam::aws:policy/service-role/AmazonEC2SpotFleetTaggingRole",
                        "arn:aws:iam::aws:policy/EC2InstanceProfileForImageBuilder",
                        "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
                    ]
                }
            },
            "Action": [
                "iam:AttachRolePolicy",
                "iam:DetachRolePolicy"
            ],
            "Resource": "arn:aws:iam::111122223333:role/parallelcluster/*",
            "Effect": "Allow",
            "Sid": "IamPolicy"
        }
    ]
}
```

------

启用此模式后，创建或更新集群时必须在 [`Iam`](Iam-v3.md)/[`PermissionsBoundary`](Iam-v3.md#yaml-Iam-PermissionsBoundary) 配置参数中指定权限边界 ARN，在构建自定义映像时必须在 [`Build`](Build-v3.md)/[`Iam`](Build-v3.md#Build-v3-Iam)/[`PermissionBoundary`](Build-v3.md#yaml-build-image-Build-Iam-PermissionsBoundary) 参数中指定权限边界 ARN。

## AWS ParallelCluster 用于管理 IAM 权限的配置参数
<a name="iam-roles-in-parallelcluster-v3-params-for-iam"></a>

AWS ParallelCluster 公开了一系列配置选项，用于自定义和管理集群中或自定义 AMI 创建过程中使用的 IAM 权限和角色。

**Topics**
+ [集群配置](#iam-roles-in-parallelcluster-v3-cluster-config)
+ [自定义映像配置](#iam-roles-in-parallelcluster-v3-custom-image-configuration)

### 集群配置
<a name="iam-roles-in-parallelcluster-v3-cluster-config"></a>

**Topics**
+ [头节点 IAM 角色](#iam-roles-in-parallelcluster-v3-cluster-config-headnode-instanceprofile)
+ [Amazon S3 访问权限](#iam-roles-in-parallelcluster-v3-cluster-config-headnode-s3access)
+ [其他 IAM 策略](#iam-roles-in-parallelcluster-v3-cluster-config-additionaliampolicies)
+ [AWS Lambda 函数角色](#iam-roles-in-parallelcluster-v3-cluster-config-lambdafunctionsrole)
+ [计算节点 IAM 角色](#iam-roles-in-parallelcluster-v3-cluster-config-slurmqueues-instanceprofile)
+ [权限边界](#iam-roles-in-parallelcluster-v3-cluster-config-permissionsboundary)

#### 头节点 IAM 角色
<a name="iam-roles-in-parallelcluster-v3-cluster-config-headnode-instanceprofile"></a>

[`HeadNode`](HeadNode-v3.md) / [`Iam`](HeadNode-v3.md#HeadNode-v3-Iam) / [`InstanceRole`](HeadNode-v3.md#yaml-HeadNode-Iam-InstanceRole) \$1 [`InstanceProfile`](HeadNode-v3.md#yaml-HeadNode-Iam-InstanceProfile)

使用此选项，您可以覆盖分配给集群头节点的默认 IAM 角色。有关更多详细信息，请参阅 [`InstanceProfile`](HeadNode-v3.md#yaml-HeadNode-Iam-InstanceProfile) 参考。

以下是当调度器为 Slurm 时作为该角色一部分使用的一组最少策略：
+ `arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy` 托管的 IAM 策略 有关更多信息，请参阅 A *mazon [用户指南中的创建用于 CloudWatch 代理的 IAM 角色和](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html) CloudWatch 用户*。
+ `arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore` 托管的 IAM 策略。有关更多信息，请参阅 *AWS Systems Manager 用户指南* 中的[用于 AWS Systems Manager的AWS 托管策略](https://docs.aws.amazon.com/systems-manager/latest/userguide/security_iam_service-with-iam.html#managed-policies)。
+ 其他 IAM 策略：

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Action": [
                  "s3:GetObject",
                  "s3:GetObjectVersion"
              ],
              "Resource": [
                  "arn:aws:s3:::us-east-1-aws-parallelcluster/*",
                  "arn:aws:s3:::dcv-license.us-east-1/*",
                  "arn:aws:s3:::parallelcluster-*-v1-do-not-delete/*"
              ],
              "Effect": "Allow"
          },
          {
              "Action": [
                  "dynamodb:GetItem",
                  "dynamodb:PutItem",
                  "dynamodb:UpdateItem",
                  "dynamodb:BatchWriteItem",
                  "dynamodb:BatchGetItem"
              ],
              "Resource": "arn:aws:dynamodb:us-east-1:111122223333:table/parallelcluster-*",
              "Effect": "Allow"
          },
          {
              "Condition": {
                  "StringEquals": {
                      "ec2:ResourceTag/parallelcluster:node-type": "Compute"
                  }
              },
              "Action": "ec2:TerminateInstances",
              "Resource": "*",
              "Effect": "Allow"
          },
          {
              "Action": [
                  "ec2:RunInstances",
                  "ec2:CreateFleet"
              ],
              "Resource": "*",
              "Effect": "Allow"
          },
          {
              "Condition": {
                  "StringEquals": {
                      "iam:PassedToService": [
                          "ec2.amazonaws.com"
                      ]
                  }
              },
              "Action": [
                  "iam:PassRole"
              ],
              "Resource": [
                  "arn:aws:iam::111122223333:role/parallelcluster/*",
                  "arn:aws:iam::111122223333:instance-profile/parallelcluster/*"
              ],
              "Effect": "Allow"
          },
          {
              "Action": [
                  "ec2:DescribeInstances",
                  "ec2:DescribeInstanceStatus",
                  "ec2:DescribeVolumes",
                  "ec2:DescribeInstanceAttribute",
                  "ec2:DescribeCapacityReservations"
              ],
              "Resource": "*",
              "Effect": "Allow"
          },
          {
              "Action": [
                  "ec2:CreateTags",
                  "ec2:AttachVolume"
              ],
              "Resource": [
                  "arn:aws:ec2:us-east-1:111122223333:instance/*",
                  "arn:aws:ec2:us-east-1:111122223333:volume/*"
              ],
              "Effect": "Allow"
          },
          {
              "Action": [
                  "cloudformation:DescribeStacks",
                  "cloudformation:DescribeStackResource",
                  "cloudformation:SignalResource"
              ],
              "Resource": "*",
              "Effect": "Allow"
          },
          {
              "Action": [
                  "route53:ChangeResourceRecordSets"
              ],
              "Resource": "*",
              "Effect": "Allow"
          },
          {
              "Action": "secretsmanager:GetSecretValue",
              "Resource": "arn:aws:secretsmanager:us-east-1:111122223333:secret:<SECRET_ID>",
              "Effect": "Allow"
          }
      ]
  }
  ```

------

请注意，如果使用 [`Scheduling`](Scheduling-v3.md)/[`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`Iam`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-Iam)/[`InstanceRole`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Iam-InstanceRole) 来覆盖计算 IAM 角色，则上面报告的头节点策略需要在 `iam:PassRole` 权限的 `Resource` 部分中包含此类角色。

以下是当调度器为 AWS Batch时作为该角色一部分使用的一组最少策略：
+ `arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy` 托管的 IAM 策略。有关更多信息，请参阅 A *mazon [用户指南中的创建用于 CloudWatch 代理的 IAM 角色和](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html) CloudWatch 用户*。
+ `arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore` 托管的 IAM 策略。有关更多信息，请参阅 *AWS Systems Manager 用户指南* 中的[用于 AWS Systems Manager的AWS 托管策略](https://docs.aws.amazon.com/systems-manager/latest/userguide/security_iam_service-with-iam.html#managed-policies)。
+ 其他 IAM 策略：

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Action": [
                  "s3:GetObject",
                  "s3:PutObject",
                  "s3:GetObjectVersion"
              ],
              "Resource": [
                  "arn:aws:s3:::parallelcluster-*-v1-do-not-delete/*"
              ],
              "Effect": "Allow"
          },
          {
              "Action": "s3:GetObject",
              "Resource": [
                  "arn:aws:s3:::dcv-license.us-east-1/*",
                  "arn:aws:s3:::us-east-1-aws-parallelcluster/*"
              ],
              "Effect": "Allow"
          },
          {
              "Condition": {
                  "StringEquals": {
                      "iam:PassedToService": [
                          "batch.amazonaws.com"
                      ]
                  }
              },
              "Action": [
                  "iam:PassRole"
              ],
              "Resource": [
                  "arn:aws:iam::111122223333:role/parallelcluster/*",
                  "arn:aws:iam::111122223333:instance-profile/parallelcluster/*"
              ],
              "Effect": "Allow"
          },
          {
              "Action": [
                  "batch:DescribeJobQueues",
                  "batch:DescribeJobs",
                  "batch:ListJobs",
                  "batch:DescribeComputeEnvironments"
              ],
              "Resource": "*",
              "Effect": "Allow"
          },
          {
              "Action": [
                  "batch:SubmitJob",
                  "batch:TerminateJob",
                  "logs:GetLogEvents",
                  "ecs:ListContainerInstances",
                  "ecs:DescribeContainerInstances"
              ],
              "Resource": [
                  "arn:aws:logs:us-east-1:111122223333:log-group:/aws/batch/job:log-stream:PclusterJobDefinition*",
                  "arn:aws:ecs:us-east-1:111122223333:container-instance/AWSBatch-PclusterComputeEnviron*",
                  "arn:aws:ecs:us-east-1:111122223333:cluster/AWSBatch-Pcluster*",
                  "arn:aws:batch:us-east-1:111122223333:job-queue/PclusterJobQueue*",
                  "arn:aws:batch:us-east-1:111122223333:job-definition/PclusterJobDefinition*:*",
                  "arn:aws:batch:us-east-1:111122223333:job/*"
              ],
              "Effect": "Allow"
          },
          {
              "Action": [
                  "ec2:DescribeInstances",
                  "ec2:DescribeInstanceStatus",
                  "ec2:DescribeVolumes",
                  "ec2:DescribeInstanceAttribute"
              ],
              "Resource": "*",
              "Effect": "Allow"
          },
          {
              "Action": [
                  "ec2:CreateTags",
                  "ec2:AttachVolume"
              ],
              "Resource": [
                  "arn:aws:ec2:us-east-1:111122223333:instance/*",
                  "arn:aws:ec2:us-east-1:111122223333:volume/*"
              ],
              "Effect": "Allow"
          },
          {
              "Action": [
                  "cloudformation:DescribeStackResource",
                  "cloudformation:DescribeStacks",
                  "cloudformation:SignalResource"
              ],
              "Resource": "*",
              "Effect": "Allow"
          },
          {
              "Action": "secretsmanager:GetSecretValue",
              "Resource": "arn:aws:secretsmanager:us-east-1:111122223333:secret:<SECRET_ID>",
              "Effect": "Allow"
          }
      ]
  }
  ```

------

#### Amazon S3 访问权限
<a name="iam-roles-in-parallelcluster-v3-cluster-config-headnode-s3access"></a>

[`HeadNode`](HeadNode-v3.md)/[`Iam`](HeadNode-v3.md#HeadNode-v3-Iam)/[`S3Access`](HeadNode-v3.md#yaml-HeadNode-Iam-S3Access) 或 [`Scheduling`](Scheduling-v3.md)/[`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`S3Access`](HeadNode-v3.md#yaml-HeadNode-Iam-S3Access)

在这些配置部分中，您可以在 AWS ParallelCluster创建与集群的头节点或计算节点关联的 IAM 角色时向这些角色授予其他 Amazon S3 策略来自定义 Amazon S3 访问权限。有关更多信息，请参阅每个配置参数的参考文档。

只有在使用 [特权 IAM 访问模式](#iam-roles-in-parallelcluster-v3-privileged-iam-access) 或 [`PermissionsBoundary` 模式](#iam-roles-in-parallelcluster-v3-permissionsboundary-mode) 来配置用户时，才能使用此参数。

#### 其他 IAM 策略
<a name="iam-roles-in-parallelcluster-v3-cluster-config-additionaliampolicies"></a>

[`HeadNode`](HeadNode-v3.md)/[`Iam`](HeadNode-v3.md#HeadNode-v3-Iam)/[`AdditionalIamPolicies`](HeadNode-v3.md#yaml-HeadNode-Iam-AdditionalIamPolicies) 或 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`Iam`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-Iam)/[`AdditionalIamPolicies`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Iam-AdditionalIamPolicies)

使用此选项将其他托管 IAM 策略附加到与集群的头节点或计算节点关联的 IAM 角色（如果这些角色由创建） AWS ParallelCluster。

**警告**  
要使用此选项，请确保针对需要附加的 IAM 策略向 [AWS ParallelCluster 用户](#iam-roles-in-parallelcluster-v3-user-policy-manage-iam)授予 `iam:AttachRolePolicy` 和 `iam:DetachRolePolicy` 权限。

#### AWS Lambda 函数角色
<a name="iam-roles-in-parallelcluster-v3-cluster-config-lambdafunctionsrole"></a>

[`Iam`](Iam-v3.md#yaml-Iam-Roles) / [`Roles`](Iam-v3.md#yaml-Iam-Roles) / [`LambdaFunctionsRole`](Iam-v3.md#yaml-Iam-Roles-LambdaFunctionsRole)

此选项将覆盖集群创建过程中使用的所有 AWS Lambda 函数所附加的角色。 AWS Lambda 需要配置为允许担任该角色的委托人。

**注意**  
如果设置了 [`DeploymentSettings`](DeploymentSettings-cluster-v3.md)/[`LambdaFunctionsVpcConfig`](DeploymentSettings-cluster-v3.md#DeploymentSettings-cluster-v3-LambdaFunctionsVpcConfig)，则 `LambdaFunctionsRole` 必须包括用于设置 VPC 配置的 [AWS Lambda 角色权限](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-permissions)。

以下是作为该角色一部分使用的一组最少策略：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "route53:ListResourceRecordSets",
                "route53:ChangeResourceRecordSets"
            ],
            "Resource": "arn:aws:route53:::hostedzone/*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:logs:us-east-1:111122223333:log-group:/aws/lambda/pcluster-*"
        },
        {
            "Action": "ec2:DescribeInstances",
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Action": "ec2:TerminateInstances",
            "Condition": {
                "StringEquals": {
                    "ec2:ResourceTag/parallelcluster:node-type": "Compute"
                }
            },
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Action": [
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
                "s3:ListBucket",
                "s3:ListBucketVersions"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::parallelcluster-*-v1-do-not-delete",
                "arn:aws:s3:::parallelcluster-*-v1-do-not-delete/*"
            ]
        }
    ]
}
```

------

#### 计算节点 IAM 角色
<a name="iam-roles-in-parallelcluster-v3-cluster-config-slurmqueues-instanceprofile"></a>

[`Scheduling`](Scheduling-v3.md) / [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues) / [`Iam`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-Iam) / [` InstanceRole`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Iam-InstanceRole) \$1 [`InstanceProfile`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Iam-InstanceProfile)

此选项允许覆盖分配给集群计算节点的 IAM 角色。有关更多信息，请参阅 [`InstanceProfile`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Iam-InstanceProfile)。

以下是作为该角色一部分使用的一组最少策略：
+ `arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy` 托管的 IAM 策略。有关更多信息，请参阅 A *mazon [用户指南中的创建用于 CloudWatch代理的 IAM 角色和](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html) CloudWatch 用户*。
+ `arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore` 托管的 IAM 策略。有关更多信息，请参阅 *AWS Systems Manager 用户指南* 中的[用于 AWS Systems Manager的AWS 托管策略](https://docs.aws.amazon.com/systems-manager/latest/userguide/security_iam_service-with-iam.html#managed-policies)。
+ 其他 IAM 策略：

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Action": [
                  "dynamodb:Query",
                  "dynamodb:UpdateItem",
                  "dynamodb:PutItem",
                  "dynamodb:GetItem"
              ],
              "Resource": "arn:aws:dynamodb:us-east-1:111122223333:table/parallelcluster-*",
              "Effect": "Allow"
          },
          {
              "Action": "s3:GetObject",
              "Resource": [
                  "arn:aws:s3:::us-east-1-aws-parallelcluster/*"
              ],
              "Effect": "Allow"
          },
          {
              "Action": "ec2:DescribeInstanceAttribute",
              "Resource": "*",
              "Effect": "Allow"
          },
          {
              "Action": "cloudformation:DescribeStackResource",
              "Resource": [
                  "arn:aws:cloudformation:us-east-1:111122223333:stack/*/*"
              ],
              "Effect": "Allow"
          }
      ]
  }
  ```

------

#### 权限边界
<a name="iam-roles-in-parallelcluster-v3-cluster-config-permissionsboundary"></a>

[`Iam`](Iam-v3.md) / [`PermissionsBoundary`](Iam-v3.md#yaml-Iam-PermissionsBoundary)

此参数强制 AWS ParallelCluster 将给定的 IAM 策略作为 a 附加`PermissionsBoundary`到作为集群部署的一部分创建的所有 IAM 角色。

有关定义此设置后用户所需的策略的列表，请参阅 [`PermissionsBoundary` 模式](#iam-roles-in-parallelcluster-v3-permissionsboundary-mode)。

### 自定义映像配置
<a name="iam-roles-in-parallelcluster-v3-custom-image-configuration"></a>

**Topics**
+ [EC2 Image Builder 的实例角色](#iam-roles-in-parallelcluster-v3-custom-image-configuration-instancerole)
+ [AWS Lambda 清理角色](#iam-roles-in-parallelcluster-v3-custom-image-configuration-cleanuplambdarole)
+ [其他 IAM 策略](#iam-roles-in-parallelcluster-v3-custom-image-configuration-additionaliampolicies)
+ [权限边界](#iam-roles-in-parallelcluster-v3-custom-image-configuration-permissionsboundary)

#### EC2 Image Builder 的实例角色
<a name="iam-roles-in-parallelcluster-v3-custom-image-configuration-instancerole"></a>

[`Build`](Build-v3.md) / [`Iam`](Build-v3.md#Build-v3-Iam) / [`InstanceRole`](Build-v3.md#yaml-build-image-Build-Iam-InstanceRole) \$1 [`InstanceProfile`](Build-v3.md#yaml-build-image-Build-Iam-InstanceProfile)

使用此选项，您可以覆盖分配给 EC2 Image Builder 为创建自定义 AMI 而启动的 Amazon EC2 实例的 IAM 角色。

以下是作为该角色一部分使用的一组最少策略：
+ `arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore` 托管的 IAM 策略。有关更多信息，请参阅 *AWS Systems Manager 用户指南* 中的[用于 AWS Systems Manager的AWS 托管策略](https://docs.aws.amazon.com/systems-manager/latest/userguide/security_iam_service-with-iam.html#managed-policies)。
+ `arn:aws:iam::aws:policy/EC2InstanceProfileForImageBuilder` 托管的 IAM 策略。有关更多信息，请参阅 *Image Builder User Guide* 中的 [`EC2InstanceProfileForImageBuilder` policy](https://docs.aws.amazon.com/imagebuilder/latest/userguide/security-iam-awsmanpol.html#sec-iam-manpol-EC2InstanceProfileForImageBuilder)。
+ 其他 IAM 策略：

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Action": [
                  "ec2:CreateTags",
                  "ec2:ModifyImageAttribute"
              ],
              "Resource": "arn:aws:ec2:us-east-1::image/*",
              "Effect": "Allow"
          }
      ]
  }
  ```

------

#### AWS Lambda 清理角色
<a name="iam-roles-in-parallelcluster-v3-custom-image-configuration-cleanuplambdarole"></a>

[`Build`](Build-v3.md) / [`Iam`](Build-v3.md#Build-v3-Iam) / [`CleanupLambdaRole`](Build-v3.md#yaml-build-image-Build-Iam-CleanupLambdaRole)

此选项将覆盖自定义映像构建过程中使用的所有 AWS Lambda 函数所附加的角色。 AWS Lambda 需要配置为允许担任该角色的委托人。

**注意**  
如果设置了 [`DeploymentSettings`](DeploymentSettings-build-image-v3.md)/[`LambdaFunctionsVpcConfig`](DeploymentSettings-build-image-v3.md#DeploymentSettings-build-image-v3-LambdaFunctionsVpcConfig)，则 `CleanupLambdaRole` 必须包括用于设置 VPC 配置的 [AWS Lambda 角色权限](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html#vpc-permissions)。

以下是作为该角色一部分使用的一组最少策略：
+ `arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole` 托管的 IAM 策略。有关更多信息，请参阅 *AWS Lambda 开发人员指南* 中的 [Lambda 功能的AWS 托管策略](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html#permissions-executionrole-features)。
+ 其他 IAM 策略：

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Action": [
                  "iam:DetachRolePolicy",
                  "iam:DeleteRole",
                  "iam:DeleteRolePolicy"
              ],
              "Resource": "arn:aws:iam::111122223333:role/parallelcluster/*",
              "Effect": "Allow"
          },
          {
              "Action": [
                  "iam:DeleteInstanceProfile",
                  "iam:RemoveRoleFromInstanceProfile"
              ],
              "Resource": "arn:aws:iam::111122223333:instance-profile/parallelcluster/*",
              "Effect": "Allow"
          },
          {
              "Action": "imagebuilder:DeleteInfrastructureConfiguration",
              "Resource": "arn:aws:imagebuilder:us-east-1:111122223333:infrastructure-configuration/parallelclusterimage-*",
              "Effect": "Allow"
          },
          {
              "Action": [
                  "imagebuilder:DeleteComponent"
              ],
              "Resource": [
                  "arn:aws:imagebuilder:us-east-1:111122223333:component/parallelclusterimage-*/*"
              ],
              "Effect": "Allow"
          },
          {
              "Action": "imagebuilder:DeleteImageRecipe",
              "Resource": "arn:aws:imagebuilder:us-east-1:111122223333:image-recipe/parallelclusterimage-*/*",
              "Effect": "Allow"
          },
          {
              "Action": "imagebuilder:DeleteDistributionConfiguration",
              "Resource": "arn:aws:imagebuilder:us-east-1:111122223333:distribution-configuration/parallelclusterimage-*",
              "Effect": "Allow"
          },
          {
              "Action": [
                  "imagebuilder:DeleteImage",
                  "imagebuilder:GetImage",
                  "imagebuilder:CancelImageCreation"
              ],
              "Resource": "arn:aws:imagebuilder:us-east-1:111122223333:image/parallelclusterimage-*/*",
              "Effect": "Allow"
          },
          {
              "Action": "cloudformation:DeleteStack",
              "Resource": "arn:aws:cloudformation:us-east-1:111122223333:stack/*/*",
              "Effect": "Allow"
          },
          {
              "Action": "ec2:CreateTags",
              "Resource": "arn:aws:ec2:us-east-1::image/*",
              "Effect": "Allow"
          },
          {
              "Action": "tag:TagResources",
              "Resource": "*",
              "Effect": "Allow"
          },
          {
              "Action": [
                  "lambda:DeleteFunction",
                  "lambda:RemovePermission"
              ],
              "Resource": "arn:aws:lambda:us-east-1:111122223333:function:ParallelClusterImage-*",
              "Effect": "Allow"
          },
          {
              "Action": "logs:DeleteLogGroup",
              "Resource": "arn:aws:logs:us-east-1:111122223333:log-group:/aws/lambda/ParallelClusterImage-*:*",
              "Effect": "Allow"
          },
          {
              "Action": [
                  "SNS:GetTopicAttributes",
                  "SNS:DeleteTopic",
                  "SNS:GetSubscriptionAttributes",
                  "SNS:Unsubscribe"
              ],
              "Resource": "arn:aws:sns:us-east-1:111122223333:ParallelClusterImage-*",
              "Effect": "Allow"
          }
      ]
  }
  ```

------

#### 其他 IAM 策略
<a name="iam-roles-in-parallelcluster-v3-custom-image-configuration-additionaliampolicies"></a>

[`Build`](Build-v3.md) / [`Iam`](Build-v3.md#Build-v3-Iam) / [`AdditionalIamPolicies`](Build-v3.md#yaml-build-image-Build-Iam-AdditionalIamPolicies)

您可以使用此选项将其它托管式 IAM 策略附加到与 EC2 Image Builder 用于生成自定义 AMI 的 Amazon EC2 实例关联的角色。

**警告**  
要使用此选项，请确保针对需要附加的 IAM 策略向 [AWS ParallelCluster用户](#iam-roles-in-parallelcluster-v3-user-policy-manage-iam)授予 `iam:AttachRolePolicy` 和 `iam:DetachRolePolicy` 权限。

#### 权限边界
<a name="iam-roles-in-parallelcluster-v3-custom-image-configuration-permissionsboundary"></a>

[`Build`](Build-v3.md) / [`Iam`](Build-v3.md#Build-v3-Iam) / [`PermissionsBoundary`](Build-v3.md#yaml-build-image-Build-Iam-PermissionsBoundary)

此参数强制 AWS ParallelCluster 将给定的 IAM 策略作为 a 附加`PermissionsBoundary`到在自定义 AMI 构建过程中创建的所有 IAM 角色。

有关使用此类功能所需的策略列表，请参阅 [`PermissionsBoundary` 模式](#iam-roles-in-parallelcluster-v3-permissionsboundary-mode)。

# 网络配置
<a name="network-configuration-v3"></a>

AWS ParallelCluster 使用亚马逊虚拟私有云 (VPC) Virtual Private Cloud 进行联网。VPC 提供了一个灵活且可配置的网络平台，您可以在其中部署集群。

VPC 必须有`DNS Resolution = yes`、`DNS Hostnames = yes`和 DHCP 选项以及该区域的正确域名。默认 DHCP 选项集已经指定了所需的 *AmazonProvidedDNS*。如果指定多个域名服务器，请参阅 *Amazon VPC 用户指南* 中的 [DHCP 选项集](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html)。

AWS ParallelCluster 支持以下高级配置：
+  适用于头节点和计算节点的一个子网。
+  两个子网，头节点位于一个公有子网中，计算节点位于私有子网中。子网可以是新的子网，也可以是现有子网。

所有这些配置都可以在有或没有公有 IP 地址的情况下运行。 AWS ParallelCluster 也可以部署为对所有 AWS 请求使用 HTTP 代理。这些配置的组合会产生许多部署方案。例如，您可以配置一个公有子网，允许所有人通过 Internet 进行访问。或者，您可以使用所有流量的 HTTP 代理配置完全私有网络。 AWS Direct Connect 

从 AWS ParallelCluster 3.0.0 开始，可以为每个队`SecurityGroups`列`AdditionalSecurityGroups`配置不同的`PlacementGroup`设置。有关更多信息，请参阅 [`HeadNode`](HeadNode-v3.md)/[`Networking`](HeadNode-v3.md#HeadNode-v3-Networking)、[`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`Networking`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-Networking) 和 [`AwsBatchQueues`](Scheduling-v3.md#Scheduling-v3-AwsBatchQueues)/[`Networking`](Scheduling-v3.md#Scheduling-v3-AwsBatchQueues-Networking)。

有关一些网络场景的插图，请参阅以下架构图。

**Topics**
+ [AWS ParallelCluster 在单个公有子网中](network-configuration-v3-single-subnet.md)
+ [AWS ParallelCluster 使用两个子网](network-configuration-v3-two-subnets.md)
+ [AWS ParallelCluster 在使用连接的单个私有子网中 AWS Direct Connect](network-configuration-v3-single-subnet-direct-connect.md)
+ [AWS ParallelCluster 使用调 AWS Batch 度器](network-configuration-v3-batch.md)
+ [AWS ParallelCluster 在无法访问互联网的单个子网中](aws-parallelcluster-in-a-single-public-subnet-no-internet-v3.md)

# AWS ParallelCluster 在单个公有子网中
<a name="network-configuration-v3-single-subnet"></a>

在此配置中，必须为集群的所有实例分配一个公有 IP 才能访问互联网。为此，请执行以下操作：
+ 通过为//中使用的子网启用 “启用自动分配公共 IPv4 地址” 设置[`SubnetId`](HeadNode-v3.md#yaml-HeadNode-Networking-SubnetId)或在 [`HeadNode`](HeadNode-v3.md)/[`Networking`](HeadNode-v3.md#HeadNode-v3-Networking)/中分配弹性 IP，确保为头节点分配了公有 IP 地址。[`HeadNode`[`Networking`[`ElasticIp`](HeadNode-v3.md#yaml-HeadNode-Networking-ElasticIp)](HeadNode-v3.md#HeadNode-v3-Networking)](HeadNode-v3.md)
+ 通过为///中使用的子网打开 “启用自动分配公有 IPv4 地址” 设置[`SubnetIds`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Networking-SubnetIds)或在 [`Scheduling`](Scheduling-v3.md)/[`SlurmQueues`[`Networking`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-Networking)](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/中设置[`AssignPublicIp`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Networking-AssignPublicIp):true，确保为计算节点分配了公有 IP 地址。[`Scheduling`[`SlurmQueues`[`Networking`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-Networking)](Scheduling-v3.md#Scheduling-v3-SlurmQueues)](Scheduling-v3.md)
+ 如果您定义了一个p4d实例类型，或者另一个具有多个网络接口或头节点的网络接口卡的实例类型，则必须将 [`HeadNode`](HeadNode-v3.md)/[`Networking`](HeadNode-v3.md#HeadNode-v3-Networking)/设置为[`ElasticIp`](HeadNode-v3.md#yaml-HeadNode-Networking-ElasticIp)`true`以提供公共访问权限。 AWS public IPs 只能分配给使用单个网络接口启动的实例。对于这种情况，我们建议您使用 [NAT 网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)为集群计算节点提供公有访问权限。有关 IP 地址的更多信息，请参阅 *Amazon EC2 Linux 实例用户指南中的在实例*[启动期间分配公有 IPv4 地址](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html#public-ip-addresses)。
+ 您无法定义p4d或hp6id实例类型，也无法定义具有多个网络接口或用于计算节点的网络接口卡的其他实例类型，因为 IPs 只能将 AWS 公共分配给使用单个网络接口启动的实例。有关 IP 地址的更多信息，请参阅 *Amazon EC2 Linux 实例用户指南中的在实例*[启动期间分配公有 IPv4 地址](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html#public-ip-addresses)。

有关更多信息，请参阅 *Amazon VPC 用户指南* 中的[启用互联网访问](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html#vpc-igw-internet-access)。

 ![\[ParallelCluster in a single public subnet\]](http://docs.aws.amazon.com/zh_cn/parallelcluster/latest/ug/images/single-public-subnet.png) 

 此架构的配置需要以下设置：

```
# Note that all values are only provided as examples
HeadNode:
  ...
  Networking:
    SubnetId: subnet-12345678 # subnet with internet gateway
    #ElasticIp: true | false | eip-12345678
Scheduling:
  Scheduler: slurm
  SlurmQueues:
    - ...
      Networking:
        SubnetIds:
          - subnet-12345678 # subnet with internet gateway
        #AssignPublicIp: true
```

# AWS ParallelCluster 使用两个子网
<a name="network-configuration-v3-two-subnets"></a>

在此配置中，只需要为集群的头节点分配公有 IP。您可以通过为//中使用的子网启用 “启用自动分配公有 IPv4地址” 设置[`SubnetId`](HeadNode-v3.md#yaml-HeadNode-Networking-SubnetId)或在 [`HeadNode`](HeadNode-v3.md)/[`Networking`](HeadNode-v3.md#HeadNode-v3-Networking)/中分配弹性 IP 来实现此目的。[`HeadNode`[`Networking`[`ElasticIp`](HeadNode-v3.md#yaml-HeadNode-Networking-ElasticIp)](HeadNode-v3.md#HeadNode-v3-Networking)](HeadNode-v3.md)

如果您定义了 p4d 实例类型或其他具有多个网络接口的实例类型或头节点的网络接口卡，则必须将 [`HeadNode`](HeadNode-v3.md)/[`Networking`](HeadNode-v3.md#HeadNode-v3-Networking)/设置为[`ElasticIp`](HeadNode-v3.md#yaml-HeadNode-Networking-ElasticIp)`true`以提供公共访问权限。 AWS public IPs 只能分配给使用单个网络接口启动的实例。有关 IP 地址的更多信息，请参阅 *Amazon EC2 Linux 实例用户指南中的在实例*[启动期间分配公有 IPv4 地址](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html#public-ip-addresses)。

此配置中用于队列的子网需要 [NAT 网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)或内部代理，以便为计算实例授予互联网访问权限。

 ![\[ParallelCluster using two subnets\]](http://docs.aws.amazon.com/zh_cn/parallelcluster/latest/ug/images/two-subnets.png) 

 对计算实例使用现有私有子网的配置需要以下设置：

```
# Note that all values are only provided as examples
HeadNode:
  ...
  Networking:
    SubnetId: subnet-12345678 # subnet with internet gateway
    #ElasticIp: true | false | eip-12345678
Scheduling:
  Scheduler: slurm
  SlurmQueues:
    - ...
      Networking:
        SubnetIds:
          - subnet-23456789 # subnet with NAT gateway
        #AssignPublicIp: false
```

# AWS ParallelCluster 在使用连接的单个私有子网中 AWS Direct Connect
<a name="network-configuration-v3-single-subnet-direct-connect"></a>

当 [`Scheduling`](Scheduling-v3.md)/[`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`Networking`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-Networking)/[`AssignPublicIp`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Networking-AssignPublicIp) 设置为 `false` 时，必须正确设置子网以便对所有流量使用代理。头节点和计算节点都需要 Web 访问权限。

 ![\[ParallelCluster in a single private subnet connected using Direct Connect\]](http://docs.aws.amazon.com/zh_cn/parallelcluster/latest/ug/images/single-private-DirectConnect.png) 

 此架构的配置需要以下设置：

```
# Note that all values are only provided as examples
HeadNode:
  ...
  Networking:
    SubnetId: subnet-34567890 # subnet with proxy
    Proxy:
      HttpProxyAddress: http://proxy-address:port
  Ssh:
    KeyName: ec2-key-name
Scheduling:
  Scheduler: slurm
  SlurmQueues:
    - ...
      Networking:
        SubnetIds:
          - subnet-34567890 # subnet with proxy
        AssignPublicIp: false
        Proxy:
          HttpProxyAddress: http://proxy-address:port
```

 

# AWS ParallelCluster 使用调 AWS Batch 度器
<a name="network-configuration-v3-batch"></a>

当您使用`awsbatch`作为调度器类型时， AWS ParallelCluster 会创建一个 AWS Batch 托管计算环境。 AWS Batch 环境管理 Amazon Elastic Container Service (Amazon ECS) 容器实例。这些实例在 [`AwsBatchQueues`](Scheduling-v3.md#Scheduling-v3-AwsBatchQueues)/[`Networking`](Scheduling-v3.md#Scheduling-v3-AwsBatchQueues-Networking)/[`SubnetIds`](Scheduling-v3.md#yaml-Scheduling-AwsBatchQueues-Networking-SubnetIds) 参数中配置的子网中启动。 AWS Batch 为了正常运行，Amazon ECS 容器实例需要访问外部网络才能与 Amazon ECS 服务终端节点通信。这会转换为以下情形：
+ 为队列指定的子网 ID 使用 [NAT 网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)访问互联网。我们建议采用此方法。
+ 在队列子网中启动的实例具有公有 IP 地址，并可通过互联网网关访问互联网。

此外，如果您对多节点并行作业感兴趣（来自 [AWS Batch 文档](https://docs.aws.amazon.com/batch/latest/userguide/multi-node-parallel-jobs.html#mnp-ce)）：

AWS Batch 多节点并行任务使用 Amazon ECS `awsvpc` 网络模式。这将使您的多节点并行作业容器具有与 Amazon EC2 实例相同的网络属性。每个多节点并行作业容器都可获得自己的弹性网络接口、主要私有 IP 地址以及内部 DNS 主机名。在同一 Amazon VPC 子网中创建网络接口，作为其主机计算资源。适用于计算资源的任何安全组，也适用于该主机计算资源。

当使用 Amazon ECS 任务联网时，`awsvpc` 网络模式不为使用 Amazon EC2 启动类型的任务提供具有公有 IP 地址的弹性网络接口。要访问互联网，必须在配置为使用 NAT 网关的私有子网中启动使用 Amazon EC2 启动类型的任务。

要使集群能够运行多节点并行作业，必须配置 [NAT 网关](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)。

 ![\[ParallelCluster with a NAT Gateway\]](http://docs.aws.amazon.com/zh_cn/parallelcluster/latest/ug/images/two-subnets-batch.png) 

之前的所有配置和注意事项也同样有效。 AWS Batch以下是 AWS Batch 网络配置的示例。

```
# Note that all values are only provided as examples
HeadNode:
  ...
  Networking:
    SubnetId: subnet-12345678 # subnet with internet gateway, NAT gateway or proxy
    #ElasticIp: true | false | eip-12345678
    #Proxy:
      #HttpProxyAddress: http://proxy-address:port
  Ssh:
    KeyName: ec2-key-name
Scheduling:
  Scheduler: awsbatch
  AwsBatchQueues:
    - ...
      Networking:
        SubnetIds:
          - subnet-23456789 # subnet with internet gateway, NAT gateway or proxy
        #AssignPublicIp: true | false
```

在 [`Scheduling`](Scheduling-v3.md)/[`AwsBatchQueues`](Scheduling-v3.md#Scheduling-v3-AwsBatchQueues)/[`Networking`](Scheduling-v3.md#Scheduling-v3-AwsBatchQueues-Networking) 部分中，[`SubnetIds`](Scheduling-v3.md#yaml-Scheduling-AwsBatchQueues-Networking-SubnetIds) 是列表类型，但目前仅支持一个子网。

有关更多信息，请参阅以下主题：
+  [AWS Batch 托管计算环境](https://docs.aws.amazon.com/batch/latest/userguide/compute_environments.html#managed_compute_environments) 
+  [AWS Batch 多节点并行作业](https://docs.aws.amazon.com/batch/latest/userguide/multi-node-parallel-jobs.html) 
+  [使用 awsvpc 网络模式进行 Amazon ECS 任务联网](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html) 

# AWS ParallelCluster 在无法访问互联网的单个子网中
<a name="aws-parallelcluster-in-a-single-public-subnet-no-internet-v3"></a>

没有互联网访问权限的子网不允许使用入站或出站互联网连接。此 AWS ParallelCluster 配置可以帮助关注安全的客户进一步增强其 AWS ParallelCluster 资源的安全性。 AWS ParallelCluster 节点 AWS ParallelCluster AMIs 的构建基础包括运行无法访问互联网的集群所需的所有软件。通过这种方式， AWS ParallelCluster 可以创建和管理带有无法访问互联网的节点的集群。

在本节中，您将了解如何配置集群。您还将了解运行无互联网访问权限的集群时的限制。

![\[AWS ParallelCluster 使用一个子网但没有互联网\]](http://docs.aws.amazon.com/zh_cn/parallelcluster/latest/ug/images/networking_single_subnet_no_internet.png)


**配置 VPC 端点**

为确保群集正常运行，群集节点必须能够与多个 AWS 服务进行交互。

创建并配置以下 [VPC 终端](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints.html)节点，以便集群节点无需访问互联网即可与 AWS 服务进行交互：

------
#### [ Commercial and AWS GovCloud (US) partitions ]


| 服务 | 服务名称 | Type | 
| --- | --- | --- | 
|  Amazon CloudWatch  |  com.amazonaws。 *region-id*.logs  |  接口  | 
|  CloudFormation  |  com.amazonaws。 *region-id*.cloudfor  |  接口  | 
|  Amazon EC2   |  com.amazonaws。 *region-id*.ec2  |  接口  | 
|  Amazon S3  |  com.amazonaws。 *region-id*.s3  |  网关  | 
|  Amazon DynamoDB  |  com.amazonaws。 *region-id*.dynamodb  |  网关  | 
|  AWS Secrets Manager\$1\$1  |  com.amazonaws。 *region-id*.secretsManag  |  接口  | 
|  AWS 弹性负载平衡\$1\$1\$1  |  com.amazonaws。 *region-id*.elasticload bal  |  接口  | 
|  AWS 自动缩放\$1\$1\$1  |  com.amazonaws。 *region-id*. 自动缩放  |  接口  | 

------
#### [ China partition ]


| 服务 | 服务名称 | Type | 
| --- | --- | --- | 
|  Amazon CloudWatch  |  com.amazonaws。 *region-id*.logs  |  接口  | 
|  CloudFormation  |  cn.com.amazonaws。 *region-id*.cloudfor  |  接口  | 
|  Amazon EC2   |  cn.com.amazonaws。 *region-id*.ec2  |  接口  | 
|  Amazon S3  |  com.amazonaws。 *region-id*.s3  |  网关  | 
|  Amazon DynamoDB  |  com.amazonaws。 *region-id*.dynamodb  |  网关  | 
|  AWS Secrets Manager\$1\$1  |  com.amazonaws。 *region-id*.secretsManag  |  接口  | 
|  AWS 弹性负载平衡\$1\$1\$1  |  com.amazonaws。 *region-id*.elasticload bal  |  接口  | 
|  AWS 自动缩放\$1\$1\$1  |  cn.com.amazonaws。 *region-id*. 自动缩放  |  接口  | 

------

\$1\$1 只有在启用了 [`DirectoryService`](DirectoryService-v3.md#DirectoryService-v3.properties) 时才需要此端点，否则它是可选的。

\$1\$1\$1 只有在启用时[LoginNodes](LoginNodes-v3.md)才需要这些端点，否则它们是可选的。

VPC 中的所有实例都必须具有适当的安全组才能与端点通信。您可以通过将安全组添加到 [`HeadNode`](HeadNode-v3.md) 配置下面的 [`AdditionalSecurityGroups`](HeadNode-v3.md#yaml-HeadNode-Networking-AdditionalSecurityGroups) 和 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues) 配置下面的 [`AdditionalSecurityGroups`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Networking-AdditionalSecurityGroups) 来实现这一目的。例如，如果创建了 VPC 端点而未显式指定安全组，则默认安全组将与端点关联。通过将默认安全组添加到 `AdditionalSecurityGroups`，即可启用集群与端点之间的通信。

**注意**  
当您使用 IAM 策略限制对 VPC 端点的访问时，必须将以下内容添加到 Amazon S3 VPC 端点：  

```
PolicyDocument:
  Version: 2012-10-17
  Statement:
    - Effect: Allow
      Principal: "*"
      Action:
        - "s3:PutObject"
      Resource:
        - !Sub "arn:${AWS::Partition}:s3:::cloudformation-waitcondition-${AWS::Region}/*"
```

**禁用 Route 53 并使用 Amazon EC2 主机名**

创建Slurm集群时， AWS ParallelCluster 会创建用于解析自定义计算节点主机名的私有 Route 53 托管区域，例如`{queue_name}-{st|dy}-{compute_resource}-{N}`。由于 Route 53 不支持 VPC 端点，因此必须禁用此功能。此外， AWS ParallelCluster 必须配置为使用默认 Amazon EC2 主机名，例如`ip-1-2-3-4`。将以下设置应用于您的集群配置：

```
...
Scheduling:
  ...
  SlurmSettings:
    Dns:
      DisableManagedDns: true
      UseEc2Hostnames: true
```

**警告**  
对于在 [`SlurmSettings`](Scheduling-v3.md#Scheduling-v3-SlurmSettings)/[`Dns`](Scheduling-v3.md#Scheduling-v3-SlurmSettings-Dns)/[`DisableManagedDns`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-Dns-DisableManagedDns) 和 [`UseEc2Hostnames`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-Dns-UseEc2Hostnames) 设置为 `true` 的情况下创建的集群，DNS 无法解析 Slurm `NodeName`。可改用 Slurm `NodeHostName`。

**注意**  
**从 3.3.0 AWS ParallelCluster 版本开始，本说明不相关。**  
对于 3.3.0 之前的 AWS ParallelCluster 支持版本：  
如果设置`UseEc2Hostnames`为`true`，则使用 AWS ParallelCluster `prolog`和`epilog`脚本设置Slurm配置文件：  
分配了每个作业后，`prolog` 用于向计算节点上的 `/etc/hosts` 中添加节点信息。
`epilog` 用于清理 `prolog` 写入的内容。
要添加自定义 `epilog` 或 `prolog` 脚本，请分别将其添加到 `/opt/slurm/etc/pcluster/prolog.d/` 或 `/opt/slurm/etc/pcluster/epilog.d/` 文件夹。

**集群配置**

了解如何将集群配置为在没有互联网连接的子网中运行。

此架构的配置需要以下设置：

```
# Note that all values are only provided as examples
...
HeadNode:
  ...
  Networking:
    SubnetId: subnet-1234567890abcdef0 # the VPC of the subnet needs to have VPC endpoints
    AdditionalSecurityGroups:
      - sg-abcdef01234567890 # optional, the security group that enables the communication between the cluster and the VPC endpoints
LoginNodes: # optional, if enabled, requires creation and configuration of VPC endpoints for AWS Elastic Load Balancing (ELB) and Auto Scaling services
  Pools:
    - ...
      Networking:
        SubnetIds:
          - subnet-1234567890abcdef0 # the VPC of the subnet needs to have VPC endpoints attached
        AdditionalSecurityGroups:
          - sg-1abcdef01234567890 # optional, the security group that enables the communication between the cluster and the VPC endpoints
Scheduling:
  Scheduler: Slurm # Cluster in a subnet without internet access is supported only when the scheduler is Slurm.
  SlurmSettings:
    Dns:
      DisableManagedDns: true
      UseEc2Hostnames: true
  SlurmQueues:
    - ...
      Networking:
        SubnetIds:
          - subnet-1234567890abcdef0 # the VPC of the subnet needs to have VPC endpoints attached
        AdditionalSecurityGroups:
          - sg-1abcdef01234567890 # optional, the security group that enables the communication between the cluster and the VPC endpoints
```
+ [`SubnetId(s)`](HeadNode-v3.md#yaml-HeadNode-Networking-SubnetId)：无互联网访问权限的子网。

  要启用 AWS ParallelCluster 和 AWS 服务之间的通信，子网的 VPC 必须连接 VPC 终端节点。在创建集群之前，请确认子网中[已禁用自动分配公有 IPv4 地址](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#subnet-public-ip)，以确保`pcluster`命令可以访问集群。
+ [`AdditionalSecurityGroups`](HeadNode-v3.md#yaml-HeadNode-Networking-AdditionalSecurityGroups)：启用集群和 VPC 端点之间通信的安全组。

  可选：
  + 如果创建了 VPC 端点而未显式指定安全组，则会关联 VPC 的默认安全组。因此，请将默认安全组提供给 `AdditionalSecurityGroups`。
  + 如果在创建集群 and/or 时使用自定义安全组，`AdditionalSecurityGroups`则无需使用 VPC 终端节点，只要自定义安全组支持集群和 VPC 终端节点之间的通信。
+ [`Scheduler`](Scheduling-v3.md#yaml-Scheduling-Scheduler)：集群调度器。

  `slurm` 是唯一的有效值。只有 Slurm 调度器支持没有互联网访问权限的子网中的集群。
+ [`SlurmSettings`](Scheduling-v3.md#Scheduling-v3-SlurmSettings)：Slurm 设置。

  请参阅上一节*禁用 Route 53 并使用 Amazon EC2 主机名*。

**限制**
+ *通过 SSH 或 Amazon DCV 连接到头节点：*连接到集群时，请确保连接客户端可以通过私有 IP 地址访问集群的头节点。如果客户端与头节点不在同一 VPC 中，请在该 VPC 的公有子网中使用代理实例。此要求适用于 SSH 和 DCV 连接。如果子网没有互联网访问权限，则无法访问头节点的公有 IP。`pcluster ssh` 和 `dcv-connect` 命令使用公有 IP（如果存在）或私有 IP。在创建集群之前，请确认子网中[已禁用自动分配公有 IPv4 地址](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#subnet-public-ip)，以确保`pcluster`命令可以访问集群。

  以下示例显示了如何连接到在集群头节点中运行的 DCV 会话。您可以通过代理 Amazon EC2 实例进行连接。该实例用作 PC 的 Amazon DCV 服务器，也用作私有子网中头节点的客户端。

  利用公有子网中的代理实例通过 DCV 进行连接：

  1. 在与集群子网位于同一 VPC 中的公有子网中创建一个 Amazon EC2 实例。

  1. 确保在您的 Amazon EC2 实例上安装 Amazon DCV 客户端和服务器。

  1. 将 AWS ParallelCluster 用户策略附加到代理 Amazon EC2 实例。有关更多信息，请参阅 [AWS ParallelCluster `pcluster`用户策略示例](iam-roles-in-parallelcluster-v3.md#iam-roles-in-parallelcluster-v3-example-user-policies)。

  1. 安装 AWS ParallelCluster 在代理 Amazon EC2 实例上。

  1. 通过 DCV 连接到代理 Amazon EC2 实例。

  1. 在代理实例上使用 `pcluster dcv-connect` 命令即可连接到没有互联网访问权限的子网中的集群。
+ *与其他 AWS 服务互动：*上面仅列出了严格要求 AWS ParallelCluster 的服务。如果您的集群必须与其他服务交互，请创建相应的 VPC 端点。

# 由配置的登录节点 AWS ParallelCluster
<a name="login-nodes-v3"></a>

从版本 3.7.0 开始， AWS ParallelCluster 集群管理员可以配置登录节点，这些节点可用于向用户提供运行作业的访问权限，而不是直接访问集群头节点。  具有适当权限的集群用户可以使用 Active Directory 或其 ssh 凭证登录、提交和管理其作业。这可以改善集群管理，并最大限度地减小耗尽 Slurm 管理集群所需的头节点资源的几率。已登录用户还可以访问登录节点上挂载的集群的所有共享存储。如果需要停止登录节点，则登录的用户将通过他们正在使用的活动 shell 会话提前收到通知。

 登录节点被指定为池，池定义了一组具有相同资源配置的登录节点。池中的所有登录节点都配置为[网络负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html)的一部分，后者会以循环方式在各个登录节点之间分配会话。现有实施使用户能够指定多个登录节点池。

# 登录节点的安全性
<a name="login-nodes-security"></a>

除非为登录节点[池指定了`AllowedIPs`设置 [`AllowedIps`](HeadNode-v3.md#yaml-HeadNode-Ssh-AllowedIps)，否则 AllowedIps 登录节点将继承头节点](LoginNodes-v3.md#LoginNodes-v3-Pools)的设置。通过这种方式，集群管理员可以通过指定源 CIDR 或允许在头节点或登录节点池上进行 SSH 连接的前缀列表来限制集群的安全状态。

 在本实现中，启用登录节点时，不会自动限制对头节点的访问。如果需要，集群管理员可以通过使用标准 Linux 命令来更新头节点 ssh 配置，从而限制此访问权限。这也可以通过在头节点上指定自定义安全组来实现，方法是使用 ParallelCluster YAML 文件头节点部分中的`AdditionalSecurityGroups`设置来拒绝来自未经授权的用户的连接。

# 登录节点联网
<a name="login-nodes-networking"></a>

登录节点使用为登录节点池配置的网络负载均衡器的单个连接地址进行预置。该地址的连接设置基于登录节点池配置中指定的子网类型。
+ 如果子网是私有子网，则该地址将是私有地址，为了向登录节点授予访问权限，集群管理员必须预置堡垒主机。
+ 如果子网是公有子网，则该地址将是公有地址 

所有连接请求均由网络负载均衡器使用循环路由进行管理。

# 登录节点存储
<a name="login-nodes-storage"></a>

在集群上配置的所有共享存储（ ParallelCluster 包括托管存储）都将安装在所有登录节点上。

 **检索登录节点信息** 

要检索为访问登录节点而预置的单个连接的地址，集群管理员可以运行 [`describe-cluster`](pcluster.describe-cluster-v3.md) 命令。该命令还将提供有关登录节点状态的更多信息。

登录节点是一种支持的新节点类型 ParallelCluster ，在查询特定节点类型的状态时，可以使用[`describe-cluster-instances`](pcluster.describe-cluster-instances-v3.md)命令指定登录节点。

 登录节点池的单个连接地址的可用性并不能阻止对特定登录节点的直接访问。但为了避免 ssh 客户端发出警告，不建议使用直接连接。ssh 客户端在本地存储每个目标地址的主机标识符。由于每个池的主机标识符是特定的，因此使用不同的 IPs 和/或单个连接地址可能具有相同的主机标识符与不同的目标地址相关联：这可能会导致 ssh 客户端发出警告，因为相同的主机标识符与多个目标相关联。

# 登录节点的 Imds 属性
<a name="login-nodes-imds"></a>

登录节点的 IMDS（以及实例配置文件凭证）的访问权限仅限于根用户、集群管理用户（默认）和操作系统特定的`pc-cluster-admin`默认用户（`ec2-user`在 Amazon Linux 2 和 RedHat Ubuntu 18.04 `ubuntu` 上）。

要限制 IMDS 的访问权限，请 AWS ParallelCluster 管理一连串的。`iptables`

**注意**  
对 `iptables` 或 `ip6tables` 规则进行任何自定义都可能干扰登录节点上用于限制 IMDS 访问权限的机制。另请参阅 [`Imds property setting`](HeadNode-v3.md#HeadNode-v3-Imds)。

# 登录节点生命周期
<a name="login-nodes-lifecycle"></a>

目前没有用于停止和启动池中登录节点的专用命令。为了停止池中的登录节点，集群管理员必须更新集群配置，将登录节点数指定为零 (`Count: 0`)，然后运行 [`pcluster.update-cluster-v3`](pcluster.update-cluster-v3.md) 命令。

**注意**  
已登录用户会收到有关特定实例终止以及相关宽限期的通知。在宽限期内，除了来自[集群默认用户](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/managing-users.html)的连接外，不允许任何新连接。集群管理员可以从头节点或登录节点上通过编辑 `/opt/parallelcluster/shared_login_nodes/loginmgtd_config.json` 文件来自定义显示的消息。当您使用[AWS Systems Manager Session Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)会话管理器进行连接时，此终止消息不可见。

 为了启动登录节点池，集群管理员必须在集群配置中还原先前的 `Count` 值，然后运行 [`update-cluster`](pcluster.update-cluster-v3.md) 命令。

# 运行登录节点池所需的权限
<a name="login-nodes-permissions"></a>

要管理登录节点池，集群管理员必须具有以下额外权限：

```
            - Action:
              - iam:CreateServiceLinkedRole
              - autoscaling:DeleteAutoScalingGroup
              - autoscaling:DeleteLifecycleHook
              - autoscaling:Describe*
              - autoscaling:PutLifecycleHook
              - autoscaling:UpdateAutoScalingGroup
              - elasticloadbalancing:CreateListener
              - elasticloadbalancing:CreateTargetGroup
              - elasticloadbalancing:DeleteListener
              - elasticloadbalancing:DeleteLoadBalancer
              - elasticloadbalancing:DeleteTargetGroup
              - elasticloadbalancing:Describe*
              - elasticloadbalancing:ModifyLoadBalancerAttributes
            Resource: '*'
            Condition:
              ForAllValues:StringEquals:
                aws:TagKeys: [ "parallelcluster:cluster-name" ]
            - Action:
              - autoscaling:CreateAutoScalingGroup
              - autoscaling:DeleteTags
              - autoscaling:CreateOrUpdateTags
              - elasticloadbalancing:AddTags
              - elasticloadbalancing:CreateLoadBalancer
              - elasticloadbalancing:RemoveTags
              - elasticloadbalancing:ModifyTargetGroup
            Resource: '*'
            Effect: Allow
```

# 自定义引导操作
<a name="custom-bootstrap-actions-v3"></a>

如果定义了 [`HeadNode`](HeadNode-v3.md)/[`CustomActions`](HeadNode-v3.md#HeadNode-v3-CustomActions)/[`OnNodeStart`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeStart)配置设置，则会在节点启动后立即 AWS ParallelCluster 运行任意代码。如果定义了 [`HeadNode`](HeadNode-v3.md)/[`CustomActions`](HeadNode-v3.md#HeadNode-v3-CustomActions)/[`OnNodeConfigured`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeConfigured)配置设置，则在正确完成节点配置后 AWS ParallelCluster 运行代码。

从 3.4.0 AWS ParallelCluster 版开始，如果您定义了 [`HeadNode`](HeadNode-v3.md)/[`CustomActions`](HeadNode-v3.md#HeadNode-v3-CustomActions)/[`OnNodeUpdated`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeUpdated)配置设置，则可以在头节点更新后运行代码。

在大多数情况下，此代码存储在 Amazon Simple Storage Service (Amazon S3) 中并通过 HTTPS 连接进行访问。此代码将以 `root` 用户身份运行，可以采用集群操作系统支持的任何脚本语言。代码通常采用 *Bash* 或 *Python* 语言。

**注意**  
从 3.7.0 AWS ParallelCluster 版开始，集群 [`Imds`](Imds-cluster-v3.md#Imds-cluster-v3.title)/[`ImdsSupport`](Imds-cluster-v3.md#yaml-cluster-Imds-ImdsSupport)默认设置为。`v2.0`  
当您创建要升级到版本 3.7.0 及更高版本的新集群时，要么更新您的自定义引导操作脚本使其与之兼容，要 IMDSv2 么在集群配置文件`v1.0`中将 [`Imds`](Imds-cluster-v3.md#Imds-cluster-v3.title)/[`ImdsSupport`](Imds-cluster-v3.md#yaml-cluster-Imds-ImdsSupport)设置为。

**警告**  
您有责任按照责任[共担模型](https://aws.amazon.com/compliance/shared-responsibility-model/)中所述配置自定义脚本和参数。验证您的自定义引导脚本和参数是否来自您信任的可以完全访问集群节点的来源。

**警告**  
AWS ParallelCluster 不支持使用通过`/etc/parallelcluster/cfnconfig`文件提供的内部变量。此文件可能会在未来版本中删除。

在开始任何节点部署引导操作（例如配置 NAT、Amazon Elastic Block Store (Amazon EBS) 或调度器）之前，将会调用 `OnNodeStart` 操作。`OnNodeStart` 引导操作可能包括修改存储、添加额外的用户和添加程序包。

**注意**  
如果您为集群配置[`DirectoryService`](DirectoryService-v3.md)和 [`HeadNode`[`CustomActions`](HeadNode-v3.md#HeadNode-v3-CustomActions)](HeadNode-v3.md)//[`OnNodeStart`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeStart)脚本，则会在集群运行脚本`sssd`之前 AWS ParallelCluster 配置`DirectoryService`并重新启动。`OnNodeStart`

节点引导过程完成后将会调用 `OnNodeConfigured` 操作。`OnNodeConfigured` 操作是实例被视为完全配置并已完成之前执行的最后操作。某些 `OnNodeConfigured` 操作包括更改调度器设置、修改存储和修改程序包。您可以通过在配置期间指定参数来将参数传递给脚本。

在头节点更新完成并且调度器和共享存储与最新的集群配置更改保持一致之后，将会调用 `OnNodeUpdated` 操作。

当 `OnNodeStart` 或 `OnNodeConfigured` 自定义操作成功时，将使用退出代码零 (0) 来表示成功。任何其他退出代码都表示实例引导失败。

当 `OnNodeUpdated` 自定义操作成功时，将使用退出代码零 (0) 来表示成功。任何其他退出代码都表示更新失败。

**注意**  
如果配置 [`OnNodeUpdated`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeUpdated)，则在更新失败时，必须将 `OnNodeUpdated` 操作手动恢复到先前的状态。  
如果 `OnNodeUpdated` 自定义操作失败，则更新将回滚到之前的状态。但 `OnNodeUpdated` 操作仅在更新时运行，而不是在堆栈回滚时运行。

在/和 i [`HeadNode`](HeadNode-v3.md)/[`Scheduling`[`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)](Scheduling-v3.md)/[`CustomActions`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-CustomActions)配置部分中，您可以为头节点[`CustomActions`](HeadNode-v3.md#HeadNode-v3-CustomActions)和每个队列指定不同的脚本。 [`OnNodeUpdated`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeUpdated)只能在该`HeadNode`部分中进行配置。

**注意**  
在 3.0 AWS ParallelCluster 版本之前，无法为头节点和计算节点指定不同的脚本。请参阅 [从 AWS ParallelCluster 2.x 升级到 3.x](moving-from-v2-to-v3.md)。

**Topics**
+ [用于定义操作和参数的配置设置](custom-bootstrap-actions-config-v3.md)
+ [参数](custom-bootstrap-actions-args-v3.md)
+ [包含自定义引导操作的示例集群](custom-bootstrap-actions-example-cluster-v3.md)
+ [如何更新自定义引导脚本的示例 IMDSv2](custom-bootstrap-actions-example-imdsv2-v3.md)
+ [如何更新配置的示例 IMDSv1](custom-bootstrap-actions-example-imdsv1-v3.md)

# 用于定义操作和参数的配置设置
<a name="custom-bootstrap-actions-config-v3"></a>

以下配置设置用于定义 [`HeadNode`](HeadNode-v3.md)/[`CustomActions`](HeadNode-v3.md#HeadNode-v3-CustomActions)/[`OnNodeStart`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeStart)、[`OnNodeConfigured`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeConfigured)、[`OnNodeUpdated`](HeadNode-v3.md#yaml-HeadNode-CustomActions-OnNodeUpdated) 以及 [`Scheduling`](Scheduling-v3.md)/[`CustomActions`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-CustomActions)/[`OnNodeStart`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-CustomActions-OnNodeStart)、[`OnNodeConfigured`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-CustomActions-OnNodeConfigured) 操作和参数。

```
HeadNode:
  [...]
  CustomActions:
    OnNodeStart:
      # Script URL. This is run before any of the bootstrap scripts are run
      Script: s3://amzn-s3-demo-bucket/on-node-start.sh
      Args:
        - arg1
    OnNodeConfigured:
      # Script URL. This is run after all the bootstrap scripts are run
      Script: s3://amzn-s3-demo-bucket/on-node-configured.sh
      Args:
        - arg1
    OnNodeUpdated:
      # Script URL. This is run after the head node update is completed.
      Script: s3://amzn-s3-demo-bucket/on-node-updated.sh
      Args:
        - arg1
  # Bucket permissions
  Iam:
    S3Access:
      - BucketName: bucket_name
        EnableWriteAccess: false
Scheduling:
  Scheduler: slurm
   [...]
  SlurmQueues:
    - Name: queue1
      [...]
      CustomActions:
        OnNodeStart:
          Script: s3://amzn-s3-demo-bucket/on-node-start.sh
          Args:
            - arg1
        OnNodeConfigured:
          Script: s3://amzn-s3-demo-bucket/on-node-configured.sh
          Args:
            - arg1
      Iam:
        S3Access:
          - BucketName: bucket_name
            EnableWriteAccess: false
```

使用`Sequence`设置（在 3.6.0 AWS ParallelCluster 版本中添加）：

```
HeadNode:
  [...]
  CustomActions:
    OnNodeStart:
      # Script URLs. The scripts are run in the same order as listed in the configuration, before any of the bootstrap scripts are run.
      Sequence:
        - Script: s3://amzn-s3-demo-bucket/on-node-start1.sh
          Args:
            - arg1
        - Script: s3://amzn-s3-demo-bucket/on-node-start2.sh
          Args:
            - arg1
        [...]
    OnNodeConfigured:
      # Script URLs. The scripts are run in the same order as listed in the configuration, after all the bootstrap scripts are run.
      Sequence:
        - Script: s3://amzn-s3-demo-bucket/on-node-configured1.sh
          Args:
            - arg1
        - Script: s3://amzn-s3-demo-bucket/on-node-configured2.sh
          Args:
            - arg1
        [...]
    OnNodeUpdated:
      # Script URLs. The scripts are run in the same order as listed in the configuration, after the head node update is completed.
      Sequence:
        - Script: s3://amzn-s3-demo-bucket/on-node-updated1.sh
          Args:
            - arg1
        - Script: s3://amzn-s3-demo-bucket/on-node-updated2.sh
          Args:
            - arg1
        [...]
  # Bucket permissions
  Iam:
    S3Access:
      - BucketName: bucket_name
        EnableWriteAccess: false
Scheduling:
  Scheduler: slurm
   [...]
  SlurmQueues:
    - Name: queue1
      [...]
      CustomActions:
        OnNodeStart:
          # Script URLs. The scripts are run in the same order as listed in the configuration, before any of the bootstrap scripts are run
          Sequence:
            - Script: s3://amzn-s3-demo-bucket/on-node-start1.sh
              Args:
                - arg1
            - Script: s3://amzn-s3-demo-bucket/on-node-start2.sh
              Args:
                - arg1
            [...]
        OnNodeConfigured:
          # Script URLs. The scripts are run in the same order as listed in the configuration, after all the bootstrap scripts are run
          Sequence:
            - Script: s3://amzn-s3-demo-bucket/on-node-configured1.sh
              Args:
                - arg1
            - Script: s3://amzn-s3-demo-bucket/on-node-configured2.sh
              Args:
                - arg1
            [...]
      Iam:
        S3Access:
          - BucketName: bucket_name
            EnableWriteAccess: false
```

该`Sequence`设置是从 3.6.0 AWS ParallelCluster 版本开始添加的。指定 `Sequence` 后，您可以列出自定义操作的多个脚本。在配置自定义操作时， AWS ParallelCluster 继续支持使用单个脚本而不包括 `Sequence`。

AWS ParallelCluster 不支持同时包含单个脚本和`Sequence`同一个自定义操作。例如，如果您指定以下配置，则会 AWS ParallelCluster 失败。

```
[...]
  CustomActions:
    OnNodeStart:
      # Script URL. This is run before any of the bootstrap scripts are run
      Script: s3://amzn-s3-demo-bucket/on-node-start.sh
          Args:
            - arg1
      # Script URLs. The scripts are run in the same order as listed in the configuration, before any of the bootstrap scripts are run.
      Sequence:
        - Script: s3://amzn-s3-demo-bucket/on-node-start1.sh
          Args:
            - arg1
        - Script: s3://amzn-s3-demo-bucket/on-node-start2.sh
          Args:
            - arg1
[...]
```

# 参数
<a name="custom-bootstrap-actions-args-v3"></a>

在 AWS ParallelCluster 2.x 中，`$1`参数是保留的，用于存储自定义脚本的 URL。如果要重复使用为 AWS ParallelCluster 2.x和 AWS ParallelCluster 3.x创建的自定义引导脚本，则需要通过考虑参数的转移来调整它们。请参阅 [从 AWS ParallelCluster 2.x 升级到 3.x](moving-from-v2-to-v3.md)。

# 包含自定义引导操作的示例集群
<a name="custom-bootstrap-actions-example-cluster-v3"></a>

以下步骤创建一个要在节点配置完成后执行的简单脚本，该脚本将在集群的节点中安装 `R,` `curl` 和 `wget` 软件包。

1. 创建脚本。

   ```
   #!/bin/bash
     echo "The script has $# arguments"
     for arg in "$@"
     do
         echo "arg: ${arg}"
     done
     yum -y install "${@:1}"
   ```

1. 使用正确的权限将脚本上传到 Amazon S3。如果公共读取权限不适合您，请使用 [`HeadNode`](HeadNode-v3.md)/[`Iam`](HeadNode-v3.md#HeadNode-v3-Iam)/[`S3Access`](HeadNode-v3.md#yaml-HeadNode-Iam-S3Access) 和 [`Scheduling`](Scheduling-v3.md)/[`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues) 配置部分。有关更多信息，请参阅 [使用 Amazon S3](s3_resources-v3.md)。

   ```
   $ aws s3 cp --acl public-read /path/to/myscript.sh s3://amzn-s3-demo-bucket/myscript.sh
   ```
**重要**  
如果脚本是在 Windows 上编辑的，则必须将行结尾从 CRLF 更改为 LF，然后才能将脚本上传到 Amazon S3。

1. 更新 AWS ParallelCluster 配置以包含新`OnNodeConfigured`操作。

   ```
   CustomActions:
     OnNodeConfigured:
       Script: https://<amzn-s3-demo-bucket>.s3.<region>.amazonaws.com/myscript.sh
       Args:
         - "R"
         - "curl"
         - "wget"
   ```

   如果存储桶没有公共读取权限，则使用 `s3` 作为 URL 协议。

   ```
   CustomActions:
     OnNodeConfigured:
       Script: s3://amzn-s3-demo-bucket/myscript.sh
       Args:
         - "R"
         - "curl"
         - "wget"
   ```

1. 启动集群。

   ```
   $ pcluster create-cluster --cluster-name mycluster \
     --region <region> --cluster-configuration config-file.yaml
   ```

1. 验证输出。
   + 如果您在`HeadNode`配置中添加了自定义操作，请登录到头节点并运行以下命令`/var/log/cfn-init.log`来检查位于的`cfn-init.log`文件：

     ```
     $ less /var/log/cfn-init.log
       2021-09-03 10:43:54,588 [DEBUG] Command run
       postinstall output: The script has 3 arguments
       arg: R
       arg: curl
       arg: wget
       Loaded plugins: dkms-build-requires, priorities, update-motd, upgrade-helper
       Package R-3.4.1-1.52.amzn1.x86_64 already installed and latest version
       Package curl-7.61.1-7.91.amzn1.x86_64 already installed and latest version
       Package wget-1.18-4.29.amzn1.x86_64 already installed and latest version
       Nothing to do
     ```
   + 如果您将自定义操作添加到了 `SlurmQueues` 设置中，请检查位于计算节点中 `/var/log/cloud-init.log` 处的 `cloud-init.log`。用于 CloudWatch 查看这些日志。

   您可以在 Amazon CloudWatch 控制台中查看这两个日志。有关更多信息，请参阅 [与 Amazon CloudWatch 日志集成](cloudwatch-logs-v3.md)。

# 如何更新自定义引导脚本的示例 IMDSv2
<a name="custom-bootstrap-actions-example-imdsv2-v3"></a>

在以下示例中，我们将更新用于 IMDSv1 的自定义引导操作脚本，以便将其用于 IMDSv2。IMDSv1 脚本检索 Amazon EC2 实例 AMI ID 元数据。

```
#!/bin/bash
AMI_ID=$(curl http://169.254.169.254/latest/meta-data/ami-id)
echo $AMI_ID >> /home/ami_id.txt
```

下图显示了为兼容而修改的自定义引导操作脚本。 IMDSv2

```
#!/bin/bash
AMI_ID=$(TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
         && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/ami-id)
echo $AMI_ID >> /home/ami_id.txt
```

有关更多信息，请参阅《适用于 *Linux 实例的 Amazon EC2 用户指南》中的检索实例*[元数据](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html#instancedata-meta-data-retrieval-examples)。

# 如何更新配置的示例 IMDSv1
<a name="custom-bootstrap-actions-example-imdsv1-v3"></a>

以下是使用 3.7.0 及更早 AWS ParallelCluster 版本 IMDSv1 时支持的集群配置示例。

```
Region: us-east-1
Imds:
  ImdsSupport: v1.0
Image:
  Os: alinux2
HeadNode:
  InstanceType: t2.micro
  Networking:
    SubnetId: subnet-abcdef01234567890
  Ssh:
    KeyName: key-name
  CustomActions:
    OnNodeConfigured:
      Script: Script-path
Scheduling:
  Scheduler: slurm
  SlurmQueues:
  - Name: queue1
    CustomActions:
      OnNodeConfigured:
        Script: Script-path
    ComputeResources:
    - Name: t2micro
      Instances:
      - InstanceType: t2.micro
      MinCount: 11
    Networking:
      SubnetIds:
      - subnet-abcdef01234567890
```

# 使用 Amazon S3
<a name="s3_resources-v3"></a>

您可以通过配置 AWS ParallelCluster中的// [`S3Access`](HeadNode-v3.md#yaml-HeadNode-Iam-S3Access)和 [`HeadNode`](HeadNode-v3.md)//[`Iam`[`Scheduling`[`SlurmQueues`[`- Name`[`Iam`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-Iam)](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Name)](Scheduling-v3.md#Scheduling-v3-SlurmQueues)](Scheduling-v3.md)](HeadNode-v3.md#HeadNode-v3-Iam)/[`S3Access`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Iam-S3Access)参数 AWS ParallelCluster 配置对 Amazon S3 的访问权限。

## 示例
<a name="examples-s3-v3"></a>

以下示例配置对 *firstbucket/read\$1only/* 中所有对象的只读访问权限，对 `secondbucket/read_and_write/` 中所有对象的读/写访问权限。

```
...
HeadNode:  
  ...
  Iam:
    S3Access:
      - BucketName: firstbucket
        KeyName: read_only/*
        EnableWriteAccess: false
      - BucketName: secondbucket
        KeyName: read_and_write/*
        EnableWriteAccess: true
...
```

下一个示例配置对账户任何存储桶 (\$1) 的 `read_only/` 文件夹中所有对象的只读访问权限。

```
...
HeadNode:  
  ...
  Iam: 
    S3Access:
      - BucketName: *
        KeyName: read_only/*
        EnableWriteAccess: false
...
```

最后一个示例配置对账户中所有存储桶和对象的 read\$1only 访问权限。

```
...
HeadNode:  
  ...
  Iam:   
    S3Access:
      - BucketName: *
...
```

# 使用竞价型实例
<a name="spot-v3"></a>

AWS ParallelCluster 如果您在集群配置文件`SPOT`中将 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`CapacityType`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-CapacityType)或 [`AwsBatchQueues`](Scheduling-v3.md#Scheduling-v3-AwsBatchQueues)/设置为 [`CapacityType`](Scheduling-v3.md#yaml-Scheduling-AwsBatchQueues-CapacityType)，则使用竞价型实例。竞价型实例比按需型实例更具成本效益，但它们可能会中断。利用*竞价型实例中断通知可能会有所帮助，这些通知*会在 Amazon EC2 必须停止或终止您的竞价型实例之前提供两分钟的警告。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[竞价型实例中断情况](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html)。要了解 [`AwsBatchQueues`](Scheduling-v3.md#Scheduling-v3-AwsBatchQueues) 如何使用竞价型实例，请参阅 *AWS Batch User Guide* 中的 [Compute Resources](https://docs.aws.amazon.com/batch/latest/userguide/compute_environment_parameters.html#compute_environment_compute_resources)。

 AWS ParallelCluster 配置的调度器将任务分配给带有竞价型实例的队列中的计算资源，就像将任务分配给带有按需实例的队列中的计算资源一样。

使用竞价型实例时，您的账户中必须存在 AWSServiceRoleForEC2竞价服务相关角色。要使用在您的账户中创建此角色 AWS CLI，请运行以下命令：

```
$ aws iam create-service-linked-role --aws-service-name spot.amazonaws.com
```

有关更多信息，请参阅《Amazon EC2 用户指南》**中的[竞价型实例请求的服务相关角色](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html#service-linked-roles-spot-instance-requests)。

以下各部分介绍了使用 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues) 时竞价型实例可能被中断的三种情形。

# 情形 1：没有运行作业的竞价型实例被中断
<a name="no-jobs-v3"></a>

发生这种中断时，如果调度器队列有需要额外实例的待处理任务，或者活动实例的数量小于 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`ComputeResources`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources)/[`MinCount`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MinCount)，则 AWS ParallelCluster 尝试替换实例。如果 AWS ParallelCluster 无法配置新实例，则会定期重复请求新实例。

# 情形 2：运行单节点作业的竞价型实例被中断
<a name="single-node-v3"></a>

作业失败，状态代码为 `NODE_FAIL`，并且该作业重新排入队列（除非在提交作业时指定了 `--no-requeue`）。如果节点是静态节点，则会将其替换。如果节点是动态节点，则会终止并重置该节点。有关 `sbatch`（包括 `--no-requeue` 参数）的更多信息，请参阅 *Slurm 文档*中的 [https://slurm.schedmd.com/sbatch.html](https://slurm.schedmd.com/sbatch.html)。

# 情形 3：运行多节点作业的竞价型实例被中断
<a name="multi-node-v3"></a>

作业失败，状态代码为 `NODE_FAIL`，并且该作业重新排入队列（除非在提交作业时指定了 `--no-requeue`）。如果节点是静态节点，则会将其替换。如果节点是动态节点，则会终止并重置该节点。运行已终止作业的其他节点可能会被分配给其他待处理作业，或在经过配置的 [`SlurmSettings`](Scheduling-v3.md#Scheduling-v3-SlurmSettings)/[`ScaledownIdletime`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-ScaledownIdletime) 时间后进行缩减。

有关竞价型实例的更多信息，请参阅《Amazon EC2 用户指南》**中的[竞价型实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html)。

# 支持的调度器 AWS ParallelCluster
<a name="schedulers-v3"></a>

 AWS ParallelCluster 支持Slurm和 AWS Batch 调度程序，它们使用设置进行[`Scheduler`](Scheduling-v3.md#yaml-Scheduling-Scheduler)设置。以下主题将介绍每种调度器及其使用方法。

**Topics**
+ [Slurm Workload Manager (`slurm`)](slurm-workload-manager-v3.md)
+ [将 AWS Batch (`awsbatch`) 调度器与 AWS ParallelCluster](awsbatchcli-v3.md)

# Slurm Workload Manager (`slurm`)
<a name="slurm-workload-manager-v3"></a>

## 集群容量大小和更新
<a name="cluster-capacity-size-and-update"></a>

集群的容量由集群可以扩展的计算节点数量来定义。计算节点由 AWS ParallelCluster 配置中的计算资源中定义的 Amazon EC2 实例提供支持`(Scheduling/SlurmQueues/`ComputeResources`)`，并按照 1:1 映射到Slurm分区的队列`(Scheduling/SlurmQueues)`进行组织。

在计算资源中，可以配置集群中必须始终保持运行的最小计算节点（实例）数（`MinCount`），以及计算资源可以扩展到的最大实例数（[`MaxCount`3](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MaxCount)）。

在创建集群时或更新集群时，为集群中定义的每个计算资源 (`Scheduling/SlurmQueues/ ComputeResources`) AWS ParallelCluster 启动中配置`MinCount`的任意数量的 Amazon EC2 实例。为覆盖集群中计算资源的最小节点数量而启动的实例称为***静态节点***。静态节点一旦启动，就会在集群中持续存在，除非发生特定事件或情况，否则系统不会终止它们。例如，此类事件包括 Slurm 或 Amazon EC2 运行状况检查失败，以及 Slurm 节点状态变为 DRAIN 或 DOWN。

为应对集群负载增加而按需启动的 Amazon EC2 实例（范围在 `1` 到 `‘MaxCount - MinCount’`（`MaxCount ` *减去*` MinCount)`）之间）称为“动态节点”******。这些节点的性质是短暂的，启动它们是为了处理待处理的作业，一旦它们闲置了一段时间（由集群配置中的 `Scheduling/SlurmSettings/ScaledownIdletime` 定义）（默认值：10 分钟），就会被终止。

静态节点和动态节点符合以下命名方案：
+ 静态节点 `<Queue/Name>-st-<ComputeResource/Name>-<num>`，其中 `<num> = 1..ComputeResource/MinCount`
+ 动态节点 `<Queue/Name>-dy-<ComputeResource/Name>-<num>`，其中 `<num> = 1..(ComputeResource/MaxCount - ComputeResource/MinCount)`

例如，给定以下 AWS ParallelCluster 配置：

```
Scheduling:  
    Scheduler: Slurm  
    SlurmQueues:    
        - Name: queue1      
            ComputeResources:        
                - Name: c5xlarge          
                    Instances:            
                        - InstanceType: c5.xlarge          
                        MinCount: 100          
                        MaxCount: 150
```

将在 Slurm 中定义以下节点

```
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
queue1*      up   infinite     50  idle~ queue1-dy-c5xlarge-[1-50]
queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
```

当计算资源拥有时`MinCount == MaxCount`，所有相应的计算节点都将是静态的，并且所有实例都将在集群 creation/update 时启动并保持正常运行。例如：

```
Scheduling:
  Scheduler: slurm
  SlurmQueues:
    - Name: queue1
      ComputeResources:
        - Name: c5xlarge
          Instances:
            - InstanceType: c5.xlarge
          MinCount: 100
          MaxCount: 100
```

```
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
```

## 集群容量更新
<a name="cluster-capacity-update"></a>

集群容量的更新包括添加或删除队列、计算资源或更改计算资源的 `MinCount/MaxCount`。从 AWS ParallelCluster 版本 3.9.0 开始，缩小队列大小需要在集群更新之前停止计算队列或将其[QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)设置为 TERMINATION for。在以下情况下，无需停止计算队列或将其设置[QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)为 “终止”：
+ 将新队列添加到 Scheduling/[`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)

   
+ 向队列中添加新的计算资源 `Scheduling/SlurmQueues/ComputeResources`
+ 增加计算资源的 `MaxCount`
+ 计算资源的增加 MaxCount 和相同计算资源的增加量至少相等 MinCount 

## 注意事项和限制
<a name="considerations-limitations"></a>

本节旨在概述在调整集群容量大小时应考虑的任何重要因素、约束或限制。
+ 从 `Scheduling/SlurmQueues` 中删除队列时，所有名称为 `<Queue/Name>-*` 的计算节点（包括静态和动态节点）都将从 Slurm 配置中删除，相应的 Amazon EC2 实例也将终止。
+ 从队列中删除计算资源 `Scheduling/SlurmQueues/ComputeResources` 时，所有名称为 `<Queue/Name>-*-<ComputeResource/Name>-*` 的计算节点（包括静态和动态节点）都将从 Slurm 配置中删除，相应的 Amazon EC2 实例也将终止。

在更改计算资源的 `MinCount` 参数时，我们可以区分两种不同的情况，一种是 `MaxCount` 与 `MinCount` 相等（仅静态容量），另一种是 `MaxCount` 大于 `MinCount`（静态和动态混合容量）。

### 只有静态节点的容量变化
<a name="capacity-changes-static-only"></a>
+ 如果 `MinCount == MaxCount`，当增加 `MinCount`（和 `MaxCount`）时，通过将静态节点数扩展到 `MinCount` `<Queue/Name>-st-<ComputeResource/Name>-<new_MinCount>` 的新值来配置集群，并且系统将不断尝试启动 Amazon EC2 实例来满足新的静态容量需求。
+ 如果 `MinCount == MaxCount`，当 `MinCount`（和 `MaxCount`）的数量减少 N 时，通过移除最后 N 个静态节点 `<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount - N>...<old_MinCount>]` 来配置集群，系统将终止相应的 Amazon EC2 实例。
  + 初始状态 `MinCount = MaxCount = 100`
  + 

    ```
    $ sinfo
    PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
    queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
    ```
  + 更新 `MinCount` 和 `MaxCount: MinCount = MaxCount = 70` 上的 `-30`
  + 

    ```
    $ sinfo
    PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
    queue1*      up   infinite     70   idle queue1-st-c5xlarge-[1-70]
    ```

### 混合节点的容量变化
<a name="capacity-changes-mixed-nodes"></a>

如果 `MinCount < MaxCount`，当 `MinCount` 的数量增加 N 时（假设 `MaxCount` 保持不变），通过将静态节点数扩展到 `MinCount` 的新值（`old_MinCount + N`）来配置集群（`<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount + N>`），并且系统将不断尝试启动 Amazon EC2 实例来满足新的静态容量需求。此外，为了满足计算资源的 `MaxCount` 容量，通过*删除最后 N 个动态节点*来更新集群配置（`<Queue/Name>-dy-<ComputeResource/Name>-[<MaxCount - old_MinCount - N>...<MaxCount - old_MinCount>]`），系统将终止相应的 Amazon EC2 实例。
+ 初始状态：`MinCount = 100; MaxCount = 150`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     50  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
  ```
+ 将 \$130 更新为 `MinCount : MinCount = 130 (MaxCount = 150)`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     20  idle~ queue1-dy-c5xlarge-[1-20]
  queue1*      up   infinite    130   idle queue1-st-c5xlarge-[1-130]
  ```

如果 `MinCount < MaxCount`，当 `MinCount` 和 `MaxCount` 的数量都增加 N 时，通过将静态节点数扩展到 `MinCount` 的新值（`old_MinCount + N`）来配置集群（`<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount + N>`），并且系统将不断尝试启动 Amazon EC2 实例来满足新的静态容量需求。此外，动态节点的数量不会因新的

 `MaxCount` 值。
+ 初始状态：`MinCount = 100; MaxCount = 150`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     50  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
  ```
+ 将 \$130 更新为 `MinCount : MinCount = 130 (MaxCount = 180)`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     20  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite    130   idle queue1-st-c5xlarge-[1-130]
  ```

如果 `MinCount < MaxCount`，当 `MinCount` 的数量减少 N 时（假设 `MaxCount` 保持不变），通过移除最后 N 个静态节点 `<Queue/Name>-st-<ComputeResource/Name>-[<old_MinCount - N>...<old_MinCount>` 来配置集群，系统将终止相应的 Amazon EC2 实例。此外，为了满足计算资源的 `MaxCount` 容量，通过扩展动态节点数来更新集群配置（`MaxCount - new_MinCount: <Queue/Name>-dy-<ComputeResource/Name>-[1..<MazCount - new_MinCount>]`）。在这种情况下，由于这些是动态节点，因此除非调度器在新节点上有待处理的作业，否则不会启动新的 Amazon EC2 实例。
+ 初始状态：`MinCount = 100; MaxCount = 150`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     50  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
  ```
+ 更新 `MinCount : MinCount = 70 (MaxCount = 120)` 上的 -30
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     80  idle~ queue1-dy-c5xlarge-[1-80]
  queue1*      up   infinite     70   idle queue1-st-c5xlarge-[1-70]
  ```

如果 `MinCount < MaxCount`，当 `MinCount` 和 `MaxCount` 的数量都减少 N 时，通过移除最后 N 个静态节点来配置集群（`<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount - N>...<oldMinCount>]`），系统将终止相应的 Amazon EC2 实例。

 此外，动态节点的数量不会因新的 `MaxCount` 值而发生变化。
+ 初始状态：`MinCount = 100; MaxCount = 150`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     50  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
  ```
+ 更新 `MinCount : MinCount = 70 (MaxCount = 120)` 上的 -30
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     80  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite     70   idle queue1-st-c5xlarge-[1-70]
  ```

如果 `MinCount < MaxCount`，当 `MaxCount` 的数量减少 N 时（假设 `MinCount` 保持不变），通过移除最后 N 个动态节点来配置集群（`<Queue/Name>-dy-<ComputeResource/Name>-<old_MaxCount - N...<oldMaxCount>]`），系统将终止正在运行的相应 Amazon EC2 实例。预计不会对静态节点产生影响。
+ 初始状态：`MinCount = 100; MaxCount = 150`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     50  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
  ```
+ 更新 `MaxCount : MinCount = 100 (MaxCount = 120)` 上的 -30
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     20  idle~ queue1-dy-c5xlarge-[1-20]
  queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
  ```

## 对作业的影响
<a name="impacts-on-jobs"></a>

在移除节点和终止 Amazon EC2 实例的所有情况下，在已移除节点上运行的批处理作业将重新排队，除非没有其它节点满足作业要求。在最后一种情况下，任务失败，状态为 NODE\$1FAIL，并从队列中消失，必须手动重新提交。

如果您计划执行集群大小调整更新，可以防止作业在计划更新期间将被移除的节点上运行。这可以通过将要移除的节点设置为维护状态来实现。请注意，将节点设置为维护状态不会影响最终已在该节点上运行的作业。

假设在计划的集群大小调整更新中，您将移除节点 `qeueu-st-computeresource-[9-10`]。您可以使用以下命令创建 Slurm 预留

```
sudo -i scontrol create reservation ReservationName=maint_for_update user=root starttime=now duration=infinite flags=maint,ignore_jobs nodes=qeueu-st-computeresource-[9-10]
```

这将在节点 `qeueu-st-computeresource-[9-10]` 上创建一个名为 `maint_for_update` 的 Slurm 预留。从创建预留开始，`qeueu-st-computeresource-[9-10]` 节点上就不能再运行任何作业。请注意，预留不会阻止作业最终在 `qeueu-st-computeresource-[9-10]` 节点上分配。

集群大小调整更新后，如果 Slurm 预留只设置在调整大小更新期间被移除的节点上，维护预留将自动删除。如果您在集群大小调整更新后仍然存在的节点上创建了 Slurm 预留，我们可能希望在执行大小调整更新后删除节点上的维护预留，方法是使用以下命令 

```
sudo -i scontrol delete ReservationName=maint_for_update
```

有关 Slurm 预留的更多详情，请在[此处](https://slurm.schedmd.com/reservations.html)查看 SchedMD 官方文档。

## 容量变更时的集群更新过程
<a name="cluster-update-process"></a>

调度器配置更改后，将在集群更新过程中执行以下步骤：
+ 停下来 AWS ParallelCluster `clustermgtd (supervisorctl stop clustermgtd)`
+ 根据 AWS ParallelCluster 配置生成更新的 Slurm 分区配置
+ 重启 `slurmctld`（通过 Chef 服务配方完成）
+ 检查 `slurmctld` 状态 `(systemctl is-active --quiet slurmctld.service)`
+ 重新加载 Slurm 配置 `(scontrol reconfigure)`
+ 启动 `clustermgtd (supervisorctl start clustermgtd)`

有关 Slurm 的信息，请参阅 [https://slurm.schedmd.com](https://slurm.schedmd.com)。有关下载，请参阅 [https://github.com/SchedMD/slur](https://github.com/SchedMD/slurm/tags) m/tags。有关源代码，请参阅 [https://github.com/SchedMD/slurm](https://github.com/SchedMD/slurm)。

## 支持的集群版本和 SLURM 版本
<a name="cluster-slurm-version-table"></a>

下表列出了 AWS 支持的 AWS ParallelCluster 和Slurm版本。


| AWS ParallelCluster 版本 | 支持的 Slurm 版本 | 
| --- | --- | 
|  3.13.0  |  24.05.07  | 
|  3.12.0  |  23.11.10  | 
|  3.11.0  |  23.11.10  | 
|  3.9.2、3.9.3、3.10.0  |  23.11.7  | 
|  3.9.0、3.9.1  |  23.11.4  | 
|  3.8.0  |  23.02.7  | 
|  3.7.2  |  23.02.6  | 
|  3.7.1  |  23.02.5  | 
|  3.7.0  |  23.02.4  | 
|  3.6.0、3.6.1  |  23.02.2  | 
|  3.5.0、3.5.1  |  22.05.8  | 
|  3.4.0、3.4.1  |  22.05.7  | 
|  3.3.0、3.3.1  |  22.05.5  | 
|  3.1.4、3.1.5、3.2.0、3.2.1  |  21.08.8-2  | 
|  3.1.2、3.1.3  |  21.08.6  | 
|  3.1.1  |  21.08.5  | 
|  3.0.0  |  20.11.8  | 

**Topics**
+ [集群容量大小和更新](#cluster-capacity-size-and-update)
+ [集群容量更新](#cluster-capacity-update)
+ [注意事项和限制](#considerations-limitations)
+ [对作业的影响](#impacts-on-jobs)
+ [容量变更时的集群更新过程](#cluster-update-process)
+ [支持的集群版本和 SLURM 版本](#cluster-slurm-version-table)
+ [多个队列的配置](configuration-of-multiple-queues-v3.md)
+ [Slurm 多队列模式指南](multiple-queue-mode-slurm-user-guide-v3.md)
+ [Slurm 集群保护模式](slurm-protected-mode-v3.md)
+ [Slurm 集群快速容量不足故障转移](slurm-short-capacity-fail-mode-v3.md)
+ [Slurm 基于内存的调度](slurm-mem-based-scheduling-v3.md)
+ [Slurm 的多实例类型分配](slurm-multiple-instance-allocation-v3.md)
+ [动态节点的集群扩展](scheduler-node-allocation-v3.md)
+ [Slurm会计 AWS ParallelCluster](slurm-accounting-v3.md)
+ [Slurm 配置自定义](slurm-configuration-settings-v3.md)
+ [Slurm 和 `prolog``epilog`](slurm-prolog-epilog-v3.md)
+ [集群容量大小和更新](slurm-cluster-capacity-size-and-update.md)

# 多个队列的配置
<a name="configuration-of-multiple-queues-v3"></a>

在 AWS ParallelCluster 版本 3 中，您可以通过将设置为`slurm`并在配置文件[`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)中为指定多个队列来配置多个队列。[`Scheduler`](Scheduling-v3.md#yaml-Scheduling-Scheduler)在此模式下，不同的实例类型共存于配置文件的 [`ComputeResources`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources) 部分中指定的计算节点中。具有不同实例类型的 [`ComputeResources`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources) 会根据 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues) 的需要纵向扩展或缩减。

当工作负载共享相同的底层基础架构和资源（例如共享存储、网络或登录节点）时，单个集群中的多个*队列*通常优先于多个集群。如果工作负载具有相似的计算、存储和网络需求，则在单个集群中使用多个队列会更高效，因为它允许资源共享并避免不必要的重复。这种方法简化了管理，减少了开销，同时还能实现高效的作业调度和资源分配。另一方面，当工作负载之间存在很强的安全、数据或操作隔离要求时，应使用多个*集群*。例如，如果您需要使用不同的计划、更新周期或访问策略独立管理和操作工作负载，则多个集群更合适。


**集群队列和计算资源配额**  

| 资源 | 限额 | 
| --- | --- | 
|  [`Slurm queues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)  |  每个集群 50 个队列  | 
|  [`Compute resources`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources)  |  每个队列 50 个计算资源 每个集群 50 个计算资源  | 

**节点数**

队列的 [`ComputeResources`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources) 中的每个计算资源都必须具有唯一的 [`Name`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Name)、[`InstanceType`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-InstanceType)、[`MinCount`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MinCount) 和 [`MaxCount`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MaxCount)。[`MinCount`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MinCount) 和 [`MaxCount`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MaxCount) 具有默认值，用于定义队列的 [`ComputeResources`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources) 中的计算资源的实例范围。您也可以为 [`MinCount`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MinCount) 和 [`MaxCount`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MaxCount) 指定自己的值。[`ComputeResources`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources) 中的每个计算资源均由编号为 1 到 [`MinCount`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MinCount) 值的静态节点和编号为 [`MinCount`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MinCount) 值到 [`MaxCount`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MaxCount) 值的动态节点组成。

**示例配置**

下面是集群配置文件的 [Scheduling](Scheduling-v3.md) 部分的示例。在此配置中，有两个名为 `queue1` 和 `queue2` 的队列，每个队列的 [`ComputeResources`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources) 都指定了 [`MaxCount`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MaxCount)。

```
Scheduling:
  Scheduler: slurm
  SlurmQueues:
  - Name: queue1
    ComputeResources:
    - InstanceType: c5.xlarge
      MaxCount: 5
      Name: c5xlarge
    - InstanceType: c4.xlarge
      MaxCount: 5
      Name: c4xlarge
  - Name: queue2
    ComputeResources:
    - InstanceType: c5.xlarge
      MaxCount: 5
      Name: c5xlarge
```

**主机名**

启动到计算实例集中的实例是动态分配的。将为每个节点生成主机名。默认情况下， AWS ParallelCluster 将使用以下格式的主机名：

 `$HOSTNAME=$QUEUE-$STATDYN-$COMPUTE_RESOURCE-$NODENUM` 
+ `$QUEUE` 是队列的名称。例如，如果 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues) 部分中的条目将 [`Name`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Name) 设置为“`queue-name`”，则“`$QUEUE`”为“`queue-name`”。
+  对于静态节点，`$STATDYN` 为 `st`，对于动态节点则为 `dy`。
+  `$COMPUTE_RESOURCE` 是与此节点对应的 [`ComputeResources`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources) 计算资源的 [`Name`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Name)。
+  `$NODENUM` 是节点的编号。对于静态节点，`$NODENUM` 介于一 (1) 和 [`MinCount`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MinCount) 的值之间，对于动态节点，则介于一 (1) 和 [`MaxCount`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MaxCount)-[`MinCount`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MinCount) 之间。

根据上面的示例配置文件，`queue1` 和计算资源 `c5xlarge` 的给定节点的主机名为：`queue1-dy-c5xlarge-1`。

主机名和完全限定域名 (FQDN) 都是使用 Amazon Route 53 托管区创建的。FQDN 是 `$HOSTNAME.$CLUSTERNAME.pcluster`，其中 `$CLUSTERNAME` 是集群的名称。

请注意，Slurm 节点名称也将使用相同的格式。

 用户可以选择使用为计算节点提供支持的实例的默认 Amazon EC2 主机名，而不是使用的默认主机名格式 AWS ParallelCluster。这可通过将 [`UseEc2Hostnames`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-Dns-UseEc2Hostnames) 参数设置为 true 来完成。但是，Slurm节点名称将继续使用默认 AWS ParallelCluster 格式。

# Slurm 多队列模式指南
<a name="multiple-queue-mode-slurm-user-guide-v3"></a>

在这里，您可以了解如何 AWS ParallelCluster Slurm和管理队列（分区）节点，以及如何监控队列和节点状态。

## 概述
<a name="multiple-queue-mode-slurm-user-guide-v3-overview"></a>

扩展架构基于 Slurm 的[云调度指南](https://slurm.schedmd.com/elastic_computing.html)和节能插件。有关节能插件的更多信息，请参阅 [Slurm Power Saving Guide](https://slurm.schedmd.com/power_save.html)。在该架构中，可能可供集群使用的资源通常在 Slurm 配置中预定义为云节点。

## 云节点生命周期
<a name="multiple-queue-mode-slurm-user-guide-v3-cloud-node-lifecycle"></a>

在整个生命周期中，云节点会进入以下几种（如果不是全部）状态：`POWER_SAVING`、`POWER_UP` (`pow_up`)、`ALLOCATED` (`alloc`) 和 `POWER_DOWN` (`pow_dn`)。在某些情况下，云节点可能会进入 `OFFLINE` 状态。下面的列表详细介绍了云节点生命周期中这些状态的几个方面。
+ **处于 `POWER_SAVING` 状态的节点**在 `sinfo` 中显示 `~` 后缀（例如 `idle~`） 在这种状态下，没有支持该节点的 EC2 实例。但 Slurm 仍然可以向该节点分配作业。
+ **正在过渡到 `POWER_UP` 状态的节点**将在 `sinfo` 中显示 `#` 后缀（例如 `idle#`）。当 Slurm 向处于 `POWER_SAVING` 状态的节点分配作业时，该节点会自动转变为 `POWER_UP` 状态。

  或者，您可以以 `su` 根用户身份使用以下命令将节点手动转变为 `POWER_UP` 状态：

  ```
  $ scontrol update nodename=nodename state=power_up
  ```

  在此阶段，将调用 `ResumeProgram`，启动并配置 EC2 实例，并且节点会过渡到 `POWER_UP` 状态。
+ **当前可供使用的节点**在 `sinfo` 中不显示后缀（例如 `idle`）。节点设置完毕并加入集群后，即可用于运行作业。在此阶段，节点已正确配置并可供使用。

  一般而言，我们建议 Amazon EC2 实例的数量与可用节点的数量相同。在大多数情况下，在创建集群后，静态节点即可用。
+ **正在过渡到 `POWER_DOWN` 状态的节点**在 `sinfo` 中显示 `%` 后缀（例如 `idle%`）。经过 [`ScaledownIdletime`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-ScaledownIdletime) 之后，动态节点会自动进入 `POWER_DOWN` 状态。相比之下，静态节点在大多数情况下不会关闭。但您可以以 `su` 根用户身份使用以下命令将节点手动置于 `POWER_DOWN` 状态：

  ```
  $ scontrol update nodename=nodename state=down reason="manual draining"
  ```

  在此状态下，与节点关联的实例将会终止，节点将设置回 `POWER_SAVING` 状态并在经过 [`ScaledownIdletime`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-ScaledownIdletime) 之后可供使用。

  [`ScaledownIdletime`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-ScaledownIdletime) 设置保存到 Slurm 配置中的 `SuspendTimeout` 设置。
+ **离线的节点**将在 `sinfo` 中显示 `*` 后缀（例如 `down*`）。如果 Slurm 控制器无法联系某个节点，或者静态节点被禁用并且支持实例被终止，则该节点将会离线。

请考虑以下 `sinfo` 示例中所示的节点状态。

```
$ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  efa          up   infinite      4  idle~ efa-dy-efacompute1-[1-4]
  efa          up   infinite      1   idle efa-st-efacompute1-1
  gpu          up   infinite      1  idle% gpu-dy-gpucompute1-1
  gpu          up   infinite      9  idle~ gpu-dy-gpucompute1-[2-10]
  ondemand     up   infinite      2   mix# ondemand-dy-ondemandcompute1-[1-2]
  ondemand     up   infinite     18  idle~ ondemand-dy-ondemandcompute1-[3-10],ondemand-dy-ondemandcompute2-[1-10]
  spot*        up   infinite     13  idle~ spot-dy-spotcompute1-[1-10],spot-dy-spotcompute2-[1-3]
  spot*        up   infinite      2   idle spot-st-spotcompute2-[1-2]
```

`spot-st-spotcompute2-[1-2]` 和 `efa-st-efacompute1-1` 节点已经设置了支持实例，并且可供使用。`ondemand-dy-ondemandcompute1-[1-2]` 节点处于 `POWER_UP` 状态，应会在几分钟内可用。`gpu-dy-gpucompute1-1` 节点处于 `POWER_DOWN` 状态，它将在 [`ScaledownIdletime`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-ScaledownIdletime)（默认为 10 分钟）之后过渡到 `POWER_SAVING` 状态。

所有其他节点都处于 `POWER_SAVING` 状态，没有支持它们的 EC2 实例。

## 使用可用节点
<a name="multiple-queue-mode-slurm-user-guide-v3-working-with-available-nodes"></a>

可用节点由 Amazon EC2 实例提供支持。默认情况下，可以使用节点名称直接通过 SSH 加入到实例中（例如 `ssh efa-st-efacompute1-1`）。可以使用以下命令来检索实例的私有 IP 地址：

```
$ scontrol show nodes nodename
```

在返回的 `NodeAddr` 字段中检查 IP 地址。

对于不可用的节点，`NodeAddr` 字段不应指向正在运行的 Amazon EC2 实例，而是应与节点名称相同。

## 作业状态和提交
<a name="multiple-queue-mode-slurm-user-guide-v3-job-states"></a>

在大多数情况下，提交的作业会立即分配给系统中的节点，或者如果所有节点都已分配，则将其置于待处理状态。

如果为作业分配的节点包括任何处于 `POWER_SAVING` 状态的节点，则该作业将以 `CF` 或 `CONFIGURING` 状态开始。此时，该作业将会等待处于 `POWER_SAVING` 状态的节点过渡到 `POWER_UP` 状态并变为可用。

为作业分配的所有节点都可用后，该作业将进入 `RUNNING` (`R`) 状态。

默认情况下，所有作业都提交到默认队列（在 Slurm 中称为分区）。此队列由队列名称后面的后缀 `*` 表示。您可以使用 `-p` 作业提交选项选择队列。

所有节点都配置了以下特征，这些特征可以在作业提交命令中使用：
+ 实例类型（例如 `c5.xlarge`）。
+ 节点类型（`dynamic` 或 `static`。）

您可以使用以下命令查看特定节点的特征：

```
$ scontrol show nodes nodename
```

在返回的结果中，查看 `AvailableFeatures` 列表。

考虑集群的初始状态，可以通过运行 `sinfo` 命令来查看该状态。

```
$ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  efa          up   infinite      4  idle~ efa-dy-efacompute1-[1-4]
  efa          up   infinite      1   idle efa-st-efacompute1-1
  gpu          up   infinite     10  idle~ gpu-dy-gpucompute1-[1-10]
  ondemand     up   infinite     20  idle~ ondemand-dy-ondemandcompute1-[1-10],ondemand-dy-ondemandcompute2-[1-10]
  spot*        up   infinite     13  idle~ spot-dy-spotcompute1-[1-10],spot-dy-spotcompute2-[1-3]
  spot*        up   infinite      2   idle spot-st-spotcompute2-[1-2]
```

请注意，`spot` 是默认队列。它由 `*` 后缀表示。

向默认队列 (`spot`) 中的一个静态节点提交作业。

```
$ sbatch --wrap "sleep 300" -N 1 -C static
```

向 `EFA` 队列中的一个动态节点提交作业。

```
$ sbatch --wrap "sleep 300" -p efa -C dynamic
```

向 `ondemand` 队列中的八 (8) 个 `c5.2xlarge` 节点和两 (2) 个 `t2.xlarge` 节点提交作业。

```
$ sbatch --wrap "sleep 300" -p ondemand -N 10 -C "[c5.2xlarge*8&t2.xlarge*2]"
```

向 `gpu` 队列中的一个 GPU 节点提交作业。

```
$ sbatch --wrap "sleep 300" -p gpu -G 1
```

考虑使用 `squeue` 命令的作业状态。

```
$ squeue
 JOBID PARTITION    NAME   USER   ST       TIME  NODES NODELIST(REASON)
  12   ondemand     wrap   ubuntu CF       0:36     10 ondemand-dy-ondemandcompute1-[1-8],ondemand-dy-ondemandcompute2-[1-2]
  13        gpu     wrap   ubuntu CF       0:05      1 gpu-dy-gpucompute1-1
   7       spot     wrap   ubuntu  R       2:48      1 spot-st-spotcompute2-1
   8        efa     wrap   ubuntu  R       0:39      1 efa-dy-efacompute1-1
```

作业 7 和 8（在 `spot` 和 `efa` 队列中）已经在运行 (`R`)。作业 12 和 13 仍在配置 (`CF`)，可能正在等待实例变为可用。

```
# Nodes states corresponds to state of running jobs
$ sinfo
 PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
 efa          up   infinite      3  idle~ efa-dy-efacompute1-[2-4]
 efa          up   infinite      1    mix efa-dy-efacompute1-1
 efa          up   infinite      1   idle efa-st-efacompute1-1
 gpu          up   infinite      1   mix~ gpu-dy-gpucompute1-1
 gpu          up   infinite      9  idle~ gpu-dy-gpucompute1-[2-10]
 ondemand     up   infinite     10   mix# ondemand-dy-ondemandcompute1-[1-8],ondemand-dy-ondemandcompute2-[1-2]
 ondemand     up   infinite     10  idle~ ondemand-dy-ondemandcompute1-[9-10],ondemand-dy-ondemandcompute2-[3-10]
 spot*        up   infinite     13  idle~ spot-dy-spotcompute1-[1-10],spot-dy-spotcompute2-[1-3]
 spot*        up   infinite      1    mix spot-st-spotcompute2-1
 spot*        up   infinite      1   idle spot-st-spotcompute2-2
```

## 节点状态和特征
<a name="multiple-queue-mode-slurm-user-guide-v3-node-state-features"></a>

在大多数情况下，节点状态完全由 AWS ParallelCluster 根据本主题前面所述的云节点生命周期中的特定流程进行管理。

但是， AWS ParallelCluster 还会替换或终止处于不健康`DRAINED`状态的节点`DOWN`和具有不健康后备实例的节点。有关更多信息，请参阅 [`clustermgtd`](processes-v3.md#clustermgtd-v3)。

## 分区状态
<a name="multiple-queue-mode-slurm-user-guide-v3-partition-states"></a>

AWS ParallelCluster 支持以下分区状态。Slurm 分区就是 AWS ParallelCluster中的队列。
+ `UP`：表示该分区处于活动状态。这是分区的默认状态。在此状态下，该分区中的所有节点都处于活动状态并且可供使用。
+ `INACTIVE`：表示该分区处于非活动状态。在此状态下，将会终止支持非活动分区的节点的所有实例。不会为非活动分区中的节点启动新实例。

## 集群 update-compute-fleet
<a name="multiple-queue-mode-slurm-user-guide-v3-pcluster-update-compute-fleet"></a>
+ **停止计算队列**-执行以下命令时，所有分区都将`INACTIVE`转换为状态， AWS ParallelCluster 进程将分区保持`INACTIVE`状态。

  ```
  $ pcluster update-compute-fleet --cluster-name testSlurm \
     --region eu-west-1 --status STOP_REQUESTED
  ```
+ **启动计算实例集** - 执行以下命令时，所有分区最初都将转变为 `UP` 状态。但是， AWS ParallelCluster 进程不会使分区保持`UP`状态。您需要手动更改分区状态。所有静态节点将在几分钟后变为可用。请注意，将分区设置为 `UP` 不会增加任何动态容量。

  ```
  $ pcluster update-compute-fleet --cluster-name testSlurm \
     --region eu-west-1 --status START_REQUESTED
  ```

当运行 `update-compute-fleet` 时，您可以通过运行 `pcluster describe-compute-fleet` 命令并检查 `Status` 来查看集群的状态。下面列出了可能的状态：
+ `STOP_REQUESTED`：停止计算实例集请求已发送到集群。
+ `STOPPING`：`pcluster` 进程当前正在停止计算实例集。
+ `STOPPED`：`pcluster` 进程已完成停止进程，所有分区都处于 `INACTIVE` 状态，并且所有计算实例都已终止。
+ `START_REQUESTED`：启动计算实例集请求已发送到集群。
+ `STARTING`：`pcluster` 进程当前正在启动集群。
+ `RUNNING`：`pcluster` 进程已完成启动过程，所有分区都处于 `UP` 状态，静态节点将在几分钟后可用。
+  `PROTECTED`：此状态表示某些分区持续出现引导故障。受影响的分区处于非活动状态。请调查问题，然后运行 `update-compute-fleet` 以重新启用该实例集。

## 队列的手动控制
<a name="multiple-queue-mode-slurm-user-guide-v3-manual-control-queue"></a>

在某些情况下，您可能需要对集群中的节点或队列（在 Slurm 中称为分区）进行一些手动控制。您可以使用 `scontrol` 命令通过以下常用过程管理集群中的节点。
+ **启动处于 `POWER_SAVING` 状态的动态节点**

  `su`以根用户身份运行以下命令：

  ```
  $ scontrol update nodename=nodename state=power_up
  ```

  您也可以提交占位符 `sleep 1` 作业，请求一定数量的节点，然后依赖于 Slurm 来启动所需数量的节点。
+ **在 [`ScaledownIdletime`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-ScaledownIdletime) 之前关闭动态节点**

  我们建议您以 `su` 根用户身份使用以下命令将动态节点设置为 `DOWN`：

  ```
  $ scontrol update nodename=nodename state=down reason="manually draining"
  ```

  AWS ParallelCluster 自动终止并重置已关闭的动态节点。

  通常，我们不建议直接使用 `scontrol update nodename=nodename state=power_down` 命令将节点设置为 `POWER_DOWN`。这是因为 AWS ParallelCluster 会自动处理关闭过程，
+ **禁用队列（分区）或停止特定分区中的所有静态节点**

  以 `su` 根用户身份使用以下命令将特定队列设置为 `INACTIVE`：

  ```
  $ scontrol update partition=queuename state=inactive
  ```

  此操作会终止支持该分区中节点的所有实例。
+ **启用队列（分区）**

  以 `su` 根用户身份使用以下命令将特定队列设置为 `UP`：

  ```
  $ scontrol update partition=queuename state=up
  ```

## 扩展行为和调整
<a name="multiple-queue-mode-slurm-user-guide-v3-scaling-behavior"></a>

**下面是正常扩展工作流程的示例：**
+ 调度器收到需要两个节点的作业。
+ 调度器将两个节点转换为 `POWER_UP` 状态，并使用节点名称（例如 `queue1-dy-spotcompute1-[1-2]`）调用 `ResumeProgram`。
+ `ResumeProgram` 启动两个 Amazon EC2 实例并分配 `queue1-dy-spotcompute1-[1-2]` 的私有 IP 地址和主机名，等待 `ResumeTimeout`（默认时段为 30 分钟），然后重置节点。
+ 实例配置完成并加入集群。作业开始在实例上运行。
+ 作业完成并停止运行。
+ 经过配置的 `SuspendTime`（设置为 [`ScaledownIdletime`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-ScaledownIdletime)）后，调度器将实例设置为 `POWER_SAVING` 状态。然后，调度器将 `queue1-dy-spotcompute1-[1-2]` 设置为 `POWER_DOWN` 状态并使用节点名称调用 `SuspendProgram`。
+ 为两个节点调用 `SuspendProgram`。节点保持在 `POWER_DOWN` 状态，例如通过保持 `idle%` 状态持续 `SuspendTimeout`（默认时段为 120 秒（2 分钟））。在 `clustermgtd` 检测到节点正在关闭后，它会终止支持实例。然后，它将 `queue1-dy-spotcompute1-[1-2]` 转变到空闲状态并重置私有 IP 地址和主机名，使其能够启动以供将来的作业使用。

**如果出现问题，特定节点的某个实例由于某种原因无法启动，则会发生以下情况：**
+ 调度器收到需要两个节点的作业。
+ 调度器将两个云爆发节点转变为 `POWER_UP` 状态，并使用节点名称（例如 `queue1-dy-spotcompute1-[1-2]`）调用 `ResumeProgram`。
+ `ResumeProgram` 仅启动一（1）个 Amazon EC2 实例并配置 `queue1-dy-spotcompute1-1`，另一（1）个实例 `queue1-dy-spotcompute1-2` 未能启动。
+ `queue1-dy-spotcompute1-1` 未受影响，并在进入 `POWER_UP` 状态后上线。
+ `queue1-dy-spotcompute1-2` 转变为 `POWER_DOWN` 状态，并且由于 Slurm 检测到节点故障，自动将作业重新排队。
+ 经过 `SuspendTimeout`（默认为 120 秒（2 分钟））之后 `queue1-dy-spotcompute1-2` 变为可用。在此期间，作业将重新排队，并可以开始在另一个节点上运行。
+ 上述过程将会重复，直到作业可以在可用节点上运行而不发生故障。

**有两个定时参数可以根据需要进行调整：**
+ **`ResumeTimeout`（默认为 30 分钟）：**`ResumeTimeout` 控制 Slurm 将节点转变为关闭状态之前等待的时间。
  + `ResumeTimeout`如果您的 pre/post 安装过程花费了将近那么长的时间，那么扩展可能会很有用。
  + `ResumeTimeout` 也是在出现问题的情况下 AWS ParallelCluster 在替换或重置节点之前等待的最长时间。如果在启动或设置过程中发生任何错误，则计算节点会自行终止。 AWS ParallelCluster 检测到已终止的实例后，进程会替换节点。
+ **`SuspendTimeout`（默认为 120 秒（2 分钟））**：`SuspendTimeout` 控制将节点放回系统并准备好再次使用的速率。
  + `SuspendTimeout` 越短，节点重置就会越快，并且 Slurm 能够更频繁地尝试启动实例。
  + `SuspendTimeout` 越长，故障节点的重置就会越慢。在此期间，Slurm 会尝试使用其他节点。如果 `SuspendTimeout` 超过几分钟，则 Slurm 将会循环尝试系统中的所有节点。对于大型系统（超过 1000 个节点），较长的 `SuspendTimeout` 可能有利于减轻 Slurm 上因频繁尝试对失败作业重新排队而产生的压力。
  + 请注意，`SuspendTimeout`这并不是指 AWS ParallelCluster 等待终止节点的后备实例的时间。`POWER_DOWN` 节点的支持实例将会立即终止。终止过程通常在几分钟内完成。但在此期间，节点仍处于 `POWER_DOWN` 状态，无法供调度器使用。

## 架构的日志
<a name="multiple-queue-mode-slurm-user-guide-v3-logs"></a>

以下列表包含关键日志。与 Amazon Logs 一起使用的 CloudWatch 日志流名称的格式*logIdentifier*为`{hostname}.{instance_id}.{logIdentifier}`，后面是日志名称。
+ `ResumeProgram`: `/var/log/parallelcluster/slurm_resume.log` (`slurm_resume`)
+ `SuspendProgram`: `/var/log/parallelcluster/slurm_suspend.log` (`slurm_suspend`)
+ `clustermgtd`: `/var/log/parallelcluster/clustermgtd.log` (`clustermgtd`)
+ `computemgtd`: `/var/log/parallelcluster/computemgtd.log` (`computemgtd`)
+ `slurmctld`: `/var/log/slurmctld.log` (`slurmctld`)
+ `slurmd`: `/var/log/slurmd.log` (`slurmd`)

## 常见问题以及调试方法：
<a name="multiple-queue-mode-slurm-user-guide-v3-common-issues"></a>

**无法启动、加电或加入集群的节点**
+ 动态节点：
  + 检查 `ResumeProgram` 日志，查看是否对该节点调用过 `ResumeProgram`。如果没有，请检查 `slurmctld` 日志以确定 Slurm 是否尝试过对该节点调用 `ResumeProgram`。请注意，`ResumeProgram` 上不正确的权限可能会导致它静默失败。
  + 如果调用了 `ResumeProgram`，请查看是否为该节点启动了实例。如果未启动实例，则应有明确的错误消息，说明实例启动失败的原因。
  + 如果启动了实例，则可能在引导过程中出现了问题。从`ResumeProgram`日志中找到相应的私有 IP 地址和实例 ID，然后在 Logs 中查看特定实例的相应引导 CloudWatch 日志。
+ 静态节点：
  + 检查 `clustermgtd` 日志，查看是否为该节点启动了实例。如果实例未启动，则应有明确的错误说明实例启动失败的原因。
  + 如果启动了实例，则引导过程出现了问题。从`clustermgtd`日志中找到相应的私有 IP 和实例 ID，然后在 Logs 中查看特定实例的相应引导 CloudWatch 日志。

**节点意外替换或终止和节点故障**
+ 节点 replaced/terminated 出乎意料：
  + 在大多数情况下，`clustermgtd` 会处理所有节点维护操作。要检查 `clustermgtd` 是否替换或终止了节点，请查看 `clustermgtd` 日志。
  + 如果 `clustermgtd` 替换或终止了节点，则应显示一条消息，说明该操作的原因。如果原因与调度器有关（例如，节点处于 `DOWN` 状态），请查看 `slurmctld` 日志以获取更多详细信息。如果原因与亚马逊 EC2 有关，请使用诸如亚马逊 CloudWatch 或亚马逊 EC2 控制台、CLI 或软件开发工具包之类的工具来检查该实例的状态或日志。例如，您可以检查该实例是否有已安排的事件或失败的 Amazon EC2 运行状况检查。
  + 如果 `clustermgtd` 没有终止该节点，请检查 `computemgtd` 是否终止了该节点，或者 EC2 是否终止了该实例以回收竞价型实例。
+ 节点故障：
  + 在大多数情况下，如果节点出现故障，作业会自动重新排队。在 `slurmctld` 日志中查看作业或节点失败的原因，并在其中评测具体情况。

**替换或终止实例时出现故障、关闭节点时出现故障**
+ 通常，`clustermgtd` 会处理所有预期的实例终止操作。在 `clustermgtd` 日志中查看其无法替换或终止节点的原因。
+ 对于 [`ScaledownIdletime`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-ScaledownIdletime) 失败的动态节点，请在 `SuspendProgram` 日志中查看 `slurmctld` 进程是否以特定节点作为参数进行了调用。请注意，`SuspendProgram` 实际上并不执行任何特定的操作，它只是记录被调用时的时间。所有实例终止和 `NodeAddr` 重置均由 `clustermgtd` 完成。Slurm 会在 `SuspendTimeout` 后将节点转变为 `IDLE` 状态。

**其它问题：**
+ AWS ParallelCluster 不会做出工作分配或扩大规模的决策。它只是尝试按照 Slurm 的指示启动、终止和维护资源。

  对于与作业分配、节点分配和扩展决策有关的问题，请查看 `slurmctld` 日志中是否存在错误。

# Slurm 集群保护模式
<a name="slurm-protected-mode-v3"></a>

当集群在启用保护模式的情况下运行时，会在启动计算节点时 AWS ParallelCluster 监控和跟踪计算节点引导失败。这样做是为了检测这些失败是否持续发生。

如果在队列（分区）中检测到以下情况，集群将进入受保护状态：

1. 持续发生连续的计算节点引导失败，没有成功的计算节点启动。

1. 失败计数达到预定义的阈值。

集群进入保护状态后， AWS ParallelCluster 禁用故障等于或高于预定义阈值的队列。

Slurm 集群保护模式已在 3.0.0 AWS ParallelCluster 版中添加。

您可以使用受保护模式来减少在计算节点引导失败循环上花费的时间和资源。

## 受保护模式参数
<a name="slurm-protected-mode-parameter-v3"></a>

**`protected_failure_count`**

`protected_failure_count` 指定队列（分区）中激活集群受保护状态的连续失败次数。

默认的 `protected_failure_count` 为 10 并启用受保护模式。

如果 `protected_failure_count` 大于零，则启用受保护模式。

如果 `protected_failure_count` 小于或等于零，则禁用受保护模式。

通过在 `HeadNode` 中 `/etc/parallelcluster/slurm_plugin/parallelcluster_clustermgtd.conf` 处的 `clustermgtd` 配置文件中添加该参数，可以更改 `protected_failure_count` 值。

您可以随时更新此参数，并且无需停止计算实例集即可执行此操作。如果在失败计数达到 `protected_failure_count` 之前在队列中启动成功，则失败计数将重置为零。

## 在受保护状态下检查集群状态
<a name="slurm-protected-mode-status-v3"></a>

当集群处于受保护状态时，您可以检查计算实例集状态和节点状态。

### 计算实例集状态
<a name="slurm-protected-mode-compute-fleet-v3"></a>

在受保护状态下运行的集群的计算实例集状态为 `PROTECTED`。

```
$ pcluster describe-compute-fleet --cluster-name <cluster-name> --region <region-id>
{
   "status": "PROTECTED",
   "lastStatusUpdatedTime": "2022-04-22T00:31:24.000Z"
}
```

### 节点状态
<a name="slurm-protected-mode-nodes-v3"></a>

要了解哪些队列（分区）的引导失败已激活受保护状态，请登录集群并运行 `sinfo` 命令。引导失败次数达到或超过 `protected_failure_count` 的分区处于 `INACTIVE` 状态。引导失败次数未达到或超过 `protected_failure_count` 的分区处于 `UP` 状态并正常工作。

`PROTECTED` 状态不影响正在运行的作业。如果作业正在引导失败次数达到或超过 `protected_failure_count` 的分区上运行，则正在运行的作业完成后会将该分区设置为 `INACTIVE`。

请考虑以下示例中所示的节点状态。

```
$ sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
queue1* inact infinite 10 down% queue1-dy-c5xlarge-[1-10]
queue1* inact infinite 3490 idle~ queue1-dy-c5xlarge-[11-3500]
queue2 up infinite 10 idle~ queue2-dy-c5xlarge-[1-10]
```

分区 `queue1` 为 `INACTIVE`，因为检测到连续 10 次计算节点引导失败。

节点 `queue1-dy-c5xlarge-[1-10]` 后面的实例已启动，但由于运行状况不佳，未能加入集群。

集群处于受保护状态。

分区 `queue2` 不受 `queue1` 中的引导失败的影响。它处于 `UP` 状态并且仍然可以运行作业。

## 如何停用受保护状态
<a name="slurm-protected-mode-exit-v3"></a>

解决引导错误后，您可以运行以下命令使集群退出受保护状态。

```
$ pcluster update-compute-fleet --cluster-name <cluster-name> \
  --region <region-id> \
  --status START_REQUESTED
```

## 激活受保护状态的引导失败
<a name="slurm-protected-mode-failures-v3"></a>

激活受保护状态的引导错误细分为以下三种类型。要确定类型和问题，您可以检查是否 AWS ParallelCluster 生成的日志。如果生成了日志，则可以检查这些日志以查看错误详细信息。有关更多信息，请参阅 [检索和保留日志](troubleshooting-v3-get-logs.md)。

1. **导致实例自行终止的引导错误。**

   实例在引导过程的早期失败，例如由于 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)\$1[`CustomActions`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-CustomActions)\$1[`OnNodeStart`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-CustomActions-OnNodeStart)\$1[`OnNodeConfigured`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-CustomActions-OnNodeConfigured) 脚本中的错误而自行终止的实例。

   对于动态节点，请查找类似于下面的错误：

   ```
   Node bootstrap error: Node ... is in power up state without valid backing instance
   ```

   对于静态节点，请在 `clustermgtd` 日志 (`/var/log/parallelcluster/clustermgtd`) 中查找类似于下面的错误：

   ```
   Node bootstrap error: Node ... is in power up state without valid backing instance
   ```

1. **节点 `resume_timeout` 或 `node_replacement_timeout` 过期**。

   实例无法在 `resume_timeout` 内（对于动态节点）或 `node_replacement_timeout` 内（对于静态节点）加入集群。它不会在超时之前自行终止。例如，群集的网络设置不正确，节点的`DOWN`状态设置为 Slurm 超时到期后。

   对于动态节点，请查找类似于下面的错误：

   ```
   Node bootstrap error: Resume timeout expires for node
   ```

   对于静态节点，请在 `clustermgtd` 日志 (`/var/log/parallelcluster/clustermgtd`) 中查找类似于下面的错误：

   ```
   Node bootstrap error: Replacement timeout expires for node ... in replacement.
   ```

1. **节点未通过运行状况检查**。

   节点后面的实例未通过 Amazon EC2 运行状况检查或计划的事件运行状况检查，并且这些节点被视为引导失败节点。在这种情况下，实例因超出控制范围的原因而终止。 AWS ParallelCluster

   请在 `clustermgtd` 日志 (`/var/log/parallelcluster/clustermgtd`) 中查找类似于下面的错误：

   ```
   Node bootstrap error: Node %s failed during bootstrap when performing health check.
   ```

1. **计算节点出现故障 Slurm 注册**。

   将`slurmd`守护程序注册到 Slurm control daemon (`slurmctld`) 失败并导致计算节点状态更改为`INVALID_REG`状态。配置不正确 Slurm 计算节点可能导致此错误，例如配置了计算节点规格错误的[`CustomSlurmSettings`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-CustomSlurmSettings)计算节点。

   在头节点上的 `slurmctld` 日志文件 (`/var/log/slurmctld.log`) 或失败的计算节点上的 `slurmd` 日志文件 (`/var/log/slurmd.log`) 中查找类似于下面的错误：

   ```
   Setting node %s to INVAL with reason: ...
   ```

## 如何调试受保护模式
<a name="slurm-protected-mode-debug-v3"></a>

如果您的集群处于受保护状态，并且 AWS ParallelCluster 生成了来自的`clustermgtd`日志`HeadNode`以及来自有问题的计算节点的`cloud-init-output`日志，则可以查看日志以了解错误详情。有关如何检索日志的更多信息，请参阅[检索和保留日志](troubleshooting-v3-get-logs.md)。

**头节点上的 `clustermgtd` 日志 (`/var/log/parallelcluster/clustermgtd`)**

日志消息会显示哪些分区发生了引导失败以及相应的引导失败计数。

```
[slurm_plugin.clustermgtd:_handle_protected_mode_process] - INFO - Partitions  
bootstrap failure count: {'queue1': 2}, cluster will be set into protected mode if protected failure count reach threshold.
```

在 `clustermgtd` 日志中，搜索 `Found the following bootstrap failure nodes` 以查找哪个节点引导失败。

```
[slurm_plugin.clustermgtd:_handle_protected_mode_process] - WARNING - 
Found the following bootstrap failure nodes: (x2)  ['queue1-st-c5large-1(192.168.110.155)',  'broken-st-c5large-2(192.168.65.215)']
```

在 `clustermgtd` 日志中，搜索 `Node bootstrap error` 以查找失败的原因。

```
[slurm_plugin.clustermgtd:_is_node_bootstrap_failure] - WARNING - Node bootstrap error: 
Node broken-st-c5large-2(192.168.65.215) is currently in  replacement and no backing instance
```

**计算节点上的 `cloud-init-output` 日志 (`/var/log/cloud-init-output.log`)**

在 `clustermgtd` 日志中获取引导失败节点的私有 IP 地址后，您可以登录计算节点或按照[检索和保留日志](troubleshooting-v3-get-logs.md)中的指导检索日志，找到相应的计算节点日志。在大多数情况下，有问题的节点的 `/var/log/cloud-init-output` 日志会显示导致计算节点引导失败的步骤。

# Slurm 集群快速容量不足故障转移
<a name="slurm-short-capacity-fail-mode-v3"></a>

从 AWS ParallelCluster 版本 3.2.0 开始，集群在默认情况下会启用快速容量不足故障转移模式。这会最大限度地减少检测到 Amazon EC2 容量不足错误时对作业重试排队所花费的时间。当您将队列配置为使用不同实例类型的多个计算资源时，这尤其有效。

**Amazon EC2 检测到容量不足故障：**
+ `InsufficientInstanceCapacity`
+ `InsufficientHostCapacity`
+ `InsufficientReservedInstanceCapacity`
+ `MaxSpotInstanceCountExceeded`
+ `SpotMaxPriceTooLow`：竞价型请求价格低于要求的最低竞价型请求履行价格时激活。
+ `Unsupported`：使用特定实例类型不支持的实例类型激活 AWS 区域。

在快速容量不足故障切换模式下，如果在将任务分配给 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/时检测到容量不足错误 [`compute resource`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources)，则 AWS ParallelCluster 执行以下操作：

1. 将计算资源设置为禁用 (`DOWN`) 状态，持续预定义的时间段。

1. 使用 `POWER_DOWN_FORCE` 取消计算资源失败的节点作业并暂停失败的节点。将失败的节点设置为 `IDLE` 和 `POWER_DOWN (!)` 状态，然后设置为 `POWERING_DOWN (%)`。

1. 将作业重新排队到另一个计算资源。

已禁用计算资源的静态和已启动的节点不受影响。作业可以在这些节点上完成。

此循环将会重复，直到将作业成功分配给一个或多个计算资源节点。有关节点状态的信息，请参阅 [Slurm 多队列模式指南](multiple-queue-mode-slurm-user-guide-v3.md)。

如果找不到运行该作业的计算资源，则将作业设置为 `PENDING` 状态，直到经过预定义的时间段。在这种情况下，您可以按照下一节所述修改预定义时间段。

## 容量不足超时参数
<a name="slurm-short-capacity-fail-mode-parameter-v3"></a>

**`insufficient_capacity_timeout`**

`insufficient_capacity_timeout` 指定检测到容量不足错误时，计算资源保持在禁用 (`down`) 状态的时间段（以秒为单位）。

默认情况下，`insufficient_capacity_timeout` 处于启用状态。

默认的 `insufficient_capacity_timeout` 为 600 秒（10 分钟）。

如果 `insufficient_capacity_timeout` 值小于或等于零，则表示已禁用快速容量不足故障转移模式。

通过在 `HeadNode` 中 `/etc/parallelcluster/slurm_plugin/parallelcluster_clustermgtd.conf` 处的 `clustermgtd` 配置文件中添加该参数，可以更改 `insufficient_capacity_timeout` 值。

可以在不停止计算实例集的情况下随时更新该参数。

例如：
+ `insufficient_capacity_timeout=600`:

  如果检测到容量不足错误，则会将计算资源设置为禁用 (`DOWN`)。10 分钟后，其失败节点将设置为 `idle~` (`POWER_SAVING`) 状态。
+ `insufficient_capacity_timeout=60`:

  如果检测到容量不足错误，则计算资源将处于禁用状态 (`DOWN`)。1 分钟后，其失败节点将设置为 `idle~` 状态。
+ `insufficient_capacity_timeout=0`:

  禁用了快速容量不足故障转移模式。未禁用计算资源。

**注意**  
从节点因容量不足错误而失败到集群管理进程守护程序检测到节点失败之间可能有长达一分钟的延迟。这是因为集群管理守护程序会检查节点容量不足故障，并每隔一分钟将计算资源设置为`down`状态。

## 快速容量不足故障转移模式状态
<a name="slurm-short-capacity-fail-mode-status-v3"></a>

当集群处于快速容量不足故障转移模式时，您可以检查其状态和节点状态。

### 节点状态
<a name="slurm-short-capacity-fail-mode-nodes-v3"></a>

当作业提交到计算资源动态节点并检测到容量不足错误时，该节点将被置于 `down#` 状态并显示原因：

```
(Code:InsufficientInstanceCapacity)Failure when resuming nodes.
```

然后，关闭的节点（处于 `idle~` 状态的节点）将被设置为 `down~` 并显示原因：

```
(Code:InsufficientInstanceCapacity)Temporarily disabling node due to insufficient capacity.
```

作业重新排队到队列中的其他计算资源。

计算资源静态节点和处于 `UP` 状态的节点不受快速容量不足故障转移模式影响。

请考虑以下示例中所示的节点状态。

```
$ sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
queue1*   up    infinite    30  idle~ queue1-dy-c-1-[1-15],queue1-dy-c-2-[1-15]
queue2    up    infinite    30  idle~ queue2-dy-c-1-[1-15],queue2-dy-c-2-[1-15]
```

我们向 queue1 提交了需要一个节点的作业。

```
$ sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
queue1*   up   infinite  1   down# queue1-dy-c-1-1
queue1*   up   infinite  15  idle~ queue1-dy-c-2-[1-15]
queue1*   up   infinite  14  down~ queue1-dy-c-1-[2-15]
queue2    up   infinite  30  idle~ queue2-dy-c-1-[1-15],queue2-dy-c-2-[1-15]
```

节点 `queue1-dy-c-1-1` 将会启动以运行该作业。但由于容量不足错误，该实例启动失败。节点 `queue1-dy-c-1-1` 被设置为 `down`。该计算资源中已关闭的动态节点 (`queue2-dy-c-1`) 将被设置为 `down`。

您可以使用 `scontrol show nodes` 检查节点原因。

```
$ scontrol show nodes queue1-dy-c-1-1
NodeName=broken-dy-c-2-1 Arch=x86_64 CoresPerSocket=1 
CPUAlloc=0 CPUTot=96 CPULoad=0.00
...
ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s
Reason=(Code:InsufficientInstanceCapacity)Failure when resuming nodes [root@2022-03-10T22:17:50]
   
$ scontrol show nodes queue1-dy-c-1-2
NodeName=broken-dy-c-2-1 Arch=x86_64 CoresPerSocket=1 
CPUAlloc=0 CPUTot=96 CPULoad=0.00
...
ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s
Reason=(Code:InsufficientInstanceCapacity)Temporarily disabling node due to insufficient capacity [root@2022-03-10T22:17:50]
```

作业排队到队列计算资源中的另一种实例类型。

经过 `insufficient_capacity_timeout` 之后，计算资源中的节点将重置为 `idle~` 状态。

```
$ sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
queue1*   up    infinite    30  idle~ queue1-dy-c-1-[1-15],queue1-dy-c-2-[1-15]
queue2    up    infinite    30  idle~ queue2-dy-c-1-[1-15],queue2-dy-c-2-[1-15]
```

经过 `insufficient_capacity_timeout` 并且计算资源中的节点重置为 `idle~` 状态后，Slurm 调度器会为这些节点分配较低的优先级。除非发生以下情况之一，否则调度器会继续从其他队列计算资源中选择权重较高的节点：
+ 作业的提交要求与已恢复的计算资源相匹配。
+ 没有其他计算资源可用，因为它们的容量已满。
+ `slurmctld` 已重新启动。
+  AWS ParallelCluster 计算队列已停止并开始关闭所有节点的电源并开启电源。

### 相关日志
<a name="slurm-protected-mode-logs-v3"></a>

可以在头节点的 Slurm `resume` 日志和 `clustermgtd` 日志中找到与容量不足错误和快速容量不足故障转移模式相关的日志。

**Slurm `resume` (`/var/log/parallelcluster/slurm_resume.log`)**  
节点由于容量不足而无法启动时的错误消息。  

```
[slurm_plugin.instance_manager:_launch_ec2_instances] - ERROR - Failed RunInstances request: dcd0c252-90d4-44a7-9c79-ef740f7ecd87
[slurm_plugin.instance_manager:add_instances_for_nodes] - ERROR - Encountered exception when launching instances for nodes (x1) ['queue1-dy-c-1-1']: An error occurred 
(InsufficientInstanceCapacity) when calling the RunInstances operation (reached max retries: 1): We currently do not have sufficient p4d.24xlarge capacity in the 
Availability Zone you requested (us-west-2b). Our system will be working on provisioning additional capacity. You can currently get p4d.24xlarge capacity by not 
specifying an Availability Zone in your request or choosing us-west-2a, us-west-2c.
```

**Slurm `clustermgtd` (`/var/log/parallelcluster/clustermgtd`)**  
queue1 中的计算资源 c-1 因容量不足而被禁用。  

```
[slurm_plugin.clustermgtd:_reset_timeout_expired_compute_resources] - INFO - The following compute resources are in down state 
due to insufficient capacity: {'queue1': {'c-1': ComputeResourceFailureEvent(timestamp=datetime.datetime(2022, 4, 14, 23, 0, 4, 769380, tzinfo=datetime.timezone.utc), 
error_code='InsufficientInstanceCapacity')}}, compute resources are reset after insufficient capacity timeout (600 seconds) expired
```
容量不足超时到期后，将会重置该计算资源，并将计算资源中的节点设置为 `idle~`。  

```
[root:_reset_insufficient_capacity_timeout_expired_nodes] - INFO - Reset the following compute resources because insufficient capacity 
timeout expired: {'queue1': ['c-1']}
```

# Slurm 基于内存的调度
<a name="slurm-mem-based-scheduling-v3"></a>

从 3.2.0 版开始，支持 AWS ParallelCluster Slurm 使用 [`SlurmSettings`](Scheduling-v3.md#Scheduling-v3-SlurmSettings)/[`EnableMemoryBasedScheduling`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-EnableMemoryBasedScheduling)集群配置参数进行基于内存的调度。

**注意**  
[从 3.7.0 AWS ParallelCluster 版开始，如果您在实例中配置了多个实例类型，则`EnableMemoryBasedScheduling`可以启用。](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Instances)  
适用于 3.2.0 到 3.6 AWS ParallelCluster 版本。 *x*[，如果您在实例中配置了多个实例类型，则`EnableMemoryBasedScheduling`无法启用。](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Instances)

**警告**  
当您在中指定多个实例类型时 Slurm 队列计算资源`EnableMemoryBasedScheduling`启用后，该`RealMemory`值为所有实例类型可用的最小内存量。如果您指定的实例类型具有截然不同的内存容量，则可能会导致大量未使用的内存。

随`EnableMemoryBasedScheduling: true`着，Slurm 调度器跟踪每个任务在每个节点上所需的内存量。然后，Slurm 调度器使用此信息在同一个计算节点上调度多个作业。作业在节点上所需的内存总量不能大于可用的节点内存。调度器可防止作业使用的内存超过提交作业时请求的内存。

使用 `EnableMemoryBasedScheduling: false`，作业可能会争夺共享节点上的内存并导致作业失败和 `out-of-memory` 事件。

**警告**  
Slurm 对其标签使用 2 的乘方表示法，例如 MB 或 GB。将这些标签分别读作 MiB 和 GiB。

## Slurm 基于配置和内存的调度
<a name="slurm-mem-based-scheduling-config-v3"></a>

随着`EnableMemoryBasedScheduling: true`，Slurm 设置以下内容 Slurm 配置参数：
+ `slurm.conf` 中的 [https://slurm.schedmd.com/slurm.conf.html#OPT_CR_CPU_Memory](https://slurm.schedmd.com/slurm.conf.html#OPT_CR_CPU_Memory)。此选项将节点内存配置为中的可消耗资源 Slurm.
+ [https://slurm.schedmd.com/cgroup.conf.html#OPT_ConstrainRAMSpace](https://slurm.schedmd.com/cgroup.conf.html#OPT_ConstrainRAMSpace)在 Slurm `cgroup.conf`。 使用此选项，作业对内存的访问权限仅限于提交作业时请求的内存量。

**注意**  
其他几个 Slurm 配置参数可能会影响的行为 Slurm 调度程序和资源管理器（如果设置了这两个选项）。有关更多信息，请参阅 [。Slurm 文档](https://slurm.schedmd.com/documentation.html)。

## Slurm 调度程序和基于内存的调度
<a name="slurm-mem-based-scheduling-scheduler-v3"></a>

**`EnableMemoryBasedScheduling: false`（默认值）**

默认情况下，`EnableMemoryBasedScheduling` 设置为 false。如果为假，Slurm 在其调度算法中不包括内存作为资源，也不跟踪作业使用的内存。用户可以指定 `--mem MEM_PER_NODE` 选项来设置作业所需的每个节点的最小内存量。这会强制调度器在调度作业时选择 `RealMemory` 值至少为 `MEM_PER_NODE` 的节点。

例如，假设用户提交了两个使用 `--mem=5GB` 的作业。如果请求的资源（如 CPUs 或）可用，则 GPUs 这些作业可以在内存为 8 GiB 的节点上同时运行。不会调度这两个作业在 `RealMemory` 小于 5 GiB 的计算节点上运行。

**警告**  
禁用基于内存的调度时，Slurm 不跟踪作业使用的内存量。在同一节点上运行的作业可能会争夺内存资源并导致其他作业失败。  
在禁用基于内存的调度时，我们建议用户不要指定 [https://slurm.schedmd.com/srun.html#OPT_mem-per-cpu](https://slurm.schedmd.com/srun.html#OPT_mem-per-cpu) 或 [https://slurm.schedmd.com/srun.html#OPT_mem-per-gpu](https://slurm.schedmd.com/srun.html#OPT_mem-per-gpu) 选项。这些选项可能导致的行为与中描述的有所不同 [Slurm 文档](https://slurm.schedmd.com/documentation.html)。

**`EnableMemoryBasedScheduling: true`**

当设置`EnableMemoryBasedScheduling`为 true 时，Slurm 使用`--mem`提交选项跟踪每个作业的内存使用情况，并防止作业使用的内存超过请求的内存量。

在上面的示例中，用户提交了两个使用 `--mem=5GB` 的作业。这些作业无法在内存为 8 GiB 的节点上同时运行。这是因为所需的总内存量大于节点上可用的内存量。

启用基于内存的调度后，其`--mem-per-gpu`行为`--mem-per-cpu`与中描述的内容保持一致 Slurm 文档中）。例如，使用 `--ntasks-per-node=2 -c 1 --mem-per-cpu=2GB` 提交作业。在这种情况下，Slurm 为每个节点分配总计 4 GiB 的任务。

**警告**  
启用基于内存的调度后，我们建议用户在提交作业时包含 `--mem` 规范。使用默认值 Slurm 包含的配置 AWS ParallelCluster，如果不包含内存选项（`--mem``--mem-per-cpu`、或`--mem-per-gpu`），Slurm 将分配的节点的全部内存分配给该作业，即使它只请求一部分其他资源，例如 CPUs 或 GPUs。这可在作业完成之前有效地防止节点共享，因为没有内存可用于其他作业。发生这种情况是因为 Slurm 将作业的每个节点的内存设置为在提交作业[https://slurm.schedmd.com/slurm.conf.html#OPT_DefMemPerNode](https://slurm.schedmd.com/slurm.conf.html#OPT_DefMemPerNode)时未提供任何内存规格时。此参数的默认值为 0，指定的是对节点内存进行无限制访问。  
如果同一个队列中存在多种具有不同内存量的计算资源，则在不同的节点上可能会为不带内存选项的已提交作业分配不同的内存量。这取决于调度器为作业提供了哪些节点。用户可以在集群或分区级别为选项（例如`DefMemPerNode`或 [https://slurm.schedmd.com/slurm.conf.html#OPT_DefMemPerCPU](https://slurm.schedmd.com/slurm.conf.html#OPT_DefMemPerCPU)）定义自定义值 Slurm 配置文件以防止这种行为。

## Slurm RealMemory 和 AWS ParallelCluster SchedulableMemory
<a name="slurm-mem-based-scheduling-realmemory-v3"></a>

使用 Slurm 随附的配置 AWS ParallelCluster，Slurm 解释[RealMemory](https://slurm.schedmd.com/slurm.conf.html#OPT_RealMemory)为每个节点可用于作业的内存量。从版本 3.2.0 开始，默认 AWS ParallelCluster 设置`RealMemory`为[亚马逊 EC2 实例类型中列出并由亚马逊](https://aws.amazon.com/ec2/instance-types) EC2 API [DescribeInstanceTypes](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstanceTypes.html)返回的内存的 95%。

禁用基于内存的调度时，Slurm 当用户提交`--mem`指定任务时`RealMemory`，调度器用于筛选节点。

启用基于内存的调度后，Slurm 调度器解释`RealMemory`为计算节点上运行的作业可用的最大内存量。

默认设置可能不是所有实例类型的最佳设置：
+ 此设置可能高于节点实际可以访问的内存量。当计算节点是小型实例类型时，可能会发生这种情况。
+ 此设置可能低于节点实际可以访问的内存量。当计算节点是大型实例类型时，可能会发生这种情况，并可能导致大量未使用的内存。

您可以使用 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`ComputeResources`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources)/[`SchedulableMemory`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-SchedulableMemory)微调计算节点 AWS ParallelCluster 的`RealMemory`配置值。要覆盖默认值，请针对您的集群配置专门为 `SchedulableMemory` 定义一个自定义值。

要检查计算节点的实际可用内存，请在该节点上运行 `/opt/slurm/sbin/slurmd -C` 命令。此命令可返回节点的硬件配置，包括 [https://slurm.schedmd.com/slurm.conf.html#OPT_RealMemory](https://slurm.schedmd.com/slurm.conf.html#OPT_RealMemory) 值。有关更多信息，请参阅 [https://slurm.schedmd.com/slurmd.html#OPT_-C](https://slurm.schedmd.com/slurmd.html#OPT_-C)。

确保计算节点的操作系统进程有足够的内存。为此，请将 `SchedulableMemory` 值设置为低于 `slurmd -C` 命令返回的 `RealMemory` 值，从而限制作业可用的内存。

# Slurm 的多实例类型分配
<a name="slurm-multiple-instance-allocation-v3"></a>

从 3.3.0 AWS ParallelCluster 版开始，您可以将集群配置为从计算资源的一组已定义的实例类型中进行分配。可以基于 Amazon EC2 机队的低成本或最佳容量策略进行分配。

这组已定义的实例类型必须全部具有相同数量的 v，CPUs 或者如果禁用了多线程，则必须具有相同数量的内核。此外，这组实例类型必须具有相同制造商的相同数量的加速器。如果 [`Efa`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Efa)/[`Enabled`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Efa-Enabled) 设置为 `true`，则实例必须支持 EFA。有关更多信息和要求，请参阅 [`Scheduling`](Scheduling-v3.md)/[`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`AllocationStrategy`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-AllocationStrategy) 和 [`ComputeResources`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources)/[`Instances`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Instances)。

`capacity-optimized`根据您的[CapacityType](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-CapacityType)配置 [`AllocationStrategy`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-AllocationStrategy)，可以设置为`lowest-price`或。

在 [`Instances`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Instances) 中，您可以配置一组实例类型。

**注意**  
[从 3.7.0 AWS ParallelCluster 版开始，如果您在实例中配置了多个实例类型，则`EnableMemoryBasedScheduling`可以启用。](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Instances)  
适用于 3.2.0 到 3.6 AWS ParallelCluster 版本。 *x*[，如果您在实例中配置了多个实例类型，则`EnableMemoryBasedScheduling`无法启用。](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Instances)

以下示例显示了如何查询 v CPUs、EFA 支持和架构的实例类型。

Query InstanceTypes 采用 96 v CPUs 和 x86\$164 架构。

```
$ aws ec2 describe-instance-types --region region-id \
  --filters "Name=vcpu-info.default-vcpus,Values=96" "Name=processor-info.supported-architecture,Values=x86_64" \
  --query "sort_by(InstanceTypes[*].{InstanceType:InstanceType,MemoryMiB:MemoryInfo.SizeInMiB,CurrentGeneration:CurrentGeneration,VCpus:VCpuInfo.DefaultVCpus,Cores:VCpuInfo.DefaultCores,Architecture:ProcessorInfo.SupportedArchitectures[0],MaxNetworkCards:NetworkInfo.MaximumNetworkCards,EfaSupported:NetworkInfo.EfaSupported,GpuCount:GpuInfo.Gpus[0].Count,GpuManufacturer:GpuInfo.Gpus[0].Manufacturer}, &InstanceType)" \
  --output table
```

Query InstanceTypes 拥有 64 个内核、支持 EFA 和 arm64 架构。

```
$ aws ec2 describe-instance-types --region region-id \
  --filters "Name=vcpu-info.default-cores,Values=64" "Name=processor-info.supported-architecture,Values=arm64" "Name=network-info.efa-supported,Values=true" --query "sort_by(InstanceTypes[*].{InstanceType:InstanceType,MemoryMiB:MemoryInfo.SizeInMiB,CurrentGeneration:CurrentGeneration,VCpus:VCpuInfo.DefaultVCpus,Cores:VCpuInfo.DefaultCores,Architecture:ProcessorInfo.SupportedArchitectures[0],MaxNetworkCards:NetworkInfo.MaximumNetworkCards,EfaSupported:NetworkInfo.EfaSupported,GpuCount:GpuInfo.Gpus[0].Count,GpuManufacturer:GpuInfo.Gpus[0].Manufacturer}, &InstanceType)" \
  --output table
```

下一个集群配置示例片段显示了如何使用这些配置 InstanceType 以及 AllocationStrategy 属性。

```
...
 Scheduling:
  Scheduler: slurm
  SlurmQueues:
    - Name: queue-1
      CapacityType: ONDEMAND
      AllocationStrategy: lowest-price
      ...
      ComputeResources:
        - Name: computeresource1
          Instances:
            - InstanceType: r6g.2xlarge
            - InstanceType: m6g.2xlarge
            - InstanceType: c6g.2xlarge
          MinCount: 0
          MaxCount: 500
        - Name: computeresource2
          Instances:
            - InstanceType: m6g.12xlarge
            - InstanceType: x2gd.12xlarge
          MinCount: 0
          MaxCount: 500
...
```

# 动态节点的集群扩展
<a name="scheduler-node-allocation-v3"></a>

ParallelCluster 支持使用SlurmSlurm的 power saver 插件动态扩展集群的方法。有关更多信息，请参阅 Slurm 文档中的 [Cloud Scheduling Guide](https://slurm.schedmd.com/elastic_computing.html) 和 [Slurm Power Saving Guide](https://slurm.schedmd.com/power_save.html)。以下主题说明每个版本的 Slurm 策略。

**Topics**
+ [版本 3.8.0 中的 Slurm 动态节点分配策略](scheduler-node-allocation-v3-3.8.0.md)
+ [版本 3.7.x 中的 Slurm 动态节点分配策略](scheduler-dynamic-node-allocation-v3-3.7.x.md)
+ [版本 3.6.x 及以前版本中的 Slurm 动态节点分配策略](scheduler-dynamic-node-allocation-v3-3.6.x.md)

# 版本 3.8.0 中的 Slurm 动态节点分配策略
<a name="scheduler-node-allocation-v3-3.8.0"></a>

从 ParallelCluster 版本 3.8.0 开始， ParallelCluster 使用**作业级恢复**或**作业级扩展**作为默认的动态节点分配策略来扩展集群： ParallelCluster 根据每个作业的要求、分配给任务的节点数量以及需要恢复的节点数量来扩展集群。 ParallelCluster 从 SLURM\$1RESUME\$1FILE 环境变量中获取此信息。

动态节点的扩展分为两个步骤，包括启动 EC2 实例和将启动的 Amazon EC2 实例分配到 Slurm 节点。这两个步骤中的每一个都可以使用**all-or-nothing**或**尽力**而为的逻辑来完成。

启动 Amazon EC2 实例：
+ **all-or-nothing**调用启动的 Amazon EC2 API，其最小目标等于总目标容量
+ **最大努力**调用启动 Amazon EC2 API，最小目标值等于 1，总目标容量等于请求的容量

将 Amazon EC2 实例分配到 Slurm 节点：
+ **all-or-nothing**只有在可以为每个请求的Slurm节点分配一个 Amazon EC2 实例的情况下，才会将 Amazon EC2 实例分配给节点
+ 即使 Amazon EC2 实例容量无法覆盖所有请求节点，**最大努力**也会将 Amazon EC2 实例分配给 Slurm 节点

  上述策略的可能组合转化为 ParallelCluster发射策略。

**Example**  [ ScalingStrategy](Scheduling-v3.md#yaml-Scheduling-ScalingStrategy)

**all-or-nothing**缩放：

此策略包括 AWS ParallelCluster 为每个任务启动 Amazon EC2 启动实例 API 调用，这要求成功启动所请求的计算节点所需的所有实例。这可确保集群只在每个作业所需的容量可用时才进行扩展，避免在扩展过程结束时留下闲置实例。

该策略使用一种**all-or-nothing**逻辑来启动每项任务的 Amazon EC2 实例，以及将 Amazon EC2 实例分配给Slurm节点的**all-or-nothing**逻辑。

该策略将启动请求分为若干批次，每个请求的计算资源一个批次，每个批次最多 500 个节点。对于跨越多个计算资源或超过 500 个节点的请求， ParallelCluster 按顺序处理多个批次。

任何单一资源的批处理失败都会导致所有相关未使用容量的终止，从而确保在扩展过程结束时不会留下任何闲置实例。

限制
+ 扩展所需的时间与每次执行 Slurm 恢复程序时提交的作业数量成正比。
+ 扩展操作受 RunInstances 资源账户限制的限制，默认情况下设置为 1000 个实例。此限制符合 AWS EC2 API 限制政策，有关更多详细信息，请参阅 [Amazon EC2 API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/throttling.html) 限制文档 
+ 当您在具有单一实例类型的计算资源中提交任务时，在跨越多个可用区的队列中，只有在单个可用区中可以提供所有容量时，**all-or-nothing**EC2 启动 API 调用才会成功。
+ 当您在具有多种实例类型的计算资源中提交任务时，在具有单个可用区的队列中，只有当所有容量均可由单个实例类型提供时，**all-or-nothing**Amazon EC2 启动 API 调用才会成功。
+ 当您在具有多种实例类型的计算资源中提交任务时，在跨越多个可用区的队列中，不支持 **all-or-nothing**Amazon EC2 启动 API 调用，而是 ParallelCluster 执行**尽力**扩展。

**greedy-all-or-nothing**缩放：

该 all-or-nothing策略的这种变体仍然可以确保集群仅在每个任务所需的容量可用时才进行扩展，从而避免在扩展过程结束时出现空闲实例，但它涉及 ParallelCluster 启动一个目标最小容量为 1 的 Amazon EC2 启动实例 API 调用，尝试将启动的节点数量最大化到请求的容量。该策略使用尽力为所有任务启动 EC2 实例的逻**all-or-nothing**辑，以及将 Amazon EC2 实例分配给每个任务的Slurm节点的逻辑。

该策略将启动请求分为若干批次，每个请求的计算资源一个批次，每个批次最多 500 个节点。对于跨越多个计算资源或超过 500 个节点的请求， ParellelCluster 按顺序处理多个批次。

该策略以在扩展过程中暂时过度扩展为代价，最大限度地提高吞吐量，从而确保在扩展过程结束时不会留下闲置实例。

限制
+ 可能会出现临时的过度扩展，导致在扩展完成前过渡到运行状态的实例产生额外费用。
+ 与 all-or-nothing策略中相同的实例限制适用，具体取决于 AWS的 RunInstances 资源账户限制。

**最大努力**扩展：

该策略调用 Amazon EC2 启动实例 API 调用，将最小容量设为 1，并以达到总请求容量为目标，但如果不是所有要求的容量都可用，则在扩展过程执行后会留下闲置实例。该策略采用“最大努力”逻辑为所有作业启动 Amazon EC2 实例，并为每个作业采用**最大努力**逻辑来将 Amazon EC2 实例分配给 Slurm 节点。

该策略将启动请求分为若干批次，每个请求的计算资源一个批次，每个批次最多 500 个节点。对于跨越多个计算资源或超过 500 个节点的请求， ParallelCluster 按顺序处理多个批次。

这种策略允许在多次扩展过程执行中，扩展的实例数量远远超过默认的 1000 个实例限制，但代价是在不同扩展进程中出现闲置实例。

限制
+ 在扩展过程结束时可能出现的闲置运行实例，用于无法分配作业要求的所有节点的情况。

以下示例显示了使用不同的**ParallelCluster 启动策略**扩展动态节点的行为。假设您提交了两个作业，每个作业需要 20 个节点，总共需要 40 个相同类型的节点，但只有 30 个 Amazon EC2 实例可用，无法满足 EC2 上的请求容量。

**all-or-nothing**缩放：
+ 对于第一项任务，调用了 A ** all-or-nothing**mazon EC2 启动实例 API，请求了 20 个实例。一次成功的调用启动了 20 个实例
+ **all-or-nothing **成功将 20 个已启动的实例分配给第一个任务的Slurm节点
+ 调用了另一个 **all-or-nothing**Amazon EC2 启动实例 API，为第二个任务请求 20 个实例。调用不成功，因为只有另外 10 个实例的容量。目前未启动任何实例

**greedy-all-or-nothing**缩放：
+ 采用**最大努力**调用 Amazon EC2 启动实例 API，请求 40 个实例，这是所有作业请求的总容量。这会导致启动 30 个实例
+ 成功将 20 个已启动的实例**all-or-nothing**分配给第一个任务的Slurm节点
+ 尝试将剩余已启动的实例再次**all-or-nothing**分配给第二个任务的Slurm节点，但是由于任务请求的总共 20 个实例中只有 10 个可用实例，因此分配不成功
+ 10 个未分配的已启动实例被终止

**最大努力**扩展：
+ 采用**最大努力**调用 Amazon EC2 启动实例 API，请求 40 个实例，这是所有作业请求的总容量。这会导致启动 30 个实例。
+ 在第一个作业中，采用**最大努力**将 20 个已启动的实例分配给 Slurm 节点是成功的。
+ 在第二个作业中，再次采用**最大努力**将剩余 10 个已启动的实例分配给 Slurm 节点是成功的，即使请求的总容量为 20 也是如此。但是，由于该作业请求 20 个节点，而 Amazon EC2 实例只能分配给其中的 10 个节点，因此该作业无法启动，实例处于闲置状态，直到在以后的扩展过程调用中找到足够的容量来启动缺少的 10 个实例，或者调度器将该作业调度到其它已经运行的计算节点上。

# 版本 3.7.x 中的 Slurm 动态节点分配策略
<a name="scheduler-dynamic-node-allocation-v3-3.7.x"></a>

ParallelCluster 使用 2 种类型的动态节点分配策略来扩展集群：
+ 

**根据可用的请求节点信息进行分配：**
  + **所有节点恢复**或**节点列表**扩展：

    ParallelCluster `ResumeProgram`运行时仅根据请求Slurm的节点列表名称Slurm来扩展集群。它仅按节点名称向节点分配计算资源。节点名称列表可以跨越多个作业。
  + **作业级别恢复**或**作业级别**扩展：

    ParallelCluster 根据每个作业的要求、当前分配给该任务的节点数以及需要恢复的节点来扩展集群。 ParallelCluster 从`SLURM_RESUME_FILE`环境变量中获取此信息。
+ 

**使用 Amazon EC2 启动策略进行分配：**
  + **最大努力**扩展：

    ParallelCluster 使用最小目标容量等于 1 的 Amazon EC2 启动实例 API 调用来扩展集群，启动支持请求的节点所需的部分但不一定是全部实例。
  + ll-or-nothing缩@@ **放**比例：

    ParallelCluster 使用 Amazon EC2 启动实例 API 调用扩展集群，只有在支持请求的节点所需的所有实例都启动后，该调用才会成功。在这种情况下，它调用 Amazon EC2 启动实例 API 时的最小目标容量等于请求的总容量。

默认情况下， ParallelCluster 使用**节点列表**扩展和尽力而为 Amazon **EC** 2 启动策略来启动支持请求的节点所需的部分实例，但不一定是全部实例。它会尝试预置尽可能多的容量来处理所提交的工作负载。

**从 3.7.0 ParallelCluster 版开始， ParallelCluster 使用**作业级**扩展和 **all-or-nothing**EC2 启动策略来处理以独占模式提交的任务。**当您在独占模式下提交作业时，该作业对其分配的节点拥有独占访问权限。有关更多信息，请参阅 Slurm 文档中的 [EXCLUSIVE](https://slurm.schedmd.com/slurm.conf.html#OPT_EXCLUSIVE)。

要以独占模式提交作业，请执行以下操作：
+ 向集群提交 Slurm 作业时传递独占标志。例如 `sbatch ... --exclusive`。

  或
+ 向 [`JobExclusiveAllocation`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-JobExclusiveAllocation) 设置为 `true` 的已配置集群队列提交作业。

以独占模式提交作业时：
+ ParallelCluster 目前批量启动请求最多包含 500 个节点。如果任务请求的节点超过 500 个， ParallelCluster 则为每组 500 个节点发出启动请求，为其余节点发出额外的启动请求。**all-or-nothing**
+ 如果节点分配在单个计算资源中， ParallelCluster 则为每组 500 个节点发出启动请求，为其余节点发出额外的启动请求。**all-or-nothing**如果启动请求失败， ParallelCluster 将终止所有启动请求创建的未使用容量。
+ 如果节点分配跨越多个计算资源，则 ParallelCluster 需要为每个计算资源发出**all-or-nothing**启动请求。这些请求也会进行批处理。如果其中一个计算资源的启动请求失败，则 ParallelCluster 会终止所有计算资源启动请求所创建的未使用容量。

使用**all-or-nothing**启动策略进行@@ **作业级**扩展已知局限性：
+ 当您在具有单一实例类型的计算资源中提交任务时，在跨越多个可用区的队列中，只有在单个可用区中可以提供所有容量时，**all-or-nothing**EC2 启动 API 调用才会成功。
+ 当您在具有多种实例类型的计算资源中提交任务时，在具有单个可用区的队列中，只有当所有容量均可由单个实例类型提供时，**all-or-nothing**Amazon EC2 启动 API 调用才会成功。
+ 当您在具有多种实例类型的计算资源中提交任务时，在跨越多个可用区的队列中，不支持 **all-or-nothing**Amazon EC2 启动 API 调用，而是 ParallelCluster执行**尽力**扩展。

# 版本 3.6.x 及以前版本中的 Slurm 动态节点分配策略
<a name="scheduler-dynamic-node-allocation-v3-3.6.x"></a>

AWS ParallelCluster 仅使用一种类型的动态节点分配策略来扩展集群：
+ 根据可用的请求节点信息进行分配：
  + **所有节点恢复**或**节点列表**扩 ParallelCluster 展：仅根据运行时Slurm请求Slurm的节点列表名称来扩展集群。`ResumeProgram`它仅按节点名称向节点分配计算资源。节点名称列表可以跨越多个作业。
+ 使用 Amazon EC2 启动策略进行分配：
  + **尽力扩 ParallelCluster 展：使用最**小目标容量等于 1 的 Amazon EC2 启动实例 API 调用来扩展集群，启动支持请求的节点所需的部分但不一定是全部实例。

 ParallelCluster 使用**节点列表**扩展和尽力而为 Amazon **EC** 2 启动策略来启动支持请求的节点所需的部分实例，但不一定是全部实例。它会尝试预置尽可能多的容量来处理所提交的工作负载。

限制
+ 在扩展过程结束时可能出现的闲置运行实例，用于无法分配作业要求的所有节点的情况。

# Slurm会计 AWS ParallelCluster
<a name="slurm-accounting-v3"></a>

从 3.3.0 版开始， AWS ParallelCluster 支持使用集群配置参数 [SlurmSettings](Scheduling-v3.md#Scheduling-v3-SlurmSettings)/[数据库](Scheduling-v3.md#Scheduling-v3-SlurmSettings-Database)进行Slurm记账。

从 3.10.0 版开始， AWS ParallelCluster 支持使用带有集群配置参数/的外部 Slurmdbd 进行Slurm记账。[SlurmSettings[ExternalSlurmdbd](Scheduling-v3.md#Scheduling-v3-SlurmSettings-ExternalSlurmdbd)](Scheduling-v3.md#Scheduling-v3-SlurmSettings)如果多个集群共享同一个数据库，建议使用外部 Slurmdbd。

通过 Slurm 会计，您可以集成外部会计数据库来执行以下操作：
+ 管理集群用户或用户组和其他实体。借助此功能，您可以使用更高级Slurm的功能，例如资源限制强制执行、公平共享和。 QOSs
+ 收集并保存作业数据，例如运行作业的用户、作业的持续时间及其使用的资源。您可以使用 `sacct` 实用工具查看保存的数据。

**注意**  
AWS ParallelCluster 支持对[Slurm支持的 MySQL 数据库服务器](https://slurm.schedmd.com/accounting.html#mysql-configuration)进行Slurm记账。

## Slurmdbd在 AWS ParallelCluster v3.10.0 及更高版本中使用外部使用Slurm记账
<a name="slurm-accounting-works-v3-later"></a>

在配置 Slurm 会计之前，必须有一个现有的外部 Slurmdbd 数据库服务器，该服务器可连接到现有的外部数据库服务器。

要对此进行配置，请定义以下内容：
+ [ExternalSlurmdbd](Scheduling-v3.md#Scheduling-v3-SlurmSettings-ExternalSlurmdbd)/[Host](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-ExternalSlurmdbd-Host) 中外部Slurmdbd服务器的地址。服务器必须存在并且可以从头节点访问。
+ 用于与外部Slurmdbd服务器通信的 munge 密钥。[MungeKeySecretArn](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-MungeKeySecretArn)

要查看分步教程，请参阅[使用外部集群创建集群 Slurmdbd 会计](external-slurmdb-accounting.md)。

**注意**  
您负责管理 Slurm 数据库会计实体。

 AWS ParallelCluster 外部SlurmDB支持功能的架构使多个集群可以共享相同SlurmDB和相同的数据库。

 ![\[\]](http://docs.aws.amazon.com/zh_cn/parallelcluster/latest/ug/images/External_Slurmdbd_Architecture_ASG.png)

**警告**  
与外部 AWS ParallelCluster 之间的流量SlurmDB未加密。建议在可信网络中运行集群和外部 SlurmDB。

## Slurmdbd在 AWS ParallelCluster v3.3.0 及更高版本中使用头节点处理Slurm记账
<a name="slurm-accounting-works-v3"></a>

在配置 Slurm 会计之前，必须具有现有的外部数据库服务器和使用 `mysql` 协议的数据库。

要使用配置Slurm记账 AWS ParallelCluster，必须定义以下内容：
+ 在 [Database](Scheduling-v3.md#Scheduling-v3-SlurmSettings-Database)/[Uri](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-Database-Uri) 中定义的外部数据库服务器的 URI。服务器必须存在并且可以从头节点访问。
+ [访问数据库/ [PasswordSecretArn](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-Database-PasswordSecretArn)和数据库/中定义的外部[数据库](Scheduling-v3.md#Scheduling-v3-SlurmSettings-Database)的凭据[UserName](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-Database-UserName)。](Scheduling-v3.md#Scheduling-v3-SlurmSettings-Database) AWS ParallelCluster 使用此信息在Slurm级别上配置记账并在头节点上配置`slurmdbd`服务。 `slurmdbd`是管理群集和数据库服务器之间通信的守护程序。

要查看分步教程，请参阅[使用创建集群 Slurm 会计](tutorials_07_slurm-accounting-v3.md)。

**注意**  
AWS ParallelCluster 通过将默认集群用户设置为数据库管理员来执行Slurm会计数据库的基本引导。Slurm AWS ParallelCluster 不会向会计数据库添加任何其他用户。客户负责管理 Slurm 数据库中的会计实体。

AWS ParallelCluster 配置[https://slurm.schedmd.com/slurmdbd.html](https://slurm.schedmd.com/slurmdbd.html)为确保群集在Slurm数据库服务器上拥有自己的数据库。同一台数据库服务器可以跨多个群集使用，但每个群集都有自己的独立数据库。 AWS ParallelCluster 使用集群名称在`slurmdbd`配置文件[https://slurm.schedmd.com/slurmdbd.conf.html#OPT_StorageLoc](https://slurm.schedmd.com/slurmdbd.conf.html#OPT_StorageLoc)参数中定义数据库的名称。请考虑以下情况：数据库服务器上存在的数据库包括的集群名称未映射到有效的集群名称。在这种情况下，您可以使用该集群名称创建一个新集群以映射到该数据库。Slurm 会对新集群重复使用该数据库。

**警告**  
我们不建议设置多个集群同时使用同一个数据库。这样做可能会导致性能问题，甚至导致数据库死锁情况。
如果在集群的头节点上启用了 Slurm 会计，我们建议使用具有强大 CPU、更大内存和更高网络带宽的实例类型。Slurm 会计可能会增加集群头节点的负荷。

在当前的 AWS ParallelCluster Slurm记账功能架构中，每个集群都有自己的`slurmdbd`守护程序实例，如下图示例配置所示。

 ![\[\]](http://docs.aws.amazon.com/zh_cn/parallelcluster/latest/ug/images/slurm-acct-arch.png)

如果您要向集群环境中添加自定义 Slurm 多集群或联合身份验证功能，则所有集群都必须引用同一个 `slurmdbd` 实例。对于这种替代方案，我们建议您在一个集群上启用 AWS ParallelCluster Slurm记账，然后手动配置其他集群以连接到第一个集群上托管的集群。`slurmdbd`

如果您使用的是 3.3.0 之前的 AWS ParallelCluster 版本，请参阅此 [HPC 博客文章](https://aws.amazon.com/blogs/compute/enabling-job-accounting-for-hpc-with-aws-parallelcluster-and-amazon-rds/)中描述的实现Slurm记账的替代方法。

## Slurm 会计注意事项
<a name="slurm-accounting-considerations-v3"></a>

### 数据库和集群在不同的地方 VPCs
<a name="slurm-accounting-considerations-different-vpcs-v3"></a>

要启用 Slurm 会计，需要将数据库服务器作为 `slurmdbd` 进程守护程序执行读取和写入操作的后端。在创建或更新集群以启用 Slurm 会计之前，头节点必须能够访问该数据库服务器。

如果您需要在集群使用的 VPC 之外的不同 VPC 上部署数据库服务器，请考虑以下事项：
+ 要启用群集端和数据库服务器之间的通信，必须设置两者之间的连接 VPCs。`slurmdbd`有关更多信息，请参阅 *Amazon Virtual Private Cloud 用户指南* 中的 [VPC 对等连接](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)。
+ 您必须在集群的 VPC 上创建要连接到头节点的安全组。两者建立 VPCs 对等关系后，即可在数据库端和集群端安全组之间进行交叉链接。有关更多信息，请参阅 *Amazon Virtual Private Cloud 用户指南* 中的[安全组规则](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#SecurityGroupRules)。

### 配置 `slurmdbd` 和数据库服务器之间的 TLS 加密
<a name="slurm-accounting-considerations-tls-config-v3"></a>

如果服务器支持 TLS 加密，则使用 AWS ParallelCluster 提供的默认Slurm记账配置与数据库服务器`slurmdbd`建立 TLS 加密连接。 AWS 默认情况下，诸如 Amazon RDS 之类的数据库服务 Amazon Aurora 支持 TLS 加密。

通过在数据库服务器上设置 `require_secure_transport` 参数，可以在服务器端要求安全连接。这是在提供的 CloudFormation 模板中配置的。

根据安全性方面的最佳实践，我们建议您同时在 `slurmdbd` 客户端上启用服务器身份验证。为此，请在[StorageParameters](https://slurm.schedmd.com/slurmdbd.conf.html#OPT_StorageParameters)中配置`slurmdbd.conf`。将服务器 CA 证书上传到集群的头节点。接下来，将 `slurmdbd.conf` 中 `StorageParameters` 的 [SSL\$1CA](https://slurm.schedmd.com/slurmdbd.conf.html#OPT_SSL_CA) 选项设置为头节点上服务器 CA 证书的路径。这样做会在 `slurmdbd` 侧启用服务器身份验证。进行这些更改后，重启 `slurmdbd` 服务以便在启用身份验证的情况下重新建立与数据库服务器的连接。

### 更新数据库凭证
<a name="slurm-accounting-considerations-updates-v3"></a>

要更新[数据库](Scheduling-v3.md#Scheduling-v3-SlurmSettings-Database)/[UserName](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-Database-UserName)或的值 [PasswordSecretArn](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-Database-PasswordSecretArn)，必须先停止计算队列。假设存储在密钥中的 AWS Secrets Manager 密钥值已更改，且其 ARN 未更改。在这种情况下，集群不会自动将数据库密码更新为新值。要针对新密钥值更新集群，请从头节点运行以下命令。

```
$ sudo /opt/parallelcluster/scripts/slurm/update_slurm_database_password.sh
```

**警告**  
为避免会计数据丢失，我们建议仅在已停止计算实例集的情况下更改数据库密码。

### 数据库监控
<a name="slurm-accounting-considerations-updates-monitoring-v3"></a>

我们建议您启用 AWS 数据库服务的监控功能。有关更多信息，请参阅 [Amazon RDS 监控](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Monitoring.html)或 [Amazon Aurora 监控](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/MonitoringAurora.html)文档。

# Slurm 配置自定义
<a name="slurm-configuration-settings-v3"></a>

从 3.6.0 AWS ParallelCluster 版开始，您可以自定义 `slurm.conf` Slurm AWS ParallelCluster 集群配置中的配置。

在集群配置中，您可以自定义 Slurm 使用以下集群配置设置配置参数：
+ 自定义 Slurm 使用 [`SlurmSettings`](Scheduling-v3.md#Scheduling-v3-SlurmSettings)/[`CustomSlurmSettings`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-CustomSlurmSettings)或参数为整个集群[`CustomSlurmSettingsIncludeFile`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-CustomSlurmSettingsIncludeFile)设置参数。 AWS ParallelCluster 如果同时指定两者，则失败。
+ 自定义 Slurm 使用 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/为队列设置参数 [`CustomSlurmSettings`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-CustomSlurmSettings)（映射到 Slurm 分区）。
+ 自定义 Slurm 使用 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`ComputeResources`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources)/为计算资源设置参数 [`CustomSlurmSettings`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-CustomSlurmSettings)（映射到 Slurm 节点）。

## Slurm 配置自定义限制和使用时的注意事项 AWS ParallelCluster
<a name="slurm-configuration-considerations-v3"></a>


+ 对于`CustomSlurmSettings`和`CustomSlurmSettingsIncludeFile`设置，您只能指定和更新包含在中的`slurm.conf`参数 [Slurm 您用于配置集群的 AWS ParallelCluster 版本所支持的版本。](slurm-workload-manager-v3.md)
+ 如果您指定自定义 Slurm 在任何`CustomSlurmSettings`参数中进行配置， AWS ParallelCluster 执行验证检查并阻止设置或更新 Slurm 与 AWS ParallelCluster 逻辑冲突的配置参数。这些区域有：Slurm 已知与 AWS ParallelCluster 之冲突的配置参数在拒绝列表中标识。如果有其他情况，拒绝列表可能会在 future AWS ParallelCluster 版本中发生变化 Slurm 功能已添加。有关更多信息，请参阅 [被拒登名单 Slurm 的配置参数 `CustomSlurmSettings`](#slurm-configuration-denylists-v3)。
+ AWS ParallelCluster 仅检查参数是否在拒绝列表中。 AWS ParallelCluster 无法验证您的自定义 Slurm 配置参数语法或语义。您有责任验证您的自定义 Slurm 配置参数。无效的自定义 Slurm 配置参数可能导致 Slurm 守护程序失败可能导致集群创建和更新失败。
+ 如果您指定自定义 Slurm 中的配置`CustomSlurmSettingsIncludeFile`， AWS ParallelCluster 不执行任何验证。
+ 您可以更新 `CustomSlurmSettings` 和 `CustomSlurmSettingsIncludeFile` 而不停止然后启动计算实例集。在这种情况下， AWS ParallelCluster 重新启动`slurmctld`守护程序并运行命令。`scontrol reconfigure`

  一段时间 Slurm 在整个集群中注册更改之前，可能需要对配置参数进行不同的操作。例如，它们可能需要重启集群中的所有进程守护程序。您有责任验证 AWS ParallelCluster 操作是否足以传播您的自定义内容 Slurm 更新期间的配置参数设置。如果您发现 AWS ParallelCluster 操作还不够，则您有责任按照中的建议提供传播更新后的设置所需的额外操作 [Slurm 文档](https://slurm.schedmd.com/documentation.html)。

## 被拒登名单 Slurm 的配置参数 `CustomSlurmSettings`
<a name="slurm-configuration-denylists-v3"></a>

下表列出了拒绝使用参数的 AWS ParallelCluster 版本（从 3.6.0 版本开始）。 `CustomSlurmSettings`3.6.0 之前的 AWS ParallelCluster 版本不支持。


**集群级别列入拒绝列表的参数：**  

| Slurm 参数 | 已在版本中列出拒绝 AWS ParallelCluster  | 
| --- | --- | 
|  CommunicationParameters  |  3.6.0  | 
|  Epilog  |  3.6.0  | 
|  GresTypes  |  3.6.0  | 
|  LaunchParameters  |  3.6.0  | 
|  Prolog  |  3.6.0  | 
|  ReconfigFlags  |  3.6.0  | 
|  ResumeFailProgram  |  3.6.0  | 
|  ResumeProgram  |  3.6.0  | 
|  ResumeTimeout  |  3.6.0  | 
|  SlurmctldHost  |  3.6.0  | 
|  SlurmctldLogFile  |  3.6.0  | 
|  SlurmctldParameters  |  3.6.0  | 
|  SlurmdLogfile  |  3.6.0  | 
|  SlurmUser  |  3.6.0  | 
|  SuspendExcNodes  |  3.6.0  | 
|  SuspendProgram  |  3.6.0  | 
|  SuspendTime  |  3.6.0  | 
|  TaskPlugin  |  3.6.0  | 
|  TreeWidth  |  3.6.0  | 


**本机时在集群级别被拒绝列出的参数 [Slurm 记账集成](slurm-accounting-v3.md)是在群集配置中配置的：**  

| Slurm 参数 | 已在版本中列出拒绝 AWS ParallelCluster  | 
| --- | --- | 
|  AccountingStorageType  |  3.6.0  | 
|  AccountingStorageHost  |  3.6.0  | 
|  AccountingStoragePort  |  3.6.0  | 
|  AccountingStorageUser  |  3.6.0  | 
|  JobAcctGatherType  |  3.6.0  | 


**队列管理的队列的队列（分区）级别的拒绝列表参数： AWS ParallelCluster**  

| Slurm 参数 | 已在版本中列出拒绝 AWS ParallelCluster  | 
| --- | --- | 
|  Nodes  |  3.6.0  | 
|  PartitionName  |  3.6.0  | 
|  ResumeTimeout  |  3.6.0  | 
|  State  |  3.6.0  | 
|  SuspendTime  |  3.6.0  | 


**由以下机构管理的计算资源（节点）级别的拒绝列出的计算资源的参数： AWS ParallelCluster**  

| Slurm 参数 | 已在版本和更高 AWS ParallelCluster 版本中列出 “拒绝” | 
| --- | --- | 
|  CPUs  |  3.6.0  | 
|  Features  |  3.6.0  | 
|  Gres  |  3.6.0  | 
|  NodeAddr  |  3.6.0  | 
|  NodeHostname  |  3.6.0  | 
|  NodeName  |  3.6.0  | 
|  权重  |  3.7.0  | 

# Slurm 和 `prolog``epilog`
<a name="slurm-prolog-epilog-v3"></a>

从 AWS ParallelCluster 版本 3.6.0 开始，使用部署的Slurm配置 AWS ParallelCluster 包括`Prolog`和`Epilog`配置参数：

```
# PROLOG AND EPILOG
Prolog=/opt/slurm/etc/scripts/prolog.d/*
Epilog=/opt/slurm/etc/scripts/epilog.d/*
SchedulerParameters=nohold_on_prolog_fail
BatchStartTimeout=180
```

有关更多信息，请参阅 Slurm 文档中的 [Prolog 和 Epilog 指南](https://slurm.schedmd.com/prolog_epilog.html)。

AWS ParallelCluster 包括以下序言和结尾脚本：
+ `90_plcuster_health_check_manager`（位于 `Prolog` 文件夹）
+ `90_pcluster_noop`（位于 `Epilog` 文件夹）

**注意**  
`Prolog` 和 `Epilog` 文件夹都必须至少包含一个文件。

您可以将自定义 `prolog` 或 `epilog` 脚本添加到相应的 `Prolog` 和 `Epilog` 文件夹中，从而使用自己的自定义脚本。

**警告**  
Slurm 按字母倒序运行这些文件夹中的每个脚本。

`prolog` 和 `epilog` 脚本的运行持续时间会影响运行作业所需的时间。当运行的 `prolog` 脚本数量较多或运行时间较长时，请更新 `BatchStartTimeout` 配置设置。默认值为 3 分钟。

如果您要使用自定义 `prolog` 和 `epilog` 脚本，请将这些脚本放置在相应的 `Prolog` 和 `Epilog` 文件夹中。我们建议您保留在每个自定义脚本之前运行的 `90_plcuster_health_check_manager` 脚本。有关更多信息，请参阅 [Slurm 配置自定义](slurm-configuration-settings-v3.md)。

# 集群容量大小和更新
<a name="slurm-cluster-capacity-size-and-update"></a>

集群的容量由集群可以扩展的计算节点数量来定义。计算节点由 AWS ParallelCluster 配置中的计算资源中定义的 Amazon EC2 实例提供支持`(Scheduling/SlurmQueues/ ComputeResources)`，并按照 1:1 映射到`(Scheduling/SlurmQueues)`的队列进行组织 Slurm 分区。

在计算资源中，可以配置集群中必须始终保持运行的计算节点（实例）的最小数量（`MinCount`），以及计算资源可扩展到的实例最大数量（[`MaxCount`3 ](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MaxCount)）。

在创建集群时或群集更新时，为集群中定义的每个计算资源 (`Scheduling/SlurmQueues/ ComputeResources`) AWS ParallelCluster 启动中配置`MinCount`的任意数量的 Amazon EC2 实例。为覆盖集群中计算资源的最小节点数量而启动的实例称为***静态节点***。静态节点一旦启动，就会在集群中持续存在，除非发生特定事件或情况，否则系统不会终止它们。例如，此类事件包括失败 Slurm 或者 Amazon EC2 健康检查和变更 Slurm 节点状态变为 “耗尽” 或 “关闭”。

为应对集群`MaxCount `*负载增加而`1`按需启动的 Amazon EC2 实例被称为***动态节点***，范围为`‘MaxCount - MinCount’`（减去*` MinCount)`）。 它们的性质是短暂的，启动它们是为了处理待处理的任务，如果它们`Scheduling/SlurmSettings/ScaledownIdletime`在集群配置中定义的一段时间内保持闲置状态（默认值：10 分钟），它们就会被终止。

静态节点和动态节点符合以下命名方案：
+ 静态节点 `<Queue/Name>-st-<ComputeResource/Name>-<num>`，其中 `<num> = 1..ComputeResource/MinCount`
+ 动态节点 `<Queue/Name>-dy-<ComputeResource/Name>-<num>`，其中 `<num> = 1..(ComputeResource/MaxCount - ComputeResource/MinCount)`

例如，给定以下 AWS ParallelCluster 配置：

```
Scheduling:  
    Scheduler: Slurm  
    SlurmQueues:    
        - Name: queue1      
            ComputeResources:        
                - Name: c5xlarge          
                    Instances:            
                        - InstanceType: c5.xlarge          
                        MinCount: 100          
                        MaxCount: 150
```

将在中定义以下节点 Slurm

```
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
queue1*      up   infinite     50  idle~ queue1-dy-c5xlarge-[1-50]
queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
```

当计算资源的 `MinCount == MaxCount` 时，所有相应的计算节点都将是静态的，所有实例都将在集群创建/更新时启动并保持运行。例如：

```
Scheduling:
  Scheduler: slurm
  SlurmQueues:
    - Name: queue1
      ComputeResources:
        - Name: c5xlarge
          Instances:
            - InstanceType: c5.xlarge
          MinCount: 100
          MaxCount: 100
```

```
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
```

## 集群容量更新
<a name="cluster-capacity-update-c2"></a>

集群容量的更新包括添加或删除队列、计算资源或更改计算资源的 `MinCount/MaxCount`。从 AWS ParallelCluster 版本 3.9.0 开始，缩小队列大小需要在集群更新之前停止计算队列或将其[QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)设置为 TERMINATION for。在以下情况下，无需停止计算队列或将其设置[QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)为 “终止”：
+ 将新队列添加到 Scheduling/[`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)

   
+ 向队列中添加新的计算资源 `Scheduling/SlurmQueues/ComputeResources`
+ 增加计算资源的 `MaxCount`
+ 计算资源的增加 MaxCount 和相同计算资源的增加量至少相等 MinCount 

## 注意事项和限制
<a name="cluster-considerations-limitations"></a>

本节旨在概述在调整集群容量大小时应考虑的任何重要因素、约束或限制。
+ 从`Scheduling/SlurmQueues`所有具有静态和动态名称`<Queue/Name>-*`的计算节点中移除队列时，将从 Slurm 配置和相应的 Amazon EC2 实例将被终止。
+ `Scheduling/SlurmQueues/ComputeResources`从队列中移除计算资源时，所有名`<Queue/Name>-*-<ComputeResource/Name>-*`为静态和动态的计算节点都将从队列中移除 Slurm 配置和相应的 Amazon EC2 实例将被终止。

在更改计算资源的 `MinCount` 参数时，我们可以区分两种不同的情况，一种是 `MaxCount` 与 `MinCount` 相等（仅静态容量），另一种是 `MaxCount` 大于 `MinCount`（静态和动态混合容量）。

### 只有静态节点的容量变化
<a name="capacity-changes-static-nodes"></a>
+ 如果在增加`MinCount`（和`MaxCount`）时`MinCount == MaxCount`，将通过将静态节点的数量扩展到新的值来配置集群，`MinCount``<Queue/Name>-st-<ComputeResource/Name>-<new_MinCount>`并且系统将继续尝试启动 Amazon EC2 实例以满足新的所需静态容量。
+ 如果在减少`MinCount`（和`MaxCount`）数量 N 时`MinCount == MaxCount`，将通过移除最后 N 个静态节点来配置集群，`<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount - N>...<old_MinCount>]`并且系统将终止相应的 Amazon EC2 实例。
  + 初始状态 `MinCount = MaxCount = 100`
  + 

    ```
    $ sinfo
    PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
    queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
    ```
  + 更新 `MinCount` 和 `MaxCount: MinCount = MaxCount = 70` 上的 `-30`
  + 

    ```
    $ sinfo
    PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
    queue1*      up   infinite     70   idle queue1-st-c5xlarge-[1-70]
    ```

### 混合节点的容量变化
<a name="mixed-node-capacity-changes"></a>

如果在增加`MinCount`数量 N（假设保持不变）时`MinCount < MaxCount`，`MaxCount`将通过将静态节点的数量扩展到新的值 `MinCount` (`old_MinCount + N`): 来配置集群，`<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount + N>`并且系统将继续尝试启动 Amazon EC2 实例以满足新的所需静态容量。此外，为了满足计算资源的`MaxCount`容量，通过*删除最后 N 个动态节点*来更新集群配置：`<Queue/Name>-dy-<ComputeResource/Name>-[<MaxCount - old_MinCount - N>...<MaxCount - old_MinCount>]`系统将终止相应的 Amazon EC2 实例。
+ 初始状态：`MinCount = 100; MaxCount = 150`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     50  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
  ```
+ 将 \$130 更新为 `MinCount : MinCount = 130 (MaxCount = 150)`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     20  idle~ queue1-dy-c5xlarge-[1-20]
  queue1*      up   infinite    130   idle queue1-st-c5xlarge-[1-130]
  ```

如果在增加`MinCount`且`MaxCount`数量相同 N 时`MinCount < MaxCount`，将通过将静态节点数扩展到新值 `MinCount` (`old_MinCount + N`): 来配置集群，`<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount + N>`并且系统将继续尝试启动 Amazon EC2 实例以满足新的所需静态容量。此外，动态节点的数量不会因新的

 `MaxCount` 值。
+ 初始状态：`MinCount = 100; MaxCount = 150`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     50  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
  ```
+ 将 \$130 更新为 `MinCount : MinCount = 130 (MaxCount = 180)`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     20  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite    130   idle queue1-st-c5xlarge-[1-130]
  ```

如果`MinCount < MaxCount`在减少`MinCount`数量 N（假设保持不变）时，`MaxCount`将通过移除最后 N 个静态节点的静态节点来配置集群，系统将终止相应的 Amazon EC2 实例。`<Queue/Name>-st-<ComputeResource/Name>-[<old_MinCount - N>...<old_MinCount>`此外，为了满足计算资源的`MaxCount`容量，通过扩展动态节点的数量来更新集群配置以填补空白。`MaxCount - new_MinCount: <Queue/Name>-dy-<ComputeResource/Name>-[1..<MazCount - new_MinCount>]`在这种情况下，由于这些是动态节点，因此除非调度程序在新节点上有待处理的任务，否则不会启动新的 Amazon EC2 实例。
+ 初始状态：`MinCount = 100; MaxCount = 150`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     50  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
  ```
+ 更新 `MinCount : MinCount = 70 (MaxCount = 120)` 上的 -30
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     80  idle~ queue1-dy-c5xlarge-[1-80]
  queue1*      up   infinite     70   idle queue1-st-c5xlarge-[1-70]
  ```

如果在减少`MinCount`且`MaxCount`数量相同的 N 时`MinCount < MaxCount`，将通过移除最后 N 个静态节点`<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount - N>...<oldMinCount>]`来配置集群，系统将终止相应的 Amazon EC2 实例。

 此外，动态节点的数量不会因新的 `MaxCount` 值而发生变化。
+ 初始状态：`MinCount = 100; MaxCount = 150`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     50  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
  ```
+ 更新 `MinCount : MinCount = 70 (MaxCount = 120)` 上的 -30
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     80  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite     70   idle queue1-st-c5xlarge-[1-70]
  ```

如果在减少`MaxCount`数量 N（假设保持不变）时`MinCount < MaxCount`，`MinCount`将通过移除最后 N 个动态节点来配置集群，`<Queue/Name>-dy-<ComputeResource/Name>-<old_MaxCount - N...<oldMaxCount>]`并且系统将终止相应的 Amazon EC2 实例（如果它们正在运行）。预计不会对静态节点产生任何影响。
+ 初始状态：`MinCount = 100; MaxCount = 150`
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     50  idle~ queue1-dy-c5xlarge-[1-50]
  queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
  ```
+ 更新 `MaxCount : MinCount = 100 (MaxCount = 120)` 上的 -30
+ 

  ```
  $ sinfo
  PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
  queue1*      up   infinite     20  idle~ queue1-dy-c5xlarge-[1-20]
  queue1*      up   infinite    100   idle queue1-st-c5xlarge-[1-100]
  ```

## 对作业的影响
<a name="job-impacts"></a>

在移除节点和 Amazon EC2 实例终止的所有情况下，除非没有其他节点满足任务要求，否则在已移除的节点上运行的 sbatch 作业都将重新排队。在最后一种情况下，任务失败，状态为 NODE\$1FAIL，并从队列中消失，必须手动重新提交。

如果您计划执行集群大小调整更新，可以防止作业在计划更新期间将被移除的节点上运行。这可以通过将要移除的节点设置为维护状态来实现。请注意，将节点设置为维护状态不会影响最终已在该节点上运行的作业。

假设在计划的集群大小调整更新中，您将移除节点 `qeueu-st-computeresource-[9-10`]。你可以创建一个 Slurm 使用以下命令进行预订

```
sudo -i scontrol create reservation ReservationName=maint_for_update user=root starttime=now duration=infinite flags=maint,ignore_jobs nodes=qeueu-st-computeresource-[9-10]
```

这将创建一个 Slurm 在节点`maint_for_update`上命名的预留`qeueu-st-computeresource-[9-10]`。从创建预留开始，`qeueu-st-computeresource-[9-10]` 节点上就不能再运行任何作业。请注意，预留不会阻止作业最终在 `qeueu-st-computeresource-[9-10]` 节点上分配。

集群大小更新后，如果 Slurm 仅在调整大小更新期间移除的节点上设置了预留，维护预留将自动删除。相反，如果你创建了一个 Slurm 在集群调整大小更新后仍然存在的节点上进行预留，我们可能需要在执行调整大小更新后使用以下命令删除节点上的维护预留 

```
sudo -i scontrol delete ReservationName=maint_for_update
```

欲了解更多详情，请访问 Slurm 预订，请[在此](https://slurm.schedmd.com/reservations.html)处查看 schedMD 官方文档。

## 容量变更时的集群更新过程
<a name="changes-per-process"></a>

调度器配置更改后，将在集群更新过程中执行以下步骤：
+ 停下来 AWS ParallelCluster `clustermgtd (supervisorctl stop clustermgtd)`
+ 生成已更新 Slurm 配置中的分区 AWS ParallelCluster 配置
+ 重启 `slurmctld`（通过 Chef 服务配方完成）
+ 检查 `slurmctld` 状态 `(systemctl is-active --quiet slurmctld.service)`
+ Reload Slurm 配置 `(scontrol reconfigure)`
+ 启动 `clustermgtd (supervisorctl start clustermgtd)`

# 将 AWS Batch (`awsbatch`) 调度器与 AWS ParallelCluster
<a name="awsbatchcli-v3"></a>

**警告**  
AWS CodeBuild 亚太地区（马来西亚）(`ap-southeast-5`) 和亚太地区（泰国）`ap-southeast-7`() 区域不支持。因此，这些地区不支持 ParallelCluster AWS Batch 集成。

AWS ParallelCluster 还支持 AWS Batch 调度程序。以下主题介绍如何使用 AWS Batch。有关的信息 AWS Batch，请参见[AWS Batch](https://aws.amazon.com/batch/)。有关文档，请参阅 [AWS Batch User Guide](https://docs.aws.amazon.com/batch/latest/userguide/)。

**AWS ParallelCluster 的 CLI 命令适用于 AWS Batch**

使用`awsbatch`调度程序时，的 AWS ParallelCluster CLI 命令 AWS Batch 会自动安装在 AWS ParallelCluster 头节点中。CLI 使用 AWS Batch API 操作并允许执行以下操作：
+ 提交和管理作业。
+ 监控作业、队列和主机。
+ 镜像传统调度器命令。

**重要**  
AWS ParallelCluster 不支持 GPU 作业 AWS Batch。有关更多信息，请参阅 [GPU 作业](https://docs.aws.amazon.com/batch/latest/userguide/gpu-jobs.html)。

此 CLI 作为单独的软件包进行分发。有关更多信息，请参阅 [调度器支持](moving-from-v2-to-v3.md#scheduler_support)。

**Topics**
+ [`awsbsub`](awsbatchcli.awsbsub-v3.md)
+ [`awsbstat`](awsbatchcli.awsbstat-v3.md)
+ [`awsbout`](awsbatchcli.awsbout-v3.md)
+ [`awsbkill`](awsbatchcli.awsbkill-v3.md)
+ [`awsbqueues`](awsbatchcli.awsbqueues-v3.md)
+ [`awsbhosts`](awsbatchcli.awsbhosts-v3.md)

# `awsbsub`
<a name="awsbatchcli.awsbsub-v3"></a>

向集群的作业队列提交作业。

```
awsbsub [-h] [-jn JOB_NAME] [-c CLUSTER] [-cf] [-w WORKING_DIR]
        [-pw PARENT_WORKING_DIR] [-if INPUT_FILE] [-p VCPUS] [-m MEMORY]
        [-e ENV] [-eb ENV_DENYLIST] [-r RETRY_ATTEMPTS] [-t TIMEOUT]
        [-n NODES] [-a ARRAY_SIZE] [-d DEPENDS_ON]
        [command] [arguments [arguments ...]]
```

**重要**  
AWS ParallelCluster 不支持 GPU 作业 AWS Batch。有关更多信息，请参阅 [GPU 作业](https://docs.aws.amazon.com/batch/latest/userguide/gpu-jobs.html)。

## 定位参数
<a name="awsbatchcli.awsbsub-v3.args"></a>

***command***  
提交作业（指定的命令必须在计算实例上可用），或指定要传输的文件名。另请参阅`--command-file`。

**arguments**  
（可选）指定命令或命令文件的参数。

## 命名的参数
<a name="awsbatchcli.awsbsub-v3.namedargs"></a>

**-jn *JOB\$1NAME*, --job-name *JOB\$1NAME***  
为作业命名。第一个字符必须是字母或数字。作业名称可以包含字母（大写和小写）、数字、连字符和下划线，长度不超过 128 个字符。

**-c *CLUSTER*, --cluster *CLUSTER***  
指定要使用的集群。

**-cf, --command-file**  
指示命令是要传输到计算实例的文件。  
默认值：False

**-w *WORKING\$1DIR*, --working-dir *WORKING\$1DIR***  
指定要用作作业的工作目录的文件夹。如果未指定工作目录，则在用户的主目录的 `job-<AWS_BATCH_JOB_ID>` 子文件夹中运行作业。您可以使用此参数或 `--parent-working-dir` 参数。

**-pw *PARENT\$1WORKING\$1DIR*, --parent-working-dir *PARENT\$1WORKING\$1DIR***  
指定作业的工作目录的父文件夹。如果未指定父工作目录，则默认为用户的主目录。在父工作目录中创建名为 `job-<AWS_BATCH_JOB_ID>` 的子文件夹。您可以使用此参数或 `--working-dir` 参数。

**-if *INPUT\$1FILE*, --input-file *INPUT\$1FILE***  
指定要传输到计算实例的文件（在作业的工作目录中）。您可以指定多个输入文件参数。

**-p *VCPUS*, --vcpus *VCPUS***  
指定要为容器保留的 v CPUs 数。与一起使用时`–nodes`，它会标识每个节点CPUs 的 v 数。  
默认值：1

**-m *MEMORY*, --memory *MEMORY***  
指定要为作业提供的内存的硬限制（以 MiB 为单位）。如果您的作业尝试超出此处指定的内存限制，则该作业将被结束。  
默认值：128

**-e *ENV*, --env *ENV***  
指定要导出到作业环境的环境变量名称的逗号分隔的列表。要导出所有环境变量，请指定“all”。请注意，“all”环境变量列表不包含 `–env-blacklist` 参数中列出的环境变量，或以 `PCLUSTER_*` 或 `AWS_*` 前缀开头的环境变量。

**-eb *ENV\$1DENYLIST*, --env-blacklist *ENV\$1DENYLIST***  
指定**不**会导出到作业环境的环境变量名称的逗号分隔的列表。默认情况下，不会导出 `HOME`、`PWD`、`USER`、`PATH`、`LD_LIBRARY_PATH`、`TERM` 和 `TERMCAP`。

**-r *RETRY\$1ATTEMPTS*, --retry-attempts *RETRY\$1ATTEMPTS***  
指定要让作业进入 `RUNNABLE` 状态的次数。可以指定 1 到 10 之间的尝试次数。如果尝试次数大于 1，则作业在失败后将重试，直到它进入 `RUNNABLE` 状态的次数达到指定值。  
默认值：1

**-t *TIMEOUT*, --timeout *TIMEOUT***  
指定持续时间（以秒为单位）（根据任务尝试`startedAt`的时间戳衡量），如果任务尚未完成，则该持续时间后 AWS Batch 将终止作业。超时值必须至少为 60 秒。

**-n *NODES*, --nodes *NODES***  
指定要为作业预留的节点数量。为此参数指定一个值，以启用多节点并行提交。  
当 [`Scheduler`](Scheduling-v3.md#yaml-Scheduling-Scheduler)/[`AwsBatchQueues`](Scheduling-v3.md#Scheduling-v3-AwsBatchQueues)/[`CapacityType`](Scheduling-v3.md#yaml-Scheduling-AwsBatchQueues-CapacityType) 参数设置为 `SPOT` 时，*不* 支持多节点并行作业。此外，您的账户中必须有 `AWSServiceRoleForEC2Spot` 服务相关角色。您可以使用以下 AWS CLI 命令创建此角色：  

```
$ aws iam create-service-linked-role --aws-service-name spot.amazonaws.com
```
有关更多信息，请参阅《适用于 Linux 实例的 Amazon Elastic Compute Cloud 用户指南》**中的[竞价型实例请求的服务相关角色](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html#service-linked-roles-spot-instance-requests)。

**-a *ARRAY\$1SIZE*, --array-size *ARRAY\$1SIZE***  
指示数组的大小。您可以指定 2 到 10000 之间的值。如果您为一个作业指定数组属性，该作业将变为数组作业。

**-d *DEPENDS\$1ON*, --depends-on *DEPENDS\$1ON***  
指定作业的依赖项的分号分隔的列表。一个作业可依赖于最多 20 个作业。您可以指定 `SEQUENTIAL` 类型依赖项，而不指定数组作业的作业 ID。顺序依赖项允许每个子数组作业按顺序完成，从索引 0 开始。您也可以使用数组作业的作业 ID 指定 N\$1TO\$1N 类型依赖项。N\$1TO\$1N 依赖项意味着此作业的每个子索引必须等待每个依赖项的相应子索引完成后才能开始。此参数的语法是 “jobid=*<string>*，type=*<string>*;...”。

# `awsbstat`
<a name="awsbatchcli.awsbstat-v3"></a>

显示集群的作业队列中提交的作业。

```
awsbstat [-h] [-c CLUSTER] [-s STATUS] [-e] [-d] [job_ids [job_ids ...]]
```

## 定位参数
<a name="awsbatchcli.awsbstat-v3.arguments"></a>

***job\$1ids***  
指定要在输出中显示的 IDs 以空格分隔的作业列表。如果作业是作业数组，则显示所有子作业。如果请求单个作业，则将以详细版本显示该作业。

## 命名的参数
<a name="awsbatchcli.awsbstat-v3.namedarguments"></a>

**-c *CLUSTER*, --cluster *CLUSTER***  
指示要使用的集群。

**-s *STATUS*, --status *STATUS***  
指定要包含的作业状态的逗号分隔的列表。默认作业状态为“活动”。接受的值为：`SUBMITTED`、`PENDING`、`RUNNABLE`、`STARTING`、`RUNNING`、`SUCCEEDED`、`FAILED` 和 `ALL`。  
默认值：“`SUBMITTED`,`PENDING`,`RUNNABLE`,`STARTING`,`RUNNING`”

**-e, --expand-children**  
展开具有子作业（数组和多节点并行）的作业。  
默认值：False

**-d, --details**  
显示作业详细信息。  
默认值：False

# `awsbout`
<a name="awsbatchcli.awsbout-v3"></a>

显示给定作业的输出。

```
awsbout [-h] [-c CLUSTER] [-hd HEAD] [-t TAIL] [-s] [-sp STREAM_PERIOD] job_id
```

## 定位参数
<a name="awsbatchcli.awsbout-v3.arguments"></a>

***job\$1id***  
指定作业 ID。

## 命名的参数
<a name="awsbatchcli.awsbout-v3.namedarguments"></a>

**-c *CLUSTER*, --cluster *CLUSTER***  
指示要使用的集群。

**-hd *HEAD*, --head *HEAD***  
获取任务输出的第一*HEAD*行。

**-t *TAIL*, --tail *TAIL***  
获取作业输出的最后几个 <tail> 行。

**-s, --stream**  
获取作业输出，然后等待生成其他输出。此参数可与 –tail 一起使用，以从作业输出的最新 <tail> 行开始。  
默认值：False

**-sp *STREAM\$1PERIOD*, --stream-period *STREAM\$1PERIOD***  
设置流式传输时段。  
默认：5

# `awsbkill`
<a name="awsbatchcli.awsbkill-v3"></a>

取消或终止集群中提交的作业。

```
awsbkill [-h] [-c CLUSTER] [-r REASON] job_ids [job_ids ... ]
```

## 定位参数
<a name="awsbatchcli.awsbkill-v3.arguments"></a>

***job\$1ids***  
指定要取消或终止的 IDs 以空格分隔的作业列表。

## 命名的参数
<a name="awsbatchcli.awsbkill-v3.namedarguments"></a>

**-c *CLUSTER*, --cluster *CLUSTER***  
指示要使用的集群的名称。

**-r *REASON*, --reason *REASON***  
指示要附加到作业的消息，并说明取消作业的原因。  
默认：”Terminated by the user”

# `awsbqueues`
<a name="awsbatchcli.awsbqueues-v3"></a>

显示与集群关联的作业队列。

```
awsbqueues [-h] [-c CLUSTER] [-d] [job_queues [job_queues ... ]]
```

## 定位参数
<a name="awsbatchcli.awsbqueues-v3.arguments"></a>

***job\$1queues***  
指定要显示的队列的空格分隔的列表。如果请求单个队列，则将以详细版本显示该队列。

## 命名的参数
<a name="awsbatchcli.awsbqueues-v3.namedarguments"></a>

**-c *CLUSTER*, --cluster *CLUSTER***  
指定要使用的集群的名称。

**-d, --details**  
指明是否显示队列的详细信息。  
默认值：False

# `awsbhosts`
<a name="awsbatchcli.awsbhosts-v3"></a>

显示属于集群的计算环境的主机。

```
awsbhosts [-h] [-c CLUSTER] [-d] [instance_ids [instance_ids ... ]]
```

## 定位参数
<a name="awsbatchcli.awsbhosts-v3.arguments"></a>

***instance\$1ids***  
指定以空格分隔的实例 IDs列表。如果请求单个实例，则将以详细版本显示该实例。

## 命名的参数
<a name="awsbatchcli.awsbhosts-v3.namedarguments"></a>

**-c *CLUSTER*, --cluster *CLUSTER***  
指定要使用的集群的名称。

**-d, --details**  
指示是否显示主机的详细信息。  
默认值：False

# 共享存储
<a name="shared-storage-quotas-integration-v3"></a>

AWS ParallelCluster [支持使用 [Amazon EBS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html)、[FSx ONTAP](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/what-is-fsx-ontap.html) 和 [FSx OpenZFS 共享存储卷、Amazon EF](https://docs.aws.amazon.com/fsx/latest/OpenZFSGuide/what-is-fsx.html)[S](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html) 和 [FSx Lustre](https://docs.aws.amazon.com/fsx/latest/LustreGuide/what-is.html) 共享存储文件系统或文件缓存。](https://docs.aws.amazon.com/fsx/latest/FileCacheGuide/what-is.html)我们建议您遵循 [AWS Well-Architected Framework 可靠性支柱](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/back-up-data.html)指南，备份您的卷和文件系统。

选择符合 HPC 应用程序 I/O 要求的存储系统。您可以根据具体用例优化每个文件系统。有关更多信息，请参阅[存储选项概述](https://docs.aws.amazon.com/whitepapers/latest/aws-overview/storage-services.html)。

**Amazon EBS 卷**附加到头节点，并通过 NFS 与计算节点共享。此选项可能具有成本效益，但随着存储需求的扩展，性能将取决于头节点资源。随着添加到集群中的计算节点越来越多以及吞吐量需求的增加，这可能会成为瓶颈。

**Amazon EFS 文件系统**会随着存储需求的变化而扩展。您可以为各种用例配置这些文件系统。可以使用 Amazon EFS 文件系统在集群上运行并行化且对延迟敏感的应用程序。

FSx f@@ **or Lustre 文件系统**可以以高达每秒数百 GB 的吞吐量、数百万的 IOPS 和亚毫秒的延迟处理海量数据集。 FSx 用于要求苛刻的高性能计算环境的 Lustre 文件系统。

在中[`SharedStorage` 部分](SharedStorage-v3.md)，您可以定义外部存储或 AWS ParallelCluster 托管存储：
+ **外部存储**是指您管理的现有卷或文件系统。 AWS ParallelCluster 不会创建或删除此存储空间。
+ **托管存储**是指 AWS ParallelCluster 创建并可以删除的卷或文件系统。

**外部存储**

您可以配置 AWS ParallelCluster 为在创建或更新集群时将外部存储连接到集群。同样，您可以将其配置为在删除或更新集群时将外部存储与集群分离。您的数据将被保留，您可以在集群生命周期之外将其用于长期永久性共享存储。

**注意**  
 3.8 AWS ParallelCluster 之前的版本不允许将外部管理的文件系统挂载到上。`/home`从 3.8 版开始， AWS ParallelCluster 允许使用 `/home` 作为外部托管文件系统的挂载点。`/home`通过将下方的[MountDir](SharedStorage-v3.md#yaml-SharedStorage-MountDir)参数指定`/home`为值，可以将外部托管的文件系统挂载到中。[`SharedStorage` 部分](SharedStorage-v3.md)  
 Amazon File Cache 不适合用作系统 `/home` 目录，因此目前不支持挂载 `/home`。  
 在配置选项[`SharedStorage` 部分](SharedStorage-v3.md)下指定`/home`目录时，将覆盖[SharedStorageType](HeadNode-v3.md#yaml-HeadNode-SharedStorageType)配置选项，这意味着[`SharedStorage` 部分](SharedStorage-v3.md)将改用下面的设置。  
 将外部文件系统挂载到`/home`目录时，会将头节点的`/home`内容 AWS ParallelCluster 复制到外部文件系统，而不会覆盖外部存储器上的现有文件。这包括为默认用户传输集群的 SSH 密钥（如果外部文件系统中没有）。有关更多信息，请参阅 [AWS ParallelCluster 共享存储注意事项](shared-storage-working-considerations-v3.md)。

**AWS ParallelCluster 托管存储**

AWS ParallelCluster 默认情况下，在配置中，托管存储取决于集群的生命周期。默认情况下，`SharedStorage` `DeletionPolicy` 配置参数设置为 `Delete`。

默认情况下，如果满足以下条件之一，则会删除 AWS ParallelCluster 托管文件系统或卷及其数据。
+ 您删除集群。
+ 您更改托管共享存储配置 `Name`。
+ 您从配置中删除托管共享存储。

将 `DeletionPolicy` 设置为 `Retain` 可保留您的托管共享文件系统或卷及数据。我们建议您定期备份数据，以避免数据丢失。您可以使用 [AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html) 集中管理所有存储选项的备份。

您可以使用配置设置删除生命周期依赖关系。有关更多信息，请参阅 [将 AWS ParallelCluster 托管存储转换为外部存储](shared-storage-conversion-v3.md)。

有关共享存储配额的信息，请参阅[共享存储的配额](shared-storage-quotas-v3.md)。

有关共享存储和切换到新 AWS ParallelCluster 版本的更多信息，请参阅[最佳实践：将集群移至新的 AWS ParallelCluster 次要版本或补丁版本](best-practices-v3.md#best-practices-cluster-upgrades-v3)。

您可以配置 AWS ParallelCluster 为在创建或更新集群时将外部存储连接到集群。同样，您可以将其配置为在删除或更新集群时将外部存储与集群分离。您的数据将被保留，您可以将其用于依赖于集群生命周期的长期永久性共享存储解决方案。

默认情况下，托管存储依赖于集群的生命周期。您可以使用[将 AWS ParallelCluster 托管存储转换为外部存储](shared-storage-conversion-v3.md)中所述的配置设置删除这种依赖关系。

通过特定的设置，您可以针对自己的用例优化支持的每种存储解决方案。

有关共享存储配额，请参阅[共享存储的配额](shared-storage-quotas-v3.md)。

有关共享存储和切换到新 AWS ParallelCluster 版本的更多信息，请参阅[最佳实践：将集群移至新的 AWS ParallelCluster 次要版本或补丁版本](best-practices-v3.md#best-practices-cluster-upgrades-v3)。

以下主题介绍如何为 AWS ParallelCluster 支持的每种存储服务配置共享存储。

**Topics**
+ [Amazon Elastic Block Store](shared-storage-config-ebs-v3.md)
+ [Amazon Elastic File System](shared-storage-config-efs-v3.md)
+ [亚马逊 f FSx or Lustre](shared-storage-config-fsxlustre-v3.md)
+ [针对 ONTAP、 FSx OpenZFS 和文件缓存共享存储进行配置 FSx](shared-storage-config-ontap-zfs-v3.md)
+ [在中使用共享存储 AWS ParallelCluster](shared-storage-considerations-v3.md)
+ [共享存储的配额](shared-storage-quotas-v3.md)

# Amazon Elastic Block Store
<a name="shared-storage-config-ebs-v3"></a>

要将现有的外部 Amazon EBS 卷用于独立于集群生命周期的长期永久性存储，请指定 [`EbsSettings`](SharedStorage-v3.md#SharedStorage-v3-EbsSettings)/[`VolumeId`](SharedStorage-v3.md#yaml-SharedStorage-EbsSettings-VolumeId)。

如果不指定 [`VolumeId`](SharedStorage-v3.md#yaml-SharedStorage-EbsSettings-VolumeId)，则在创建集群时， AWS ParallelCluster 会默认根据 [`EbsSettings`](SharedStorage-v3.md#SharedStorage-v3-EbsSettings) 创建托管 EBS 卷。在删除集群或从集群配置中删除卷时， AWS ParallelCluster 也会删除卷和数据。

对于 AWS ParallelCluster 托管的 EBS 卷，当集群被删除或从集群配置`Snapshot`中移除卷时，您可以使用 [`EbsSettings`](SharedStorage-v3.md#SharedStorage-v3-EbsSettings)/[`DeletionPolicy`](SharedStorage-v3.md#yaml-SharedStorage-EbsSettings-DeletionPolicy) AWS ParallelCluster 来`Delete`指示`Retain`、或该卷。默认情况下，将 `DeletionPolicy` 设置为 `Delete`。

**警告**  
对于 AWS ParallelCluster 托管共享存储，`Delete`默认设置`DeletionPolicy`为。  
这意味着如果满足以下条件之一，则会删除托管卷及其数据：  
您删除集群。
您更改托管共享存储配置 [`SharedStorage`](SharedStorage-v3.md)/[`Name`](SharedStorage-v3.md#yaml-SharedStorage-Name)。
您从配置中删除托管共享存储。
我们建议您定期使用快照备份共享存储，以避免数据丢失。有关 Amazon EBS 快照的更多信息，请参阅 *Amazon Elastic Compute Cloud 用户指南（适用于 Linux 实例）*中的 [Amazon EBS 快照](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSSnapshots.html)。要了解如何管理数据备份 AWS 服务，请参阅《*AWS Backup 开发人员指南》*中的 [AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html)。

# Amazon Elastic File System
<a name="shared-storage-config-efs-v3"></a>

要将现有的外部 Amazon EFS 文件系统用于集群生命周期之外的长期永久存储，请指定 [`EfsSettings`](SharedStorage-v3.md#SharedStorage-v3-EfsSettings)/[`FileSystemId`](SharedStorage-v3.md#yaml-SharedStorage-EfsSettings-FileSystemId)，默认情况下，从 AWS ParallelCluster 创建集群[`EfsSettings`](SharedStorage-v3.md#SharedStorage-v3-EfsSettings)时开始创建托管 Amazon EFS 文件系统。 AWS ParallelCluster 还会在删除群集或从群集配置中删除文件系统时删除文件系统和数据。

对于 AWS ParallelCluster 托管的 Amazon EFS 文件系统，您可以使用 [`EfsSettings`](SharedStorage-v3.md#SharedStorage-v3-EfsSettings)/[`DeletionPolicy`](SharedStorage-v3.md#yaml-SharedStorage-EfsSettings-DeletionPolicy)指示 AWS ParallelCluster 何时删除集群或何时将文件系统从集群配置中删除。`Delete` `Retain`默认情况下，将 `DeletionPolicy` 设置为 `Delete`。

**警告**  
对于 AWS ParallelCluster 托管共享存储，`Delete`默认设置`DeletionPolicy`为。  
这意味着如果满足以下条件之一，则会删除托管文件系统及其数据：  
您删除集群。
您更改托管共享存储配置 [`SharedStorage`](SharedStorage-v3.md)/[`Name`](SharedStorage-v3.md#yaml-SharedStorage-Name)。
您从配置中删除托管共享存储。
我们建议您定期备份共享存储，以避免数据丢失。有关如何备份单独 Amazon EFS 卷的更多信息，请参阅 *Amazon Elastic File System User Guide* 中的 [Backing up your Amazon EFS file systems](https://docs.aws.amazon.com/efs/latest/ug/efs-backup-solutions.html)。要了解如何管理数据备份 AWS 服务，请参阅《*AWS Backup 开发人员指南》*中的 [AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html)。

# 亚马逊 f FSx or Lustre
<a name="shared-storage-config-fsxlustre-v3"></a>

要将 Lustre 文件系统的现有外部 FSx 文件系统用于集群生命周期之外的长期永久存储，请指定 [`FsxLustreSettings`](SharedStorage-v3.md#SharedStorage-v3-FsxLustreSettings)/[`FileSystemId`](SharedStorage-v3.md#yaml-SharedStorage-FsxLustreSettings-FileSystemId)。

如果未指定 [`FsxLustreSettings`](SharedStorage-v3.md#SharedStorage-v3-FsxLustreSettings)/[`FileSystemId`](SharedStorage-v3.md#yaml-SharedStorage-FsxLustreSettings-FileSystemId)，则默认情况下， AWS ParallelCluster 会从创建集群[`FsxLustreSettings`](SharedStorage-v3.md#SharedStorage-v3-FsxLustreSettings)时开始创建 FSx 适用于 Lustre 的托管文件系统。 AWS ParallelCluster 还会在删除群集或从群集配置中删除文件系统时删除文件系统和数据。

 FSx 对于 AWS ParallelCluster 托管的 Lustre 文件系统，当集群被删除`Delete`或`Retain`从群集配置中删除文件系统时，您可以使用 [`FsxLustreSettings`](SharedStorage-v3.md#SharedStorage-v3-FsxLustreSettings)/[`DeletionPolicy`](SharedStorage-v3.md#yaml-SharedStorage-FsxLustreSettings-DeletionPolicy)来指示 AWS ParallelCluster 或文件系统。默认情况下，将 `DeletionPolicy` 设置为 `Delete`。

**警告**  
对于 AWS ParallelCluster 托管共享存储，`Delete`默认设置`DeletionPolicy`为。  
这意味着如果满足以下条件之一，则会删除托管文件系统及其数据：  
您删除集群。
您更改托管共享存储配置 [`SharedStorage`](SharedStorage-v3.md)/[`Name`](SharedStorage-v3.md#yaml-SharedStorage-Name)。
您从配置中删除托管共享存储。
我们建议您定期备份共享存储，以避免数据丢失。您可以在集群中使用 [`SharedStorage`](SharedStorage-v3.md)/[`FsxLustreSettings`](SharedStorage-v3.md#SharedStorage-v3-FsxLustreSettings)/[`AutomaticBackupRetentionDays`](SharedStorage-v3.md#yaml-SharedStorage-FsxLustreSettings-AutomaticBackupRetentionDays) 和 [`DailyAutomaticBackupStartTime`](SharedStorage-v3.md#yaml-SharedStorage-FsxLustreSettings-DailyAutomaticBackupStartTime) 来定义备份。要了解如何管理数据备份 AWS 服务，请参阅《*AWS Backup 开发人员指南》*中的 [AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html)。

# 针对 ONTAP、 FSx OpenZFS 和文件缓存共享存储进行配置 FSx
<a name="shared-storage-config-ontap-zfs-v3"></a>

对 FSx 于 ONTAP、 FSx OpenZFS 和文件缓存，您可以使用 [`FsxOntapSettings`[`FsxOpenZfsSettings`](SharedStorage-v3.md#SharedStorage-v3-FsxOpenZfsSettings)](SharedStorage-v3.md#SharedStorage-v3-FsxOntapSettings)/[`VolumeId`[`VolumeId`](SharedStorage-v3.md#yaml-SharedStorage-FsxOpenZfsSettings-VolumeId)](SharedStorage-v3.md#yaml-SharedStorage-FsxOntapSettings-VolumeId)、/和 [`FileCacheSettings`](SharedStorage-v3.md#SharedStorage-v3-FsxFileCacheSettings)/[`FileCacheId`](SharedStorage-v3.md#yaml-SharedStorage-FsxFileCacheSettings-FileCacheId)来指定为集群安装外部现有卷或文件缓存。

AWS ParallelCluster ONTAP、 FSx OpenZFS 和文件缓存不支持托管共享存储。 FSx 

# 在中使用共享存储 AWS ParallelCluster
<a name="shared-storage-considerations-v3"></a>

在以下各节中，您将学习如何使用 AWS ParallelCluster 和共享存储，包括共享存储注意事项以及如何将托管存储转换为外部存储。

**Topics**
+ [AWS ParallelCluster 共享存储注意事项](shared-storage-working-considerations-v3.md)
+ [将 AWS ParallelCluster 托管存储转换为外部存储](shared-storage-conversion-v3.md)

# AWS ParallelCluster 共享存储注意事项
<a name="shared-storage-working-considerations-v3"></a>

在 AWS ParallelCluster中使用共享存储时，请注意以下几点。
+ 使用 [AWS Backup](https://docs.aws.amazon.com/aws-backup/latest/devguide/whatisbackup.html) 或其他方法备份文件系统数据，以管理所有存储系统的备份。
+ 要添加共享存储，可在配置文件中添加共享存储部分，然后创建或更新集群。
+ 要删除共享存储，可从配置文件中删除共享存储部分并更新集群。
+ 要将现有的 AWS ParallelCluster 托管共享存储替换为新的托管存储，请更改 [`SharedStorage`](SharedStorage-v3.md)/的值[`Name`](SharedStorage-v3.md#yaml-SharedStorage-Name)并更新群集。
**警告**  
默认情况下，当您使用新`Name`参数执行集群更新时，会删除现有的 AWS ParallelCluster 托管存储空间和数据。如果您需要更改 `Name` 并保留现有的托管共享存储数据，请确保在更新集群之前将 `DeletionPolicy` 设置为 `Retain` 或备份数据。
+ 如果您没有备份 AWS ParallelCluster 托管存储数据`Delete`，`DeletionPolicy`则当您的集群被删除或从集群配置中移除托管存储并更新集群时，您的数据就会被删除。
+ 如果您没有备份 AWS ParallelCluster 托管存储数据`Retain`，`DeletionPolicy`则在删除集群之前您的文件系统将被分离，并且可以作为外部文件系统重新连接到另一个群集。将会保留您的数据。
+ 如果 AWS ParallelCluster 托管存储已从群集配置中移除`Retain`，`DeletionPolicy`则可以将其作为外部文件系统重新连接到群集，同时保留您的群集数据。
+ 从 AWS ParallelCluster 版本 3.4.0 开始，您可以通过配置 [`SharedStorage`](SharedStorage-v3.md)/[`EfsSettings`](SharedStorage-v3.md#SharedStorage-v3-EfsSettings)/[`EncryptionInTransit`](SharedStorage-v3.md#yaml-SharedStorage-EfsSettings-EncryptionInTransit)和[`IamAuthorization`](SharedStorage-v3.md#yaml-SharedStorage-EfsSettings-IamAuthorization)设置来增强 Amazon EFS 文件系统挂载的安全性。
+ 将外部文件系统挂载到 /home 目录时， AWS ParallelCluster 复制 head nod s /home directory to the external filesystem. It copies existing data in the /home directory without overwriting existing files or directories on the external storage. This includes the cluster's SSH key for the default user in case it does not already exist on the external filesystem. Consequently all other clusters that mount the same external filesystem to their respective /home e 目录的内容也将具有与集群默认用户相同的 SSH 密钥。
+ 在将同一个外部文件系统挂载到群集的 /home 目录的多集群环境中，当第一个群集将外部文件系统挂载到 /home 时，仅生成一次授予对在头节点上创建的计算节点的访问权限的 SSH 密钥。 AWS ParallelCluster所有其它集群都使用相同的 SSH 密钥。因此，任何拥有这些共享集群默认用户的 SSH 密钥的人都可以访问任何集群。所有计算节点都允许使用最初生成的密钥进行连接。

# 将 AWS ParallelCluster 托管存储转换为外部存储
<a name="shared-storage-conversion-v3"></a>

了解如何将 AWS ParallelCluster 托管存储转换为外部存储。

操作步骤基于下面的示例配置文件代码段。

```
...
  - MountDir: /fsx
    Name: fsx
    StorageType: FsxLustre
    FsxLustreSettings:
      StorageCapacity: 1200
      DeletionPolicy: Delete
...
```

**将 AWS ParallelCluster 托管存储转换为外部存储**

1. 在集群配置文件中将 `DeletionPolicy` 设置为 `Retain`。

   ```
   ...
      - MountDir: /fsx
        Name: fsx
        StorageType: FsxLustre
        FsxLustreSettings:
          StorageCapacity: 1200
          DeletionPolicy: Retain
   ...
   ```

1. 要设置 `DeletionPolicy` 更改，请运行以下命令。

   ```
   pcluster update-cluster -n cluster-name -c cluster-config.yaml
   ```

1. 从集群配置文件中删除 `SharedStorage` 部分。

   ```
   ...
   ...
   ```

1. 要将托管 `SharedStorage` 更改为外部 `SharedStorage` 并将其与集群分离，请运行以下命令。

   ```
   pcluster update-cluster -n cluster-name -c cluster-config.yaml
   ```

1. 您的共享存储现在变为了外部共享存储，并且已与集群分离。

1. 要将外部文件系统附加到原始集群或其他集群，请按照以下步骤操作。

   1. 获取 L FSx ustre 文件系统 ID。

      1. 要使用，请 AWS CLI 运行以下命令并找到名称包含原始群集名称的文件系统并记下文件系统 ID。

         ```
         aws fsx describe-file-systems
         ```

      1. 要使用 AWS 管理控制台，请登录并导航到[https://console.aws.amazon.com/fsx/](https://console.aws.amazon.com/fsx/)。在文件系统列表中，找到名称中包含原始集群名称的文件系统，并记下文件系统 ID。

   1. 更新文件系统安全组规则，以提供访问该文件系统和集群子网以及从该文件系统和集群子网进行访问的权限。您可以在 Amazon FSx 控制台中找到文件系统安全组的名称和 ID。

      向文件系统安全组中添加规则，允许针对头节点和计算节点 IP CIDR 范围或前缀的入站和出站 TCP 流量。为入站和出站 TCP 流量指定 TCP 端口 988、1021、1022 和 1023。

      有关更多信息，请参阅*版本 2 AWS Command Line Interface 用户指南 EC2 *中的 [`SharedStorage`[`FsxLustreSettings`](SharedStorage-v3.md#SharedStorage-v3-FsxLustreSettings)](SharedStorage-v3.md)//[`FileSystemId`](SharedStorage-v3.md#yaml-SharedStorage-FsxLustreSettings-FileSystemId)[和为 Amazon 创建、配置和删除安全组](https://docs.aws.amazon.com/cli/latest/userguide/cli-services-ec2-sg.html)。

   1. 将 `SharedStorage` 部分添加到集群配置中。

      ```
      ...
         - MountDir: /fsx
           Name: fsx-external
           StorageType: FsxLustre
           FsxLustreSettings:
             FileSystemId: fs-02e5b4b4abd62d51c
      ...
      ```

   1. 要向集群中添加外部共享，请运行以下命令。

      ```
      pcluster update-cluster -n cluster-name -c cluster-config.yaml
      ```

# 共享存储的配额
<a name="shared-storage-quotas-v3"></a>

根据下表中所列的配额，可以将集群 `SharedStorage` 配置为挂载现有的共享文件存储和创建新的共享文件存储。


**每个集群的挂载文件存储配额**  

| 文件共享存储类型 | AWS ParallelCluster 托管存储 | 外部存储 | 净总配额 | 
| --- | --- | --- | --- | 
|  Amazon EBS  |  5  |  5  |  5  | 
|  RAID  |  1  |  0  |  1  | 
|  Amazon EFS  |  1  |  20  |  21  | 
|  亚马逊 FSx †  |  1 代表 L FSx ustre  |  20  |  21  | 

**注意**  
此配额表已在 3.2.0 AWS ParallelCluster 版本中添加。

† AWS ParallelCluster 仅支持安装 FSx 适用于 NetApp ONTAP 的现有亚马逊、适用 FSx 于 OpenZFS 的亚马逊和文件缓存系统。它不支持 FSx 为 ONTAP、 FSx OpenZFS 和文件缓存系统创建新的内容。

**注意**  
如果您 AWS Batch 用作调度程序， FSx 则 Lustre 仅在群集头节点上可用。  
文件缓存不支持 AWS Batch 调度程序。

# AWS ParallelCluster 资源和标记
<a name="resources-tags-v3"></a>

 AWS ParallelCluster 您可以使用创建标签来跟踪和管理您的 AWS ParallelCluster 资源。您可以在群集配置文件中定义 AWS CloudFormation 要创建并传播到所有群集资源的标签。[`Tags` 部分](Tags-v3.md)您还可以使用 AWS ParallelCluster 自动生成的标签来跟踪和管理您的资源。

创建集群时，该集群及其资源将使用本节中定义的 AWS ParallelCluster 和 AWS 系统标签进行标记。

AWS ParallelCluster 将标签应用于集群实例、卷和资源。要识别集群堆栈，请 AWS CloudFormation 将 AWS 系统标签应用于集群实例。为了标识集群 Amazon EC2 启动模板，Amazon EC2 将对实例应用系统标签。您可以使用这些标签来查看和管理您的 AWS ParallelCluster 资源。

**警告**  
所有 AWS ParallelCluster 标签都是必不可少的，不得对其进行修改，以免影响系统功能。因此，您无法修改 AWS 系统标签。

以下是 AWS ParallelCluster 资源的 AWS 系统标签示例。

```
"aws:cloudformation:stack-name"="clustername"
```

以下是应用于资源的 AWS ParallelCluster 标签的示例。

```
"parallelcluster:cluster-name"="clustername"
```

您可以在 AWS 管理控制台的 Amazon EC2 部分查看这些标签。

# 查看标签
<a name="view-tagging"></a>

完成以下步骤，在 AWS 管理控制台的 Amazon EC2 部分查看标签。

查看标签

1. 访问 Amazon EC2 控制台，网址为[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 要查看所有集群标签，请在导航窗格中选择**标签**。

1. 要按实例查看集群标签，请在导航窗格中选择**实例**。

1. 选择一个集群实例。

1. 在实例详细信息中选择**管理标签**选项卡并查看标签。

1. 在实例详细信息中选择**存储**选项卡。

1. 选择**卷 ID**。

1. 在**卷**中，选择该卷。

1. 在卷详细信息中选择**标签**选项卡并查看标签。


**AWS ParallelCluster 头节点实例标签**  

| Key | 标签值 | 
| --- | --- | 
|  `parallelcluster:cluster-name`  |  `clustername`  | 
|  `Name`  |  `HeadNode`  | 
|  `aws:ec2launchtemplate:id`  |  `lt-1234567890abcdef0`  | 
|  `aws:ec2launchtemplate:version`  |  `1`  | 
|  `parallelcluster:node-type`  |  `HeadNode`  | 
|  `aws:cloudformation:stack-name`  |  `clustername`  | 
|  `aws:cloudformation:logical-id`  |  `HeadNode`  | 
|  `aws:cloudformation:stack-id`  |  `arn:aws:cloudformation:region-id:ACCOUNTID:stack/clustername/1234abcd-12ab-12ab-12ab-1234567890abcdef0`  | 
|  `parallelcluster:version`  |  `3.15.0`  | 


**AWS ParallelCluster 头节点根卷标签**  

| 标签密钥 | 标签值 | 
| --- | --- | 
|  `parallelcluster:cluster-name`  |  `clustername`  | 
|  `parallelcluster:node-type`  |  `HeadNode`  | 
|  `parallelcluster:version`  |  `3.15.0`  | 


**AWS ParallelCluster 计算节点实例标签**  

| Key | 标签值 | 
| --- | --- | 
|  `parallelcluster:cluster-name`  |  `clustername`  | 
|  `parallelcluster:compute-resource-name`  |  `compute-resource-name`  | 
|  `aws:ec2launchtemplate:id`  |  `lt-1234567890abcdef0`  | 
|  `aws:ec2launchtemplate:version`  |  `1`  | 
|  `parallelcluster:node-type`  |  `Compute`  | 
|  `parallelcluster:queue-name`  |  `queue-name`  | 
|  `parallelcluster:version`  |  `3.15.0`  | 


**AWS ParallelCluster 计算节点根卷标签**  

| 标签密钥 | 标签值 | 
| --- | --- | 
|  `parallelcluster:cluster-name`  |  `clustername`  | 
|  `parallelcluster:compute-resource-name`  |  `compute-resource-name`  | 
|  `parallelcluster:node-type`  |  `Compute`  | 
|  `parallelcluster:queue-name`  |  `queue-name`  | 
|  `parallelcluster:version`  |  `3.15.0`  | 


**PCUI 标签**  

| 标签密钥 | 标签值 | 
| --- | --- | 
|  `parallelcluster-ui`  |  `true`  | 

# 监控 AWS ParallelCluster 和日志
<a name="monitoring-overview"></a>

监控是维护和其他 AWS 解决方案的可靠性、可用性和性能的重要组成部分。 AWS ParallelCluster AWS 提供以下监控工具 AWS ParallelCluster，供您监视、报告问题并在适当时自动采取措施：
+ *Amazon* 会实时 CloudWatch监控您的 AWS 资源和您运行 AWS 的应用程序。您可以收集和跟踪指标，创建自定义的控制平面，以及设置警报以在指定的指标达到您指定的阈值时通知您或采取措施。例如，您可以 CloudWatch 跟踪您的 Amazon EC2 实例的 CPU 使用率或其他指标，并在需要时自动启动新实例。有关更多信息，请参阅 [Amazon CloudWatch 用户指南](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/)。
+ *Amazon Lo CloudWatch gs* 使您能够监控、存储和访问来自亚马逊 EC2 实例和其他来源的日志文件。 CloudTrail CloudWatch 日志可以监视日志文件中的信息，并在达到特定阈值时通知您。您还可以在高持久性存储中检索您的日志数据。有关更多信息，请参阅 [Amazon CloudWatch 日志用户指南](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/)。
+ *AWS CloudTrail* 捕获由您的 AWS 账户 或代表该账户发出的 API 调用和相关事件，并将日志文件传输到您指定的 Amazon S3 桶。您可以标识哪些用户和账户调用了 AWS、发出调用的源 IP 地址以及调用的发生时间。有关更多信息，请参阅 [AWS CloudTrail 《用户指南》](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)。
+ *Amazon EventBridge* 是一项无服务器事件总线服务，可以轻松地将您的应用程序与来自各种来源的数据连接起来。 EventBridge 提供来自您自己的应用程序、 Software-as-a-Service (SaaS) 应用程序和 AWS 服务的实时数据流，并将这些数据路由到 Lambda 等目标。这使您能够监控服务中发生的事件，并构建事件驱动的架构。有关更多信息，请参阅 [Amazon EventBridge 用户指南](https://docs.aws.amazon.com/eventbridge/latest/userguide/)。

**Topics**
+ [与 Amazon CloudWatch 日志集成](cloudwatch-logs-v3.md)
+ [亚马逊 CloudWatch 控制面板](cloudwatch-dashboard-v3.md)
+ [Amazon 针对集群指标的 CloudWatch 警报](cloudwatch-alarms-v3.md)
+ [AWS ParallelCluster 配置的日志轮换](log-rotation-v3.md)
+ [`pcluster` CLI 日志](troubleshooting-v3-pc-cli-logs.md)
+ [Amazon EC2 控制台输出日志](console-logs-v3.md)
+ [检索 PCUI 和 AWS ParallelCluster 运行时日志](troubleshooting-v3-get-runtime-logs.md)
+ [检索和保留日志](troubleshooting-v3-get-logs.md)

# 与 Amazon CloudWatch 日志集成
<a name="cloudwatch-logs-v3"></a>

有关 CloudWatch 日志的更多信息，请参阅 [Amazon CloudWatch 日志用户指南](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/)。要配置 CloudWatch 日志集成，请参阅一[`Monitoring`](Monitoring-v3.md)节。要了解如何使用将自定义日志附加到 CloudWatch 配置中`append-config`，请参阅 *Amazon CloudWatch 用户指南*中的[多个 CloudWatch 代理配置文件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-common-scenarios.html#CloudWatch-Agent-multiple-config-files)。

## Amazon CloudWatch 日志集群日志
<a name="cloudwatch-logs-clusters"></a>

将为每个集群创建一个名为 `/aws/parallelcluster/cluster-name-<timestamp>` 的日志组（例如 `/aws/parallelcluster/testCluster-202202050215`）。每个节点上的每个日志（如果路径包含 `*`，则为一组日志）都有一个名为 `{hostname}.{instance_id}.{logIdentifier}` 的日志流。（例如 `ip-172-31-10-46.i-02587cf29cc3048f3.nodewatcher`。） 日志数据 CloudWatch 由代理发送到，该[CloudWatch 代理](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html)像`root`在所有集群实例上一样运行。

Amazon CloudWatch 控制面板是在创建集群时创建的。此仪表板使您能够查看存储在日志中的 CloudWatch 日志。有关更多信息，请参阅 [亚马逊 CloudWatch 控制面板](cloudwatch-dashboard-v3.md)。

此列表包含平台*logIdentifier*、调度器和节点可用的日志流的和路径。


**适用于平台、调度器和节点的日志流**  

| 平台 | 调度器 | Nodes | 日志流 | 
| --- | --- | --- | --- | 
|  amazon redhat ubuntu  |  awsbatch slurm  |  HeadNode  |  dcv-authenticator：`/var/log/parallelcluster/pcluster_dcv_authenticator.log` dcv-ext-authenticator: `/var/log/parallelcluster/pcluster_dcv_connect.log` dcv-agent：`/var/log/dcv/agent.*.log` dcv-xsession：`/var/log/dcv/dcv-xsession.*.log` dcv-server：`/var/log/dcv/server.log` dcv-session-launcher: `/var/log/dcv/sessionlauncher.log` Xdcv：`/var/log/dcv/Xdcv.*.log` cfn-init：`/var/log/cfn-init.log` chef-client：`/var/log/chef-client.log`  | 
|  amazon redhat ubuntu  |  awsbatch slurm  |  ComputeFleet HeadNode  |  cloud-init：`/var/log/cloud-init.log` supervisord：`/var/log/supervisord.log`  | 
|  amazon redhat ubuntu  |  slurm  |  ComputeFleet  |  cloud-init-output: `/var/log/cloud-init-output.log` computemgtd：`/var/log/parallelcluster/computemgtd` slurmd：`/var/log/slurmd.log` slurm\$1prolog\$1epilog：`/var/log/parallelcluster/slurm_prolog_epilog.log`  | 
|  amazon redhat ubuntu  |  slurm  |  HeadNode  |  sssd：`/var/log/sssd/sssd.log` sssd\$1domain\$1default：`/var/log/sssd/sssd_default.log` pam\$1ssh\$1key\$1generator：`/var/log/parallelcluster/pam_ssh_key_generator.log` clusterstatusmgtd：`/var/log/parallelcluster/clusterstatusmgtd` clustermgtd：`/var/log/parallelcluster/clustermgtd` compute\$1console\$1output：`/var/log/parallelcluster/compute_console_output` slurm\$1resume：`/var/log/parallelcluster/slurm_resume.log` slurm\$1suspend：`/var/log/parallelcluster/slurm_suspend.log` slurmctld：`/var/log/slurmctld.log` slurm\$1fleet\$1status\$1manager：`/var/log/parallelcluster/slurm_fleet_status_manager.log`  | 
|  amazon redhat  |  awsbatch slurm  |  ComputeFleet HeadNode  |  system-messages：`/var/log/messages`  | 
|  ubuntu  |  awsbatch slurm  |  ComputeFleet HeadNode  |  syslog：`/var/log/syslog`  | 

使用集群中的作业将达到`RUNNING``SUCCEEDED`、或状态的作业的输出 AWS Batch 存储`FAILED`在 CloudWatch 日志中。日志组为 `/aws/batch/job`，日志流名称格式为 `jobDefinitionName/default/ecs_task_id`。默认情况下，这些日志设置为不过期，但您可以修改保留期。有关更多信息，请参阅《*Amazon 日志用户指南》中的 “ CloudWatch 日志” 中的更改 CloudWatch 日志*[数据保留期](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SettingLogRetention.html)。

## Amazon CloudWatch Logs 生成镜像日志
<a name="cloudwatch-logs-build-images"></a>

将为每个自定义构建映像创建名为 `/aws/imagebuilder/ParallelClusterImage-<image-id>` 的日志组。名为 *\$1pcluster-version\$1* /1 的唯一日志流包含构建映像过程的输出。

您可以使用 [`pcluster`](pcluster-v3.md) 映像命令访问这些日志。有关更多信息，请参阅 [AWS ParallelCluster AMI 自定义](custom-ami-v3.md)。

# 亚马逊 CloudWatch 控制面板
<a name="cloudwatch-dashboard-v3"></a>

Amazon CloudWatch 控制面板是在创建集群时创建的。这样可以更轻松地监控集群中的节点和查看 Amazon Logs 中存储的 CloudWatch 日志。仪表板的名称是`ClusterName-Region`。 *ClusterName*是您的集群的名称，*Region*也是集群所在 AWS 区域 的名称。您可以在控制台中访问控制面板，也可以通过打开 `https://console.aws.amazon.com/cloudwatch/home?region=Region#dashboards:name=ClusterName-Region` 来访问控制面板。

下图显示了集群的示例 CloudWatch 仪表板。

 ![\[Dashboard graphs of the status of cluster resources.\]](http://docs.aws.amazon.com/zh_cn/parallelcluster/latest/ug/images/CW-dashboard.png) 

**头节点实例指标**

控制面板的第一部分显示了头节点 Amazon EC2 指标的图表。

如果您的集群具有共享存储，则下一部分将显示共享存储指标。

**集群运行状况指标**

如果您的集群使用 Slurm 在调度方面，集群运行状况指标图表显示集群计算节点的实时错误。有关更多信息，请参阅 [集群运行状况指标故障排除](troubleshooting-v3-cluster-health-metrics.md)。从 3.6.0 AWS ParallelCluster 版开始，集群运行状况指标已添加到控制面板中。

**头节点日志**

最后一部分列出了按 AWS ParallelCluster日志、调度程序日志、Amazon DCV 集成日志和系统日志分组的主节点日志。

有关亚马逊 CloudWatch 控制面板的更多信息，请参阅[亚马逊* CloudWatch 用户指南中的使用亚马逊 CloudWatch *控制面板](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

如果您不想创建亚马逊 CloudWatch 控制面板，可以通过将 [`Monitoring`](Monitoring-v3.md)//[`Dashboards`[`CloudWatch`](Monitoring-v3.md#yaml-Monitoring-Dashboard-CloudWatch)](Monitoring-v3.md#yaml-Monitoring-Dashboards)/设置[`Enabled`](Monitoring-v3.md#yaml-Monitoring-Dashboard-CloudWatch-Enabled)为将其关闭`false`。

**注意**  
如果您禁用创建亚马逊 CloudWatch 控制面板，则还会禁用集群的亚马逊 CloudWatch `disk_used_percent`和`memory_used_percent`警报。有关更多信息，请参阅 [Amazon 针对集群指标的 CloudWatch 警报](cloudwatch-alarms-v3.md)。  
从 3.6 AWS ParallelCluster 版开始添加`disk_used_percent`和`memory_used_percent`警报。

# Amazon 针对集群指标的 CloudWatch 警报
<a name="cloudwatch-alarms-v3"></a>

AWS ParallelCluster 配置 Amazon CloudWatch 警报以监控头节点的运行状况和资源利用率。警报是命名的`cluster-name-HeadNode-metric`，其中*cluster-name*是您的集群的名称，*metric*用于标识正在监控的指标。

在导航窗格中选择警报，即可访问 CloudWatch 控制台中的**警报**。

当任何单个头节点警报触发时，名为的复合警报`cluster-name-HeadNode`进入`ALARM`状态。

## 磁盘和内存警报
<a name="cloudwatch-alarms-v3-disk-mem"></a>

从 3.6.0 AWS ParallelCluster 版开始，将创建以下 CloudWatch 警报：
+ `cluster-name-HeadNode-Disk`— 监视根音量`disk_used_percent`指标。进入在 1 分钟内有 1 个数据点的磁盘使用率超过 90% 时的`ALARM`状态。
+ `cluster-name-HeadNode-Mem`— 监控`mem_used_percent`指标。在 1 分钟内，1 个数据点的内存使用率大于 90% 时进入`ALARM`状态。

有关更多信息，请参阅 *Amazon CloudWatch 用户指南*[中的 CloudWatch代理收集的指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/metrics-collected-by-CloudWatch-agent.html)。

## Health 检查和 CPU 警报
<a name="cloudwatch-alarms-v3-health-cpu"></a>

从 3.8.0 AWS ParallelCluster 版开始，将创建以下 CloudWatch 警报：
+ `cluster-name-HeadNode-Health`— 监控 Amazon EC2 `StatusCheckFailed` 指标。在 1 分钟时间段内，1 个数据点的值大于 0 时进入`ALARM`状态。
+ `cluster-name-HeadNode-Cpu`— 监控 Amazon EC2 `CPUUtilization` 指标。在 1 分钟内，1 个数据点的 CPU 利用率大于 90% 时进入`ALARM`状态。

## 集群管理守护程序心跳警报
<a name="cloudwatch-alarms-v3-clustermgtd"></a>

从 AWS ParallelCluster 版本 3.15.0 开始，当启用 Amazon CloudWatch 日志记录并使用Slurm计划程序时，会创建以下警报：
+ `cluster-name-HeadNode-ClustermgtdHeartbeat`— 监控命`ParallelCluster`名空间中的`ClustermgtdHeartbeat`指标。当在 1 分钟内连续 10 个数据点收到的心跳少于 1 次时，警报就会进入`ALARM`状态。丢失的数据被视为泄露。

**注意**  
所有警报均以对称方式恢复：触发警报的相同数据点和评估周期也控制着恢复。例如，在同一观察周期内，具有 1 个数据点的警报在 1 个正常数据点后恢复，同样，`ClustermgtdHeartbeat`警报需要连续 10 个良好的数据点（10 分钟）才能返回`OK`。

**注意**  
AWS ParallelCluster 不配置警报动作。有关如何设置警报操作（例如发送通知）的信息，请参阅[警报操作](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html#alarms-and-actions)。有关亚马逊 CloudWatch 警报的更多信息，请参阅[亚马逊* CloudWatch 用户指南中的使用亚马逊 CloudWatch *警报](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)。  
对于 3.8.0 及更高 AWS ParallelCluster 版本，请在集群配置`false`中将 [`Monitoring`](Monitoring-v3.md)/[`Alarms`](Monitoring-v3.md#yaml-Monitoring-Alarms)/设置[`Enabled`](Monitoring-v3.md#yaml-Monitoring-Alarms-Enabled)为来禁用警报。  
对于 3.8.0 之前的 AWS ParallelCluster 版本，请在集群配置`false`中将 [`Monitoring`](Monitoring-v3.md)//[`Dashboards`[`CloudWatch`](Monitoring-v3.md#yaml-Monitoring-Dashboard-CloudWatch)](Monitoring-v3.md#yaml-Monitoring-Dashboards)/设置[`Enabled`](Monitoring-v3.md#yaml-Monitoring-Dashboard-CloudWatch-Enabled)为来禁用警报。请注意，此设置还会禁用 Amazon CloudWatch 控制面板。有关更多[亚马逊 CloudWatch 控制面板](cloudwatch-dashboard-v3.md)详细信息，请参阅。

# AWS ParallelCluster 配置的日志轮换
<a name="log-rotation-v3"></a>

 AWS ParallelCluster 日志轮换配置位于`/etc/logrotate.d/parallelcluster_*_log_rotation`文件中。当配置的日志轮换时，当前日志内容将保留在单个备份中，清空的日志将恢复日志记录。

配置的每个日志仅保留 1 个备份。

AWS ParallelCluster 将快速增长的日志配置为在大小达到 50 MB 时进行轮换。快速增长的日志与扩展有关 Slurm，包括`/var/log/parallelcluster/clustermgtd``/var/log/parallelcluster/slurm_resume.log`、和`/var/log/slurmctld.log`。

AWS ParallelCluster 将增长缓慢的日志配置为在大小达到 10 MB 时进行轮换。

在启用日志记录的情况下，您可以查看在集群配置 [`Logs`](Monitoring-v3.md#yaml-Monitoring-Logs)/[`CloudWatch`](Monitoring-v3.md#yaml-Monitoring-Logs-CloudWatch)/[`RetentionInDays`](Monitoring-v3.md#yaml-Monitoring-Logs-CloudWatch-RetentionInDays)设置中定义的天数内保留的较早日 CloudFormation 志。检查 `RetentionInDays` 设置，查看您的用例是否需要增加天数。

AWS ParallelCluster 配置和轮换以下日志：

**头节点日志**

```
/var/log/cloud-init.log
/var/log/supervisord.log
/var/log/cfn-init.log
/var/log/chef-client.log
/var/log/dcv/server.log
/var/log/dcv/sessionlauncher.log
/var/log/dcv/agent.*.log
/var/log/dcv/dcv-xsession.*.log
/var/log/dcv/Xdcv.*.log
/var/log/parallelcluster/pam_ssh_key_generator.log
/var/log/parallelcluster/clustermgtd
/var/log/parallelcluster/clusterstatusmgtd
/var/log/parallelcluster/slurm_fleet_status_manager.log
/var/log/parallelcluster/slurm_resume.log
/var/log/parallelcluster/slurm_suspend.log
/var/log/slurmctld.log
/var/log/slurmdbd.log
/var/log/parallelcluster/compute_console_output.log
```

**计算节点日志**

```
/var/log/cloud-init.log
/var/log/supervisord.log
/var/log/cloud-init-output.log
/var/log/parallelcluster/computemgtd
/var/log/slurmd.log
```

**登录节点日志**

```
/var/log/cloud-init.log
/var/log/cloud-init.log
/var/log/cloud-init-output.log
/var/log/supervisord.log
/var/log/parallelcluster/pam_ssh_key_generator.log
```

# `pcluster` CLI 日志
<a name="troubleshooting-v3-pc-cli-logs"></a>

`pcluster` CLI 将您的命令的日志写入 `/home/user/.parallelcluster/` 下的 `pcluster.log.#` 文件中。

对于每条命令，日志通常都包括带输入的命令、用于发出该命令的 CLI API 版本的副本、响应以及信息和错误消息。对于创建和生成命令，日志还包括配置文件、配置文件验证操作、 CloudFormation 模板和堆栈命令。

您可以使用这些日志来验证错误、输入、版本和 `pcluster` CLI 命令。它们还可以记录发出命令的时间。

# Amazon EC2 控制台输出日志
<a name="console-logs-v3"></a>

当 AWS ParallelCluster 检测到静态计算节点实例意外终止时，它会在一段时间后尝试从已终止的节点实例中检索 Amazon EC2 控制台输出。这样，如果计算节点无法与 Amazon 通信 CloudWatch，仍然可以从控制台输出中检索有关节点终止原因的有用故障排除信息。此控制台输出记录在头节点的 `/var/log/parallelcluster/compute_console_output` 日志中。有关亚马逊 EC2 控制台输出的更多信息，请参阅亚马逊 *Linux 实例 EC2 用户指南中的实例*[控制台输出](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-console.html#instance-console-console-output)。

默认情况下， AWS ParallelCluster 仅从已终止节点的示例子集中检索控制台输出。在有大量终止导致多个控制台输出请求的情况下，这可防止集群头节点不堪重负。默认情况下， AWS ParallelCluster 在终止检测和控制台输出检索之间等待 5 分钟，让 Amazon 有 EC2 时间从节点检索最终的控制台输出。

您可以在头节点上的 `/etc/parallelcluster/slurm_plugin/parallelcluster_clustermgtd.conf` 文件中编辑样本量和等待时间参数值。

此功能已在 3.5.0 AWS ParallelCluster 版本中添加。

## Amazon EC2 控制台输出参数
<a name="console-logs-parameters-v3"></a>

您可以在头节点`/etc/parallelcluster/slurm_plugin/parallelcluster_clustermgtd.conf`的文件中编辑以下 Amazon EC2 控制台输出参数的值。

### `compute_console_logging_enabled`
<a name="console-logs-enable-v3"></a>

要禁用控制台输出日志收集，请将 `compute_console_logging_enabled` 设置为 `false`。默认值为 `true`。

您可以随时更新此参数，而无需停止计算实例集。

### `compute_console_logging_max_sample_size`
<a name="console-logs-max-sample-size-v3"></a>

`compute_console_logging_max_sample_size`设置每次检测到意外终止时从中 AWS ParallelCluster 收集控制台输出的最大计算节点数。如果此值小于`1`，则从所有终止的节点 AWS ParallelCluster 检索控制台输出。默认值为 `1`。

您可以随时更新此参数，而无需停止计算实例集。

### `compute_console_wait_time`
<a name="console-logs-wait-time-v3"></a>

`compute_console_wait_time`设置从检测到节点故障到从该节点收集控制台输出之间 AWS ParallelCluster 等待的时间（以秒为单位）。如果您确定 Amazon EC2 需要更多时间来收集已终止节点的最终输出，则可以延长等待时间。默认值为 300 秒（5 分钟）。

您可以随时更新此参数，而无需停止计算实例集。

# 检索 PCUI 和 AWS ParallelCluster 运行时日志
<a name="troubleshooting-v3-get-runtime-logs"></a>

了解如何检索 PCUI 和 AWS ParallelCluster 运行时日志以进行故障排除。首先，找到相关的 PCUI 和 AWS ParallelCluster 堆栈名称。使用堆栈名称找到安装日志组。最后，导出日志。这些日志特定于 AWS ParallelCluster 运行时系统。有关集群日志，请参阅[检索和保留日志](troubleshooting-v3-get-logs.md)。

**先决条件**
+  AWS CLI 已安装。
+ 您拥有在 PCUI 开启 AWS 账户 的上运行 AWS CLI 命令的凭据。
+ 您可以在 PCUI 处于开启状态 AWS 账户 的上访问亚马逊 CloudWatch 控制台。

## 步骤 1：找到相关堆栈的堆栈名称
<a name="pcui-install-logs-v3-step-1"></a>

在以下示例中，将红色突出显示的文本替换为实际值。

使用安装 PCUI 的 AWS 区域 位置列出堆栈：

```
$ aws cloudformation list-stacks --region aws-region-id
```

请注意以下堆栈的堆栈名称：
+ 在您的账户中部署 PCUI 的堆栈的名称。您在安装 PCUI 时输入了该名称；例如 `pcluster-ui`。
+ 以您输入的 AWS ParallelCluster 堆栈名称为前缀的堆栈；例如，`pcluster-ui-ParallelClusterApi-ABCD1234EFGH`。

## 步骤 2：找到日志组
<a name="pcui-install-logs-v3-step-2"></a>

列出 PCUI 堆栈的日志组，如以下示例所示：

```
$ aws cloudformation describe-stack-resources \
   --region aws-region-id \
   --stack-name pcluster-ui \
   --query "StackResources[?ResourceType == 'AWS::Logs::LogGroup' && (LogicalResourceId == 'ApiGatewayAccessLog' || LogicalResourceId == 'ParallelClusterUILambdaLogGroup')].PhysicalResourceId" \
   --output text
```

列出 AWS ParallelCluster API 堆栈的日志组，如以下示例所示：

```
$ aws cloudformation describe-stack-resources \
   --region aws-region-id \
   --stack-name pcluster-ui-ParallelCluster-Api-ABCD1234EFGH \
   --query "StackResources[?ResourceType == 'AWS::Logs::LogGroup' && LogicalResourceId == 'ParallelClusterFunctionLogGroup'].PhysicalResourceId" \
   --output text
```

记下日志组列表，以便在下一个步骤中使用。

## 步骤 3：导出日志
<a name="pcui-install-logs-v3-step-3"></a>

使用以下步骤收集并导出日志：

1. 登录 AWS 管理控制台，然后在 PCUI 已开启的上导航到 [Amazon CloudWatch](https://console.aws.amazon.com/cloudwatch/) 控制台。 AWS 账户 

1. 在导航窗格上，依次选择**日志**和 **日志见解**。

1. 选择上一步中列出的所有日志组。

1. 选择时间范围，例如 12 小时。

1. 运行以下查询：

   ```
   $ fields @timestamp, @message
   | sort @timestamp desc
   | limit 10000
   ```

1. 选择**导出结果**、**下载表 (JSON)**。

# 检索和保留日志
<a name="troubleshooting-v3-get-logs"></a>

AWS ParallelCluster 为计算实例 HeadNode 和存储创建 Amazon EC2 指标。您可以在控制台的**自定义 CloudWatch 控制面板**中查看指标。 AWS ParallelCluster 还会在 CloudWatch 日志组中创建集群日志流。您可以在控制台的**自定义 CloudWatch 控制面板**或**日志组**中查看这些日志。[监控](Monitoring-v3.md#yaml-Monitoring-Logs-CloudWatch)集群配置部分描述了如何修改集群 CloudWatch日志和控制面板。有关更多信息，请参阅[与 Amazon CloudWatch 日志集成](cloudwatch-logs-v3.md)和[亚马逊 CloudWatch 控制面板](cloudwatch-dashboard-v3.md)。

日志是用于排查问题的有用资源。例如，如果您想要删除失败的集群，则首先创建该集群的日志存档可能会很有用。按照[存档日志](#troubleshooting-v3-get-logs-archive)中的步骤创建存档。

**Topics**
+ [中的集群日志不可用 CloudWatch](#troubleshooting-v3-get-logs-unavailable)
+ [存档日志](#troubleshooting-v3-get-logs-archive)
+ [保留的日志](#troubleshooting-v3-get-logs-preserve)
+ [已终止节点日志](#troubleshooting-v3-get-logs-terminated-node)

## 中的集群日志不可用 CloudWatch
<a name="troubleshooting-v3-get-logs-unavailable"></a>

如果中没有集群日志 CloudWatch，请检查以确保在向配置中添加自定义 AWS ParallelCluster CloudWatch 日志时没有覆盖日志配置。

要向 CloudWatch 配置中添加自定义日志，请确保附加到配置中，而不是获取和覆盖配置。有关`fetch-config`和的更多信息`append-config`，请参阅《*CloudWatch 用户指南》*中的[多个 CloudWatch 代理配置文件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-common-scenarios.html#CloudWatch-Agent-multiple-config-files)。

要恢复 AWS ParallelCluster CloudWatch 日志配置，可以在 AWS ParallelCluster 节点内运行以下命令：

```
$ PLATFORM="$(ohai platform | jq -r ".[]")"
LOG_GROUP_NAME="$(cat /etc/chef/dna.json | jq -r ".cluster.log_group_name")"
SCHEDULER="$(cat /etc/chef/dna.json | jq -r ".cluster.scheduler")"
NODE_ROLE="$(cat /etc/chef/dna.json | jq -r ".cluster.node_type")"
CONFIG_DATA_PATH="/usr/local/etc/cloudwatch_agent_config.json"
/opt/parallelcluster/pyenv/versions/cookbook_virtualenv/bin/python /usr/local/bin/write_cloudwatch_agent_json.py --platform $PLATFORM --config $CONFIG_DATA_PATH --log-group $LOG_GROUP_NAME --scheduler $SCHEDULER --node-role $NODE_ROLE
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json -s
```

## 存档日志
<a name="troubleshooting-v3-get-logs-archive"></a>

您可以将日志存档到 Amazon S3 或本地文件中（具体取决于 `--output-file` 参数）。

**注意**  
从 AWS ParallelCluster 3.12.0 开始，您可以将日志导出到默认 AWS ParallelCluster 存储桶。在这种情况下，您无需设置存储桶权限。

**注意**  
向 Amazon S3 存储桶策略添加权限以授予 CloudWatch 访问权限。有关更多信息，请参阅*CloudWatch 日志用户指南*中的对 [Amazon S3 存储桶设置权限](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/S3ExportTasks.html#S3Permissions)。

```
$ pcluster export-cluster-logs --cluster-name mycluster --region eu-west-1 \
  --bucket bucketname --bucket-prefix logs
{
  "url": "https://bucketname.s3.eu-west-1.amazonaws.com/export-log/mycluster-logs-202109071136.tar.gz?..."
}

# use the --output-file parameter to save the logs locally
$ pcluster export-cluster-logs --cluster-name mycluster --region eu-west-1 \
  --bucket bucketname --bucket-prefix logs --output-file /tmp/archive.tar.gz
{
  "path": "/tmp/archive.tar.gz"
}
```

除非在配置或`export-cluster-logs`命令参数中明确指定，否则该档案包含过去 14 天来自头节点和计算节点的 Amazon CloudWatch Logs 流和 CloudFormation 堆栈事件。命令完成所需的时间取决于集群中的节点数量和日志中 CloudWatch 可用的日志流数量。有关可用日志流的更多信息，请参阅[与 Amazon CloudWatch 日志集成](cloudwatch-logs-v3.md)。

## 保留的日志
<a name="troubleshooting-v3-get-logs-preserve"></a>

从版本 3.0.0 开始，删除集群时会默认 AWS ParallelCluster 保留 CloudWatch 日志。如果您想要删除集群并保留其日志，请确保集群配置中的 [`Monitoring`](Monitoring-v3.md)/[`Logs`](Monitoring-v3.md#yaml-Monitoring-Logs)/[`CloudWatch`](Monitoring-v3.md#yaml-Monitoring-Logs-CloudWatch)/[`DeletionPolicy`](Monitoring-v3.md#yaml-Monitoring-Logs-CloudWatch-DeletionPolicy) 未设置为 `Delete`。否则，请将此字段的值更改为 `Retain`，然后运行 `pcluster update-cluster` 命令。然后，运行`pcluster delete-cluster --cluster-name <cluster_name>`删除集群，但保留存储在 Amazon 中的日志组 CloudWatch。

## 已终止节点日志
<a name="troubleshooting-v3-get-logs-terminated-node"></a>

如果静态计算节点意外终止并且 CloudWatch 没有日志，请检查`/var/log/parallelcluster/compute_console_output`日志中是否 AWS ParallelCluster 已将该计算节点的控制台输出记录在头节点上。有关更多信息，请参阅 [用于调试的关键日志](troubleshooting-v3-scaling-issues.md#troubleshooting-v3-key-logs)。

如果`/var/log/parallelcluster/compute_console_output`日志不可用或不包含节点的输出，请使用从故障节点检索控制台输出。 AWS CLI 登录到集群头节点并从 `/var/log/parallelcluster/slurm_resume.log` 文件中获取失败节点的 `instance-id`。

使用 `instance-id` 运行以下命令，检索控制台输出：

```
$ aws ec2 get-console-output --instance-id i-abcdef01234567890
```

如果动态计算节点在启动后自行终止并且 CloudWatch 没有日志，请提交激活集群扩展操作的作业。等待实例失败，然后检索实例控制台日志。

登录到集群头节点并从 `/var/log/parallelcluster/slurm_resume.log` 文件中获取计算节点的 `instance-id`。

要检索实例控制台日志，请使用以下命令：

```
$ aws ec2 get-console-output --instance-id i-abcdef01234567890
```

当计算节点日志不可用时，控制台输出日志可以帮助您调试计算节点失败的根本原因。

# AWS CloudFormation 自定义资源
<a name="cloudformation-v3"></a>

从 3.6.0 AWS ParallelCluster 版开始，您可以在堆栈中使用 AWS ParallelCluster CloudFormation 自定义资源。 AWS CloudFormation 自定义资源是 AWS ParallelCluster 托管堆栈。这样，您就可以使用 CloudFormation 来配置和管理您的集群。例如，您可以在 CloudFormation 堆栈中配置群集外部资源，例如网络、共享存储和安全组基础架构。此外，您可以使用 CloudFormation 基础设施即代码管道来管理集群。

通过执行以下操作向 CloudFormation 模板添加 AWS ParallelCluster 自定义资源：

1. 添加由其拥有和托管的自定义资源提供程序堆栈 AWS ParallelCluster。

1. 将 CloudFormation 模板中的提供程序堆栈作为自定义资源引用。

自定义资源提供程序堆栈处理和响应 CloudFormation 请求。例如，在部署 CloudFormation 堆栈时，还要配置和创建集群。要更新集群，您需要更新 CloudFormation 堆栈。在删除堆栈时，将会删除集群。有关 CloudFormation 自定义资源的更多信息，请参阅*AWS CloudFormation 用户指南*中的[自定义资源](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html)。

**警告**  
CloudFormation 未检测到自定义资源偏差。仅 CloudFormation 用于更新集群配置和删除集群。  
您可以使用 [`pcluster`](pcluster-v3.md) CLI 或 [AWS ParallelCluster 用户界面](pcui-using-v3.md) 来监控集群的状态或更新计算实例集，但不得使用它们来更新集群配置或删除集群。

**注意**  
我们建议您为堆栈添加[终止保护](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-protect-stacks.html)，以避免意外删除。

# 由托管的提供商堆栈 AWS ParallelCluster
<a name="cfn-provider-stack"></a>

自定义资源提供程序堆栈的格式如以下 CloudFormation 模板片段所示：

```
PclusterClusterProvider:
  Type: AWS::CloudFormation::Stack
  Properties:
    Parameters:
      CustomLambdaRole: # (Optional) RoleARN to override default
      AdditionalIamPolicies: # (Optional) comma-separated list of IAM policies to add
    TemplateURL: !Sub
      - https://${AWS::Region}-aws-parallelcluster.s3.${AWS::Region}.${AWS::URLSuffix}/parallelcluster/${Version}/templates/custom_resource/cluster.yaml
      - { Version: 3.15.0 }
```

**属性：**    
**参数：**    
**CustomLambdaRole （可选）：**  
具有运行 AWS Lambda （可创建和管理集群）的权限的自定义角色。默认情况下，该角色使用 [AWS ParallelCluster 文档](iam-roles-in-parallelcluster-v3.md)中默认定义的相同策略。  
**AdditionalIamPolicies （可选）：**  
以逗号分隔的其他 IAM 策略 Amazon 资源名称 (ARNs) 列表，以添加到 Lambda 使用的角色中。仅在未指定 `CustomLambdaRole` 时使用，并且可以留空。  
如果需要对头节点、计算节点使用其他策略或需要其他策略以访问 Amazon S3 存储桶，请将其添加到 `CustomLambdaRole` 或 `AdditionalIamPolicy` 属性中。  
如果您需要将其他策略附加到头节点，则还必须授予必要的权限，以便将这些策略附加或分离到与头节点关联的 IAM 角色。具体而言，您需要将 “ia AttachRolePolicy m:” 和 “ia DetachRolePolicy m:” 权限（或托管策略中的等效权限）附加到头节点使用的 IAM 角色。有关更多信息，请参阅 [AWS ParallelCluster 用于管理 IAM 资源的用户示例策略](iam-roles-in-parallelcluster-v3.md#iam-roles-in-parallelcluster-v3-user-policy-manage-iam)。  
有关默认策略的更多信息，请参阅 [AWS Identity and Access Management 中的权限 AWS ParallelCluster](iam-roles-in-parallelcluster-v3.md)。  
**TemplateURL（必需）：**  
 AWS ParallelCluster 自定义资源文件 URL。

**输出：**    
**ServiceToken: **  
可用作自定义资源 `ServiceToken` 属性的值。自定义资源`ServiceToken`指定 CloudFormation 将请求发送到何处。这是您在 CloudFormation 模板中包含的群集资源的必填输入。  
**LogGroupArn: **  
底层资源登录到 CloudWatch `LogGroup`的 ARN。  
**LambdaLayerArn: **  
 用于运行操作的 Lambda 层的 ARN。 AWS ParallelCluster 

# 集群资源
<a name="cfn-cluster-resource"></a>

 CloudFormation 群集资源的格式如以下 CloudFormation 模板片段所示：

```
PclusterCluster:
  Type: Custom::PclusterCluster
  Properties:
    ServiceToken: !GetAtt [ PclusterClusterProvider , Outputs.ServiceToken ]
    ClusterName: !Sub 'c-${AWS::StackName}' # Must be different from StackName
    ClusterConfiguration:
    # Your Cluster Configuration
```

**属性：**    
**ServiceToken: **  
 AWS ParallelCluster 提供程序堆栈`ServiceToken`输出。  
**ClusterName: **  
要创建和管理的集群的名称。该名称不得与 CloudFormation 堆栈的名称相匹配。创建集群后将无法更改该名称。  
**ClusterConfiguration: **  
集群配置 YAML 文件，如[集群配置文件](cluster-configuration-file-v3.md)中所述。但是，您可以使用常用的 CloudFormation 结构，例如[内部](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html)函数。  
**DeletionPolicy: **  
定义在删除根堆栈时是否删除集群。默认值为 `Delete`。    
**Retain：**  
如果删除了自定义资源，则保留集群。  
为了使保留的集群继续正常运行，依赖于集群的资源（例如存储和网络）必须将删除策略设置为保留。  
**Delete：**  
如果删除了自定义资源，则删除集群。

**`Fn::GetAtt` 返回值：**  
`Fn::GetAtt` 内置函数会为指定属性返回某种类型的值。有关使用该`Fn::GetAtt intrinsic`函数的更多信息，请参阅 [Fn:: GetAtt](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-getatt.html)。    
**ClusterProperties: **  
[`pcluster describe-cluster`](pcluster.describe-cluster-v3.md) 操作返回的值。  
**validationMessages：**  
包含上次创建或更新操作期间出现的所有验证消息的字符串。  
**logGroupName: **  
用于记录 Lambda 集群操作的日志组的名称。日志事件保留 90 天，集群删除后日志组将保留。

**示例：**`Fn::GetAtt`：

```
# Provide the public IP address of the head node as an output of a stack
Outputs:
  HeadNodeIp:
    Description: The public IP address of the head node
    Value: !GetAtt [ PclusterCluster, headNode.publicIpAddress ]
```

**示例：**带有 AWS ParallelCluster 自定义资源的简单、完整的 CloudFormation 模板：

```
AWSTemplateFormatVersion: '2010-09-09'
Description: > AWS ParallelCluster CloudFormation Template

Parameters:
  HeadNodeSubnet:
    Description: Subnet where the HeadNode will run
    Type: AWS::EC2::Subnet::Id

  ComputeSubnet:
    Description: Subnet where the Compute Nodes will run
    Type: AWS::EC2::Subnet::Id

  KeyName:
    Description: KeyPair to login to the head node
    Type: AWS::EC2::KeyPair::KeyName

Resources:
  PclusterClusterProvider:
    Type: AWS::CloudFormation::Stack
    Properties:
      TemplateURL: !Sub
        - https://${AWS::Region}-aws-parallelcluster.s3.${AWS::Region}.${AWS::URLSuffix}/parallelcluster/${Version}/templates/custom_resource/cluster.yaml
        - { Version: 3.15.0 }

  PclusterCluster:
    Type: Custom::PclusterCluster
    Properties:
      ServiceToken: !GetAtt [ PclusterClusterProvider , Outputs.ServiceToken ]
      ClusterName: !Sub 'c-${AWS::StackName}'
      ClusterConfiguration:
        Image:
          Os: alinux2
        HeadNode:
          InstanceType: t2.medium
          Networking:
            SubnetId: !Ref HeadNodeSubnet
          Ssh:
            KeyName: !Ref KeyName
        Scheduling:
          Scheduler: slurm
          SlurmQueues:
          - Name: queue0
            ComputeResources:
            - Name: queue0-cr0
              InstanceType: t2.micro
            Networking:
              SubnetIds:
              - !Ref ComputeSubnet

Outputs:
  HeadNodeIp:
    Description: The Public IP address of the HeadNode
    Value: !GetAtt [ PclusterCluster, headNode.publicIpAddress ]
  ValidationMessages:
    Description: Any warnings from cluster create or update operations.
    Value: !GetAtt PclusterCluster.validationMessages
```

要了解有关如何使用 CloudFormation AWS ParallelCluster 自定义资源的更多信息，请参阅[使用创建集群 CloudFormation](tutorials_09_cfn-custom-resource-v3.md)。

# 集群操作
<a name="cfn-cluster-ops"></a>

将群集自定义资源添加到 CloudFormation 堆栈后， CloudFormation 可以执行以下群集操作：
+ CloudFormation 在部署包含 AWS ParallelCluster 自定义资源的堆栈时，会在新的单独堆栈中创建集群。
+ 如果您更新堆栈中定义的群集配置，则会根据配置更新策略 CloudFormation 更新群集。 AWS ParallelCluster 自定义资源提供程序不会在更新集群之前停止计算队列。我们建议对集群更新使用 [`QueueUpdateStrategy`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy) 设置。这样，在使用 AWS ParallelCluster 自定义资源时，可以避免在更新前后进行显式`pcluster update-compute-fleet`调用。
+ 如果删除堆栈，则会删除集群。

# 对包含 AWS ParallelCluster 自定义资源的堆栈进行故障排除
<a name="cfn-cluster-ops-troubleshooting"></a>

使用 AWS ParallelCluster 自定义资源，从新的独立堆栈 CloudFormation 部署群集。您可以通过执行以下步骤来监控集群创建：

1. 导航到， AWS 管理控制台 然后 CloudFormation 在导航窗格中选择 **Stacks**。

1. 选择名为您为集群名称定义的名称的堆栈。

1. 如果堆栈状态为 `ROLLBACK_COMPLETE`，则表明在创建集群过程中出现了错误。

1. 选择**堆栈详细信息**，然后选择**事件**选项卡。

1. 在**逻辑 ID** 上搜索**事件**，查找您为集群名称定义的名称。该事件包含一个 `Status reason`，给出问题的理由。

1. 您也可以选择**堆栈**下拉菜单，然后选择**已删除**以查看已删除堆栈的列表。选择包含该集群名称的堆栈并查看**事件**以了解更多详细信息。

1. 要查看管理群集的自定义资源提供程序的输出，请选择**描述**为 “AWS ParallelCluster 群集自定义资源” 的堆栈。选择**资源**选项卡，找到**逻辑 ID** 为 `PclusterCfnFunctionLogGroup` 的资源，然后点击提供的链接。查看显示 Lambda 调试输出的日志流。

1. 要对集群进行故障排除，请参阅 [AWS ParallelCluster 故障排除](troubleshooting-v3.md)。

# Elastic Fabric Adapter
<a name="efa-v3"></a>

Elastic Fabric Adapter (EFA) 是一种网络设备，具有操作系统旁路功能，可与同一子网上的其他实例进行低延迟的网络通信。EFA 通过使用 Libfabric 进行公开，并且可以由使用消息传递接口 (MPI) 的应用程序使用。

要将 EFA AWS ParallelCluster 与Slurm调度程序一起使用，请将 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)//[`ComputeResources`[`Efa`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Efa)](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources)/设置为[`Enabled`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Efa-Enabled)。`true`

要查看支持 EFA 的 Amazon EC2 实例的列表，请参阅《Amazon EC2 用户指南（适用于 Linux 实例）》**中的[支持的实例类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html#efa-instance-types)。

我们建议您在置放群组中运行启用 EFA 的实例。这样，这些实例便可启动到单个可用区的低延迟组中。有关如何使用 AWS ParallelCluster配置置放群组的更多信息，请参阅 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`Networking`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-Networking)/[`PlacementGroup`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Networking-PlacementGroup)。

**注意**  
不支持在不同的可用区之间使用 Elastic Fabric Adapter (EFA)。有关更多信息，请参阅[日程安排](Scheduling-v3.md)/[SlurmQueues](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[联网](Scheduling-v3.md#Scheduling-v3-SlurmQueues-Networking)/[SubnetIds](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Networking-SubnetIds)。

**注意**  
Ubuntu 分发默认启用 ptrace（进程跟踪）保护。已禁用 ptrace 保护以使 Libfabric 正常运行。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[禁用 ptrace 保护](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html#efa-start-ptrace)。

## 默认 EFA 网络配置
<a name="efa-v3-default-config"></a>

从 AWS ParallelCluster 3.15.0 开始，启用 EFA 后， AWS ParallelCluster 会自动配置仅限 EFA 的网络接口，以将 EFA 流量与 IP 流量分开。这样可以最大限度地提高 EFA 带宽，同时最大限度地降低 IP 地址 AWS ParallelCluster 根据实例类型的功能确定最佳配置。

对于大多数工作负载，包括紧密耦合的 HPC 和分布式训练，建议使用此默认配置。 AI/ML 

## 自定义 EFA 网络接口
<a name="efa-v3-custom-interfaces"></a>

如果您的工作负载需要不同的网络配置，例如最大限度地提高辅助网卡上的 ENA 带宽或配置可用网卡的子集，则可以使用 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`ComputeResources`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources)/[`LaunchTemplateOverrides`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-LaunchTemplateOverrides)参数覆盖默认设置。这将使用启动模板中定义的配置替换计算节点的整个网络接口配置。

有关演 step-by-step练，请参阅[使用启动模板覆盖自定义计算节点网络接口](tutorial-network-customization-v3.md)。

**警告**  
如果您以实例类型不支持的方式配置网络接口，则实例将无法启动。要验证您的实例类型支持的网络配置，请参阅 *Amazon EC2 API 参考[DescribeInstanceTypes](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstanceTypes.html)*中的。

有关更多信息，请参阅《Amazon EC2 用户指南》**中的 [Elastic Fabric Adapter](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html) 以及 *AWS 开放源代码博客*中的[使用 Elastic Fabric Adapter 和 AWS ParallelCluster扩展 HPC 工作负载](https://aws.amazon.com/blogs/opensource/scale-hpc-workloads-elastic-fabric-adapter-and-aws-parallelcluster/)。

# 启用 Intel MPI
<a name="intelmpi-v3"></a>

英特尔 MPI 已在。 AWS ParallelCluster AMIs

**注意**  
要使用 Intel MPI，必须确认并接受 [Intel 简化软件许可证](https://software.intel.com/en-us/license/intel-simplified-software-license)的条款。

默认情况下，Open MPI 位于路径上。要启用 Intel MPI 而不是 Open MPI，必须先加载 Intel MPI 模块。然后需要使用 `module load intelmpi` 安装最新版本。模块的确切名称随每次更新发生变化。要查看哪些模块可用，请运行 `module avail`。输出如下所示。

```
$ module avail
-----------------------------/usr/share/Modules/modulefiles --------------------------------
dot                            modules        
libfabric-aws/1.16.0~amzn3.0   null
module-git                     openmpi/4.1.4
module-info                    use.own

-----------------------------/opt/intel/mpi/2021.6.0/modulefiles ---------------------------
intelmpi
```

要加载模块，请运行 `module load modulename`。您可以将其添加到用于运行 `mpirun` 的脚本中。

```
$ module load intelmpi
```

要查看加载了哪些模块，请运行 `module list`。

```
$ module list
Currently Loaded Modulefiles:
  1) intelmpi
```

要验证是否已启用 Intel MPI，请运行 `mpirun --version`。

```
$ mpirun --version
Intel(R) MPI Library for Linux* OS, Version 2021.6 Build 20220227 (id: 28877f3f32)
Copyright 2003-2022, Intel Corporation.
```

加载 Intel MPI 模块后，将更改多个路径以使用 Intel MPI 工具。要运行由 Intel MPI 工具编译的代码，请先加载 Intel MPI 模块。

**注意**  
英特尔 MPI 与基于 AWS Graviton 的实例不兼容。

**注意**  
在 2.5.0 AWS ParallelCluster 版本之前，英特尔 MPI AWS ParallelCluster AMIs 在中国（北京）和中国（宁夏）地区不可用。

# AWS ParallelCluster API
<a name="api-reference-v3"></a>

**什么是 AWS ParallelCluster API？**

AWS ParallelCluster API 是一种无服务器应用程序，一旦部署到您的应用程序 AWS 账户，便可通过 API 提供对 AWS ParallelCluster 功能的编程访问。

AWS ParallelCluster API 以独立[CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)模板的形式分发，其中包括一个公开 AWS ParallelCluster 功能的 [Amazon API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html) 终端节点和一个负责处理所调用[AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)功能的函数。

下图显示了 AWS ParallelCluster API 基础架构的高级架构图。

 ![\[a high-level architecture diagram of the ParallelCluster API infrastructure\]](http://docs.aws.amazon.com/zh_cn/parallelcluster/latest/ug/images/API-Architecture-r2.png) 

## AWS ParallelCluster API 文档
<a name="api-reference-documentation-v3"></a>

描述该 API 的 OpenAPI 规范文件可以从以下网址下载： AWS ParallelCluster 

```
https://<REGION>-aws-parallelcluster.s3.<REGION>.amazonaws.com/parallelcluster/<VERSION>/api/ParallelCluster.openapi.yaml
```

从 OpenAPI 规范文件开始，你可以使用 [Swagger UI 或 Redoc 等众多可用工具中的一个来生成 API](https://swagger.io/tools/swagger-ui/) [的文档](https://github.com/Redocly/redoc)。 AWS ParallelCluster 

**如何部署 AWS ParallelCluster API**

要部署 AWS ParallelCluster API，你需要成为 API 的管理员 AWS 账户。

用于部署 API 的模板可在以下 URL 中找到：

```
https://<REGION>-aws-parallelcluster.s3.<REGION>.amazonaws.com/parallelcluster/<VERSION>/api/parallelcluster-api.yaml
```

哪里`<REGION>`是需要部署 API AWS 区域 的地方，`<VERSION>`是 AWS ParallelCluster 版本（例如 3.15.0）。

AWS Lambda 使用带有 Lambda 层接口[AWS ParallelCluster Python 库 API](pc-py-library-v3.md)来处理 API 调用的功能。

**警告**  
中任何有权访问我们的 AWS 账户 Amazon API Gateway 服务的用户都会自动继承管理 AWS ParallelCluster API 资源的权限。 AWS Lambda 

# 使用以下方式部署 AWS ParallelCluster API AWS CLI
<a name="api-reference-deploy-v3"></a>

在本节中，您将学习如何使用进行部署 AWS CLI。

如果您尚未配置要与 CLI 一起使用的 AWS 凭证，请执行此操作。

```
$ aws configure
```

运行以下命令以部署 API：

```
$ REGION=<region>
$ API_STACK_NAME=<stack-name>  # This can be any name
$ VERSION=3.15.0
$ aws cloudformation create-stack \
    --region ${REGION} \
    --stack-name ${API_STACK_NAME} \
    --template-url https://${REGION}-aws-parallelcluster.s3.${REGION}.amazonaws.com/parallelcluster/${VERSION}/api/parallelcluster-api.yaml \
    --capabilities CAPABILITY_NAMED_IAM CAPABILITY_AUTO_EXPAND
$ aws cloudformation wait stack-create-complete --stack-name ${API_STACK_NAME} --region ${REGION}
```

**自定义部署**

您可以使用模板公开的 CloudFormation 参数来自定义 API 部署。要在通过 CLI 部署时配置参数的值，可以使用以下选项：`--parameters ParameterKey=KeyName,ParameterValue=Value`。

以下参数可选：
+ **区域**-使用`Region`参数指定 API 是能够控制全部资源 AWS 区域 （默认）还是单个资源 AWS 区域。将此值设置 AWS 区域 为要部署的 API 以限制访问权限。
+ **ParallelClusterFunctionRole**-这会覆盖分配给实现 AWS ParallelCluster 功能的 AWS Lambda 函数的 IAM 角色。该参数接受 IAM 角色的 ARN。需要将此角色配置为 AWS Lambda 作为 IAM 委托人。此外，由于此角色将取代 API Lambda 函数的默认角色，因此它必须至少具有 API 所需的默认权限，如中所列。[AWS ParallelCluster `pcluster`用户策略示例](iam-roles-in-parallelcluster-v3.md#iam-roles-in-parallelcluster-v3-example-user-policies)
+ **ParallelClusterFunctionAdditionalPolicies**-要附加到 AWS ParallelCluster API 函数角色的其他 IAM 策略的 ARN。只能指定一个策略。
+ **CustomDomainName，CustomDomainCertificate，CustomDomainHostedZoneId**-使用这些参数为 Amazon API Gateway 终端节点设置自定义域。 `CustomDomainName`是要使用的域名，`CustomDomainCertificate`是该域名的 AWS 托管证书的 ARN，`CustomDomainHostedZoneId`也是您要在其中创建记录的 A [mazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html) 托管区域的 ID。
**警告**  
您可以配置自定义域设置，以对 API 强制使用最低版本的传输层安全性协议 (TLS)。有关更多信息，请参阅[在 API Gateway 中为自定义域选择最低 TLS 版本](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-custom-domain-tls-version.html)。
+ **EnableIamAdminAccess**-默认情况下，处理 AWS ParallelCluster API 操作的 AWS Lambda 函数配置为阻止任何特权 IAM 访问的 IAM 角色 (`EnableIamAdminAccess=false`)。这使得 API 无法处理需要创建 IAM 角色或策略的操作。因此，只有在资源配置过程中提供 IAM 角色作为输入时，才能成功创建集群或自定义映像。

  当设置`EnableIamAdminAccess`为`true`时， AWS ParallelCluster API 将获得管理部署集群或生成自定义集群所需的 IAM 角色创建的权限 AMIs。
**警告**  
如果将其设置为 true，则会向处理 AWS ParallelCluster 操作的 AWS Lambda 函数授予 IAM 管理员权限。

  有关启用此模式时可以解锁的功能的更多详细信息，请参阅。[AWS ParallelCluster 用于管理 IAM 资源的用户示例策略](iam-roles-in-parallelcluster-v3.md#iam-roles-in-parallelcluster-v3-user-policy-manage-iam)
+ **PermissionsBoundaryPolicy**-此可选参数接受现有 IAM 策略 ARN，该策略将被设置为 PC API 基础设施创建的所有 IAM 角色的权限边界，并设置为管理 IAM 权限的条件，因此 PC API 只能创建具有此策略的角色。

  有关此模式施加的限制的更多详细信息，请参阅 [`PermissionsBoundary` 模式](iam-roles-in-parallelcluster-v3.md#iam-roles-in-parallelcluster-v3-permissionsboundary-mode)。
+ **CreateApiUserRole**-默认情况下， AWS ParallelCluster API 的部署包括创建 IAM 角色，该角色被设置为唯一有权调用 API 的角色。 Amazon API Gateway 终端节点配置了基于资源的策略，仅向创建的用户授予调用权限。 要更改此设置，请设置`CreateApiUserRole=false`并向选定的 IAM 用户授予 API 访问权限。有关更多信息，请参阅 *Amazon API Gateway 开发者指南中的控制调用 API* [的访问权限](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html)。
**警告**  
如果`CreateApiUserRole=true`对 API 终端节点的访问不受到 Amazon API Gateway 资源策略的限制，则所有拥有不受限制`execute-api:Invoke`权限的 IAM 角色都可以访问 AWS ParallelCluster 功能。有关更多信息，请参阅《API Gat [eway *开发者指南》中的使用 API Gateway 资源策略控制 API* 的访问权限](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-resource-policies.html)。
**警告**  
`ParallelClusterApiUserRole` 有权调用所有 AWS ParallelCluster API 操作。要限制对一部分 API 资源的访问，请参阅《API [Gateway *开发者指南》中的使用 IAM 策略控制谁可以调用 API Gateway API* 方法](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-control-access-using-iam-policies-to-invoke-api.html#api-gateway-who-can-invoke-an-api-method-using-iam-policies)。
+ **IAMRoleAndPolicyPrefix**-此可选参数接受一个最多包含 10 个字符的字符串，该字符串将用作作为 PC API 基础设施一部分创建的 IAM 角色和策略的前缀。

# 更新 API
<a name="api-reference-update-v3"></a>

在本节中，您将学习如何使用两个可用选项之一来更新 API。

**升级到新 AWS ParallelCluster 版本**

选项 1：要移除现有 API，请删除相应的 CloudFormation 堆栈并部署新的 API，如上所示。

选项 2：要更新现有 API，请运行以下命令：

```
$ REGION=<region>
$ API_STACK_NAME=<stack-name>  # This needs to correspond to the existing API stack name
$ VERSION=3.15.0
$ aws cloudformation update-stack \
    --region ${REGION} \
    --stack-name ${API_STACK_NAME} \
    --template-url https://${REGION}-aws-parallelcluster.s3.${REGION}.amazonaws.com/parallelcluster/${VERSION}/api/parallelcluster-api.yaml \
    --capabilities CAPABILITY_NAMED_IAM CAPABILITY_AUTO_EXPAND
$ aws cloudformation wait stack-update-complete --stack-name ${API_STACK_NAME} --region ${REGION}
```

# 正在调用 API AWS ParallelCluster
<a name="api-reference-invoke-v3"></a>

 AWS ParallelCluster Amazon API Gateway 终端节点配置了[`AWS_IAM`授权类型](https://docs.aws.amazon.com/apigateway/latest/developerguide/permissions.html#api-gateway-control-access-iam-permissions-model-for-calling-api)，要求所有请求都必须使用有效的 IAM 凭证进行 Sigv4 签名（[API 参考：发出 http 请求](https://docs.aws.amazon.com/apigateway/api-reference/making-http-requests/)）。

使用默认设置进行部署时，API 调用权限仅授予给使用 API 创建的默认 IAM 用户。

要检索默认 IAM 用户的 ARN，请运行：

```
$ REGION=<region>
$ API_STACK_NAME=<stack-name>
$ aws cloudformation describe-stacks --region ${REGION} --stack-name ${API_STACK_NAME} --query "Stacks[0].Outputs[?OutputKey=='ParallelClusterApiUserRole'].OutputValue" --output text
```

要获取默认 IAM 用户的临时证书，请运行 [STS AssumeRole](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sts/assume-role.html) 命令。

要检索 AWS ParallelCluster API 端点，请运行以下命令：

```
$ REGION=<region>
$ API_STACK_NAME=<stack-name>
$ aws cloudformation describe-stacks --region ${REGION} --stack-name ${API_STACK_NAME} --query "Stacks[0].Outputs[?OutputKey=='ParallelClusterApiInvokeUrl'].OutputValue" --output text
```

该 AWS ParallelCluster API 可以由任何符合 OpenAPI 规范的 HTTP 客户端调用，可以在此处找到：

```
https://<REGION>-aws-parallelcluster.s3.<REGION>.amazonaws.com/parallelcluster/<VERSION>/api/ParallelCluster.openapi.yaml
```

请求必须按照[此处](https://docs.aws.amazon.com/apigateway/api-reference/signing-requests)所述进行 SigV4 签名。

目前，我们不提供任何官方 API 客户端实现。但是，您可以使用 [OpenAPI 生成器](https://openapi-generator.tech/)轻松地从 OpenAPI 模型生成 API 客户端。生成客户端后，如果没有开箱即用，则需要添加 Sigv4 签名。

可以在 [AWS ParallelCluster 存储库](https://github.com/aws/aws-parallelcluster/tree/develop/api/client/src)中找到 Python API 客户端的参考实现。要详细了解如何使用 Python API 客户端，请参阅[使用 AWS ParallelCluster API](tutorials_06_API_use.md) 教程。

[要实施更高级的访问控制机制，例如亚马逊 Cognito 或 Lambda 授权者，或者要使用或 API 密钥进一步保护 API，请按照 Amazon API Gateway 文档进行 AWS WAF 操作。](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html)

**警告**  
有权调用 AWS ParallelCluster API 的 IAM 用户可以间接控制 AWS ParallelCluster 中管理的所有 AWS 资源 AWS 账户。这包括创建由于用户 IAM 策略的限制而导致用户无法直接控制的 AWS 资源。例如，根据集群的配置，创建 AWS ParallelCluster 集群可能包括部署 Amazon EC2 实例、Amazon Route 53、Amazon Elastic File System FSx 文件系统、Amazon 文件系统、IAM 角色以及用户可能无法直接控制的其他 AWS 服务 资源。 AWS ParallelCluster 

**警告**  
使用配置中`AdditionalIamPolicies`指定的方式创建集群时，其他策略必须与以下模式之一匹配：  

```
- !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:policy/parallelcluster*
- !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:policy/parallelcluster/*
- !Sub arn:${AWS::Partition}:iam::aws:policy/CloudWatchAgentServerPolicy
- !Sub arn:${AWS::Partition}:iam::aws:policy/AmazonSSMManagedInstanceCore
- !Sub arn:${AWS::Partition}:iam::aws:policy/AWSBatchFullAccess
- !Sub arn:${AWS::Partition}:iam::aws:policy/AmazonS3ReadOnlyAccess
- !Sub arn:${AWS::Partition}:iam::aws:policy/service-role/AWSBatchServiceRole
- !Sub arn:${AWS::Partition}:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role
- !Sub arn:${AWS::Partition}:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
- !Sub arn:${AWS::Partition}:iam::aws:policy/service-role/AmazonEC2SpotFleetTaggingRole
- !Sub arn:${AWS::Partition}:iam::aws:policy/EC2InstanceProfileForImageBuilder
- !Sub arn:${AWS::Partition}:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
```
如果需要其他策略，则可以执行以下操作之一：  
在以下文件中编辑 `DefaultParallelClusterIamAdminPolicy`：  

  ```
  https://<REGION>-aws-parallelcluster.s3.<REGION>.amazonaws.com/parallelcluster/<VERSION>/api/parallelcluster-api.yaml
  ```
将策略添加在 `ArnLike/iam:PolicyARN` 部分中。
不要在配置文件`AdditionalIamPolicies`中为指定策略，而是手动将策略添加到集群内创建的 AWS ParallelCluster 实例角色中。

# 访问 API 日志和数据记录
<a name="api-reference-access-v3"></a>

API 日志发布到亚马逊 CloudWatch ，保留期为 30 天。要检索与 API 部署关联的 LogGroup 名称，请运行以下命令：

```
$ REGION=<region>
$ API_STACK_NAME=<stack-name>
$ aws cloudformation describe-stacks --region ${REGION} --stack-name ${API_STACK_NAME} --query "Stacks[0].Outputs[?OutputKey=='ParallelClusterLambdaLogGroup'].OutputValue" --output text
```

也可以通过 Lambda 控制台访问 Lambda 数据记录、日志和 [AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html) 跟踪日志。要检索与 API 部署关联的 Lambda 函数的 ARN，请运行以下命令：

```
$ REGION=<region>
$ API_STACK_NAME=<stack-name>
$ aws cloudformation describe-stacks --region ${REGION} --stack-name ${API_STACK_NAME} --query "Stacks[0].Outputs[?OutputKey=='ParallelClusterLambdaArn'].OutputValue" --output text
```

# AWS ParallelCluster 适用于 Terraform
<a name="terraform-what-is"></a>

[从 AWS ParallelCluster 3.8.0 开始，您可以使用 Terraform 部署集群和自定义镜像。](https://www.terraform.io/)要开始使用此功能，请参阅 [Terraform Registry 中的 Terraform P AWS ParallelCluster rovid](https://registry.terraform.io/providers/aws-tf/aws-parallelcluster/latest) er。

**注意**  
您的账户中必须部署 [ParallelCluster API](https://docs.aws.amazon.com//parallelcluster/latest/ug/api-reference-v3.html) 才能使用该提供商。

使用下表来确定提供程序和 AWS ParallelCluster 版本之间的兼容性：


| 提供程序版本 | AWS ParallelCluster 版本 | 
| --- | --- | 
|  1.0.0  |  3.8.0-3.10.1  | 
|  1.1.0  |  3.11.0\$1  | 

查看如何使用提供程序的[示例](https://github.com/aws-tf/terraform-provider-aws-parallelcluster/tree/main/examples)。

要获得更流畅的体验，请使用来 AWS ParallelCluster自 Terraform Registry [的官方 Terraform 模块](https://registry.terraform.io/modules/aws-tf/parallelcluster/aws/latest)。该模块让您能够部署：

1. ParallelCluster API 

1. ParallelCluster 使用 YAML 配置文件和 HCL 定义的集群

1.  ParallelCluster 集群所需的网络基础架构

查看如何使用该模块的[示例](https://github.com/aws-tf/terraform-aws-parallelcluster/tree/main/examples)。

# 通过 Amazon DCV 连接到头节点和登录节点
<a name="dcv-v3"></a>

Amazon DCV 是一种远程可视化技术，使用户能够安全地连接到托管在远程高性能服务器上的图形密集型 3D 应用程序。有关更多信息，请参阅 [Amazon DCV](https://docs.aws.amazon.com/dcv/)。

Amazon DCV 软件自动安装在头节点上，可以通过使用 [`HeadNode`](HeadNode-v3.md) 中的 [`Dcv`](HeadNode-v3.md#HeadNode-v3-Dcv) 部分来启用。

[从 3.11 AWS ParallelCluster 版开始，可以使用 [`LoginNodes` 部分](LoginNodes-v3.md) /池配置中的 Dcv 部分为登录节点池启用 Amazon DCV。](LoginNodes-v3.md#LoginNodes-v3-Pools)

```
LoginNodes:
  Pools:
    Dcv: 
      Enabled: true
```

AWS ParallelCluster 设置`/home/<DEFAULT_AMI_USER>`为 [DCV 服务器存储文件夹](https://docs.aws.amazon.com/dcv/latest/adminguide/manage-storage.html)。有关 Amazon DCV 配置参数的更多信息，请参阅 [`HeadNode`](HeadNode-v3.md)/[`Dcv`](HeadNode-v3.md#HeadNode-v3-Dcv)。

要连接到头节点上的 Amazon DCV 会话，请使用 [`dcv-connect`](pcluster.dcv-connect-v3.md) 命令。要在登录节点上进行连接，请使用带有 `--login-node-ip` 参数的 `dcv-connect`，并传入要连接的登录节点的公有或私有 IP 地址。

## Amazon DCV HTTPS 证书
<a name="dcv-v3-certificate"></a>

Amazon DCV 会自动生成自签名证书，以确保 Amazon DCV 客户端和 Amazon DCV 服务器之间的流量安全。

要使用其它证书替换默认的自签名 Amazon DCV 证书，首先要连接到头节点。然后，在运行 [`pcluster dcv-connect`](pcluster.dcv-connect-v3.md) 命令之前，将证书和密钥复制到 `/etc/dcv` 文件夹。

有关更多信息，请参阅《Amazon DCV 管理员指南》**中的[更改 TLS 证书](https://docs.aws.amazon.com/dcv/latest/adminguide/manage-cert.html)。

## 许可 Amazon DCV
<a name="dcv-v3-license"></a>

Amazon DCV 服务器在亚马逊 EC2 实例上运行时不需要许可服务器。不过，Amazon DCV 服务器必须定期连接到 Amazon S3 存储桶，以确定是否有有效的许可证。

AWS ParallelCluster 自动向头节点 IAM 策略添加所需的权限。使用自定义 IAM 实例策略时，请使用《[亚马逊 DCV 管理员指南》中亚马逊的 Amazon](https://docs.aws.amazon.com/dcv/latest/adminguide/setting-up-license.html#setting-up-license-ec2) *DCV EC2 * 中描述的权限。

有关故障排除提示，请参阅 [排查 Amazon DCV 中的问题](troubleshooting-v3-nice-dcv.md)。

# 使用 `pcluster update-cluster`
<a name="using-pcluster-update-cluster-v3"></a>

在 AWS ParallelCluster 3.x 中，[`pcluster update-cluster`](pcluster.update-cluster-v3.md)分析用于创建当前集群的设置以及配置文件中的设置是否存在问题。如果发现任何问题，就会进行报告并显示修复这些问题所要执行的步骤。例如，如果更改了计算 [`InstanceType`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-InstanceType)，则必须先停止计算实例集，然后才能继续进行更新。此问题发现后即会报告。如果未发现阻止更新的问题，则会启动更新过程并报告更改。

在运行更新之前，您可以使用 [`pcluster update-cluster`](pcluster.update-cluster-v3.md) `--dryrun option` 来查看更改。有关更多信息，请参阅 [`pcluster update-cluster` 示例](#pcluster-update-cluster-examples)。

有关故障排除指导，请参阅[AWS ParallelCluster 故障排除](troubleshooting-v3.md)。

## 更新策略：定义
<a name="pcluster-update-policy-definitions"></a>

**更新策略：必须停止集群中的登录节点，才能更改此设置进行更新。**  
在使用集群中的登录节点时，无法更改这些设置。要么恢复更改，要么停止集群登录节点。（您可以通过将每个池的计数设置为 0 来停止群集中的登录节点）。集群的登录节点停止后，您可以更新集群（pcluster update-cluster）以激活更改。  
从 3.7.0 AWS ParallelCluster 版开始支持此更新政策。

**更新策略：可以添加登录节点池，但移除池需要停止集群中的所有登录节点。**  
要移除池，必须停止集群中的所有登录节点。（将每个池的计数设置为 0，即可停止集群中的登录节点）。集群的登录节点停止后，您可以更新集群（[`pcluster update-cluster`](pcluster.update-cluster-v3.md)）以激活更改。  
从 3.11.0 AWS ParallelCluster 版开始支持此更新政策。

**更新策略：必须停止池中的登录节点，才能更改此设置进行更新。**  
当池中的登录节点处于使用状态时，您无法更改这些设置。要么恢复更改，要么停止池登录节点。（将池的计数设置为 0，即可停止池中的登录节点）。池的登录节点停止后，您可以更新集群（[`pcluster update-cluster`](pcluster.update-cluster-v3.md)）以激活更改。  
从 3.11.0 AWS ParallelCluster 版开始支持此更新政策。

**更新策略：可以在更新期间更改此设置。**  
更改此设置后，可以使用 [`pcluster update-cluster`](pcluster.update-cluster-v3.md) 更新集群。

**更新策略：如果更改此设置，则不允许更新。**  
更改此设置后，无法更新集群。您必须还原原始集群的设置，并使用更新的设置创建一个新集群。您可以在将来删除原始集群。要创建新集群，请使用 [`pcluster create-cluster`](pcluster.create-cluster-v3.md)。要删除原始集群，请使用 [`pcluster delete-cluster`](pcluster.delete-cluster-v3.md)。

**更新策略：在更新期间不分析此设置。**  
可以更改这些设置，并使用 [`pcluster update-cluster`](pcluster.update-cluster-v3.md) 更新集群。

**更新策略：必须停止计算实例集才能更改此设置以进行更新。**  
当存在计算实例集时，无法更改这些设置。必须还原更改，或者必须停止计算实例集（使用 [`pcluster update-compute-fleet`](pcluster.update-compute-fleet-v3.md)）。停止计算实例集后，您可以更新集群 ([`pcluster update-cluster`](pcluster.update-cluster-v3.md)) 以激活更改。例如，如果您要在 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`ComputeResources`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources)/ - [`Name`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Name)/[`MinCount`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MinCount) > 0 的情况下使用 Slurm 调度器，则会启动一个计算实例集。

**更新策略：必须停止计算实例集和登录节点才能更改此设置以进行更新。**  
如果计算实例集存在，或登录节点正在使用中，则无法更改这些设置。要么恢复更改，要么停止计算实例集和登录节点（可使用 [`pcluster update-compute-fleet`](pcluster.update-compute-fleet-v3.md) 停止计算实例集）。计算实例集和登录节点停止后，您可以更新集群（[`pcluster update-cluster`](pcluster.update-cluster-v3.md)）以激活更改。

**更新策略：更新期间不能减小此设置。**  
这些设置可以更改，但不能减小。如果必须减小这些设置，您必须还原原始集群的设置，并使用更新的设置创建一个新集群。您可以在将来删除原始集群。要创建新集群，请使用 [`pcluster create-cluster`](pcluster.create-cluster-v3.md)。要删除原始集群，请使用 [`pcluster delete-cluster`](pcluster.delete-cluster-v3.md)。

**更新策略：如果更改此设置，则不允许更新。如果您强制更新，则将忽略新值并使用旧值。**  
更改此设置后，无法更新集群。您必须还原原始集群的设置，并使用更新的设置创建一个新集群。您可以在将来删除原始集群。要创建新集群，请使用 [`pcluster create-cluster`](pcluster.create-cluster-v3.md)。要删除原始集群，请使用 [`pcluster delete-cluster`](pcluster.delete-cluster-v3.md)。

**更新策略：必须停止计算实例集或必须设置 [`QueueUpdateStrategy`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy) 才能更改此设置以进行更新。**  
可以更改这些设置。必须停止计算实例集（使用 [`pcluster update-compute-fleet`](pcluster.update-compute-fleet-v3.md)），或者必须设置 [`QueueUpdateStrategy`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)。停止计算实例集或设置 [`QueueUpdateStrategy`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy) 后，您可以更新集群 ([`pcluster update-cluster`](pcluster.update-cluster-v3.md)) 以激活更改。  
从 3.2.0 AWS ParallelCluster 版开始支持此更新政策。

**更新策略：对于此列表值设置，可以在更新期间添加新值，或者在删除现有值时必须停止计算实例集。**  
可以在更新期间为这些设置添加新值。向列表中添加新值后，可以使用 ([`pcluster update-cluster`](pcluster.update-cluster-v3.md)) 更新集群。  
要从列表中删除现有值，必须停止计算实例集（使用 [`pcluster update-compute-fleet`](pcluster.update-compute-fleet-v3.md)）。  
例如，如果您正在使用Slurm调度程序并向 [Instances/](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Instances) 添加新的实例类型InstanceType，则可以在不停止计算队列的情况下更新集群。[要从 [Instances/](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Instances) 中移除现有实例类型InstanceType，必须先停止计算队列（使用 pcluster）。 update-compute-fleet](pcluster.update-compute-fleet-v3.md)  
从 3.2.0 AWS ParallelCluster 版开始支持此更新政策。

**更新策略：要缩小队列的大小，需要停止计算队列或者**[QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)**必须将其设置为 TERMINATE 才能更改此设置以进行更新。**  
可以更改这些设置，但是如果更改会缩小队列的大小，则必须停止计算队列（使用 pcluster update-compute-fleet）或[QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)必须将其设置为 TERMINATION。在计算队列停止或设置[QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)为终止后，您可以更新集群（[pcluster update-cluster）以激活](pcluster.update-cluster-v3.md)更改。  
在调整集群容量时，设置 TERMINATE 只会终止节点列表后面的节点，而不会触及同一分区的所有其它节点。  
例如，如果集群的初始容量为 `MinCount = 5` 和 `MaxCount = 10`，则节点为 `st-[1-5]; dy-[1-5]`。将集群大小调整为 `MinCount = 3` 和 `MaxCount = 5` 时，新的集群容量将由节点 `st-[1-3]; dy-[1-2]` 构成，更新期间不会触及这些节点。在更新过程中，只有 `st-[4-5]; dy-[3-5]` 节点会被终止。  
支持以下更改，并且不需要停止计算队列，也不要求将其[QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)设置为 TERMINATION：  
+ 添加了一个新[SlurmQueue](Scheduling-v3.md#Scheduling-v3-SlurmQueues)的
+ 添加了一个新[ComputeResource](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources)的
+ [MaxCount](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MaxCount)增加了
+ [MinCount](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MinCount)增加[MaxCount](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MaxCount)并且增加的金额至少相同

  **注意：**从 3.9.0 AWS ParallelCluster 版开始支持此更新政策。

**更新策略：对于此列表值设置，必须停止计算实例集或必须设置 [`QueueUpdateStrategy`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy) 才能添加新值；删除现有值时必须停止计算实例集。**  
可以在更新期间为这些设置添加新值。必须停止计算实例集（使用 [`pcluster update-compute-fleet`](pcluster.update-compute-fleet-v3.md)），或者必须设置 [`QueueUpdateStrategy`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)。停止计算实例集或设置 [`QueueUpdateStrategy`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy) 后，您可以更新集群 ([`pcluster update-cluster`](pcluster.update-cluster-v3.md)) 以激活更改。  
要从列表中删除现有值，必须停止计算实例集（使用 [`pcluster update-compute-fleet`](pcluster.update-compute-fleet-v3.md)）。  
从 3.3.0 AWS ParallelCluster 版开始支持此更新政策。

**更新策略：必须停止所有计算节点才能删除托管置放群组。必须停止计算实例集或必须设置 [`QueueUpdateStrategy`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy) 才能更改此设置以进行更新。**  
必须停止计算实例集（使用 [`pcluster update-compute-fleet`](pcluster.update-compute-fleet-v3.md)）才能删除托管置放群组。如果您在停止计算实例集之前运行集群更新以删除托管置放群组，则会返回一条配置无效消息，并且不会继续更新。停止计算实例集可以保证没有实例在运行。

## `pcluster update-cluster` 示例
<a name="pcluster-update-cluster-examples"></a>

可以更改这些设置，但是如果更改会缩小队列的大小，则必须停止计算队列（使用 pcluster update-compute-fleet）或[QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)必须将其设置为 TERMINATION。在计算队列停止或设置[QueueUpdateStrategy](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-QueueUpdateStrategy)为终止后，您可以更新集群（[pcluster update-cluster）以激活](pcluster.update-cluster-v3.md)更改。
+ 此示例演示了一些允许的更改的更新，并且直接开始更新。

  ```
  $ pcluster update-cluster --cluster-name cluster_name --cluster-config ~/.parallelcluster/test_cluster --region us-east-1
  {
    "cluster": {
      "clusterName": cluster_name,
      "cloudformationStackStatus": "UPDATE_IN_PROGRESS",
      "cloudformationStackArn": stack_arn,
      "region": "us-east-1",
      "version": "3.15.0",
      "clusterStatus": "UPDATE_IN_PROGRESS"
    },
    "changeSet": [
      {
        "parameter": "HeadNode.Networking.AdditionalSecurityGroups",
        "requestedValue": [
          "sg-0cd61884c4ad11234"
        ],
        "currentValue": [
          "sg-0cd61884c4ad16341"
        ]
      }
    ]
  }
  ```
+ 此示例演示了一些允许的更改的试运行更新。试运行可用于在不启动更新的情况下报告更改集。

  ```
  $ pcluster update-cluster --cluster-name cluster_name --cluster-config ~/.parallelcluster/test_cluster --region us-east-1 --dryrun true
  {
    "message": "Request would have succeeded, but DryRun flag is set.",
    "changeSet": [
      {
        "parameter": "HeadNode.Networking.AdditionalSecurityGroups",
        "requestedValue": [
          "sg-0cd61884c4ad11234"
        ],
        "currentValue": [
          "sg-0cd61884c4ad16341"
        ]
      }
    ]
  }
  ```
+ 此示例演示了一些阻止更新的更改的更新。

  ```
  $ pcluster update-cluster --cluster-name cluster_name --cluster-config ~/.parallelcluster/test_cluster --region us-east-1
  {
    "message": "Update failure",
    "updateValidationErrors": [
      {
        "parameter": "HeadNode.Ssh.KeyName",
        "requestedValue": "mykey_2",
        "message": "Update actions are not currently supported for the 'KeyName' parameter. Restore 'KeyName' value to 'jenkinsjun'. If you need this change, please consider creating a new cluster instead of updating the existing one.",
        "currentValue": "mykey_1"
      },
      {
        "parameter": "Scheduling.SlurmQueues[queue1].ComputeResources[queue1-t2micro].InstanceType",
        "requestedValue": "c4.xlarge",
        "message": "All compute nodes must be stopped. Stop the compute fleet with the pcluster update-compute-fleet command",
        "currentValue": "t2.micro"
      },
      {
        "parameter": "SharedStorage[ebs1].MountDir",
        "requestedValue": "/my/very/very/long/shared_dir",
        "message": "Update actions are not currently supported for the 'MountDir' parameter. Restore 'MountDir' value to '/shared'. If you need this change, please consider creating a new cluster instead of updating the existing one.",
        "currentValue": "/shared"
      }
    ],
    "changeSet": [
      {
        "parameter": "HeadNode.Networking.AdditionalSecurityGroups",
        "requestedValue": [
          "sg-0cd61884c4ad11234"
        ],
        "currentValue": [
          "sg-0cd61884c4ad16341"
        ]
      },
      {
        "parameter": "HeadNode.Ssh.KeyName",
        "requestedValue": "mykey_2",
        "currentValue": "mykey_1"
      },
      {
        "parameter": "Scheduling.SlurmQueues[queue1].ComputeResources[queue1-t2micro].InstanceType",
        "requestedValue": "c4.xlarge",
        "currentValue": "t2.micro"
      },
      {
        "parameter": "SharedStorage[ebs1].MountDir",
        "requestedValue": "/my/very/very/long/shared_dir",
        "currentValue": "/shared"
      }
    ]
  }
  ```

# AWS ParallelCluster AMI 自定义
<a name="custom-ami-v3"></a>

在某些情况下，需要为 AWS ParallelCluster 构建自定义 AMI。本节介绍构建自定义 AWS ParallelCluster AMI 时应考虑的事项。

您可以使用以下方法之一构建自定义 AWS ParallelCluster AMI：

1. 创建[构建映像配置文件](image-builder-configuration-file-v3.md)，然后通过 EC2 Image Builder 使用 `pcluster` CLI 构建映像。此过程自动运行，可重复，并且支持监控。有关更多信息，请参阅 [`pcluster`](pcluster-v3.md) 映像命令。

1. 从 AWS ParallelCluster AMI 创建实例，然后登录该实例并进行手动修改。最后，使用 Amazon EC2 根据修改后的实例创建新 AMI。此过程需要更少的时间。但过程不自动运行，也不可重复，而且不支持使用 `pcluster` CLI 映像监控命令。

有关这些方法的更多信息，请参阅[构建自定义 AWS ParallelCluster AMI](building-custom-ami-v3.md)。

## AWS ParallelCluster AMI 自定义注意事项
<a name="custom-ami-considerations-v3"></a>

无论您如何创建自定义映像，我们都建议您执行初步验证测试，并包含相应的预置以监控所创建映像的状态。

要使用 `pcluster` 构建自定义 AMI，您需要创建一个包含 [`Build`](Build-v3.md) 和 [`Image`](Image-v3.md#Image-v3.properties) 部分的[构建映像配置文件](image-builder-configuration-file-v3.md)，[EC2 Image Builder](https://docs.aws.amazon.com/imagebuilder/latest/userguide/what-is-image-builder.html) 将使用该文件来构建您的自定义映像。`Build` 部分指定 Image Builder 在构建映像时需要的项目。这包括 [`ParentImage`](Build-v3.md#yaml-build-image-Build-ParentImage)（基础映像）和 [`Components`](Build-v3.md#Build-v3-Components)。[Image Builder 组件](https://docs.aws.amazon.com/imagebuilder/latest/userguide/toe-component-manager.html)定义一系列步骤，在创建映像之前自定义实例时或在测试由创建的映像启动的实例时，必须执行这些步骤。有关更多信息，请参阅 *EC2 Image Builder 用户指南中的使用 Image Builder* [创建自定义组件](https://docs.aws.amazon.com/imagebuilder/latest/userguide/create-component.html)。

从 pcluster 调用[`build-image`](pcluster.build-image-v3.md)以创建自定义映像时，Image Builder 会使用带有 AWS ParallelCluster 食谱的构建映像配置来引导您 AWS ParallelCluster 。[`ParentImage`](Build-v3.md#yaml-build-image-Build-ParentImage)Image Builder 将会下载组件、运行构建和验证阶段、创建 AMI、从 AMI 中启动实例并运行测试。该过程完成后，Image Builder 将生成新映像或停止消息。

## 执行自定义组件验证测试
<a name="custom-ami-validation-v3"></a>

在将 Image Builder 组件包含在配置中之前，请使用以下方法之一对其进行测试和验证。由于 Image Builder 进程可能需要长达 1 小时的时间，因此我们建议您事先测试这些组件。这可为您节省大量时间。

**脚本案例**  
在构建映像过程之外，在正在运行的实例中测试脚本，并验证脚本是否以退出代码 0 退出。

**Amazon 资源名称 (ARN) 案例**  
在构建映像过程之外，在正在运行的实例中测试组件文档。有关要求列表，请参阅 *Image Builder User Guide* 中的 [Component manager](https://docs.aws.amazon.com/imagebuilder/latest/userguide/toe-component-manager.html)。

**成功验证后，将组件添加到构建映像配置中**  
确认自定义组件正常工作后，将其添加到[构建映像配置文件](image-builder-configuration-file-v3.md)中。

## 使用 `pcluster` 命令监控 Image Builder 进程以帮助进行调试
<a name="custom-ami-monitor-v3"></a>

[`describe-image`](pcluster.describe-image-v3.md)

使用此命令可监控构建映像状态。

[`list-image-log-streams`](pcluster.list-image-log-streams-v3.md)

使用此命令获取可用于检索日志事件的日志流[`get-image-log-events`](pcluster.get-image-log-events-v3.md)。 IDs 

[`get-image-log-events`](pcluster.get-image-log-events-v3.md)

使用此命令可获取构建映像进程事件的日志流。

例如，您可以使用以下命令来跟踪构建映像事件。

```
$ watch -n 1 'pcluster get-image-log-events -i <image-id> \
        --log-stream-name/1 <pcluster-version> \
        --query "events[*].message" | tail -n 50'
```

[`get-image-stack-events`](pcluster.get-image-stack-events-v3.md)

使用此命令可检索 Image Builder 创建的堆栈的映像堆栈事件。

[`export-image-logs`](pcluster.export-image-logs-v3.md)

使用此命令可保存映像日志。

有关 AWS ParallelCluster 日志和 Amazon 的更多信息 CloudWatch，请参阅[Amazon CloudWatch Logs 生成镜像日志](cloudwatch-logs-v3.md#cloudwatch-logs-build-images)和[亚马逊 CloudWatch 控制面板](cloudwatch-dashboard-v3.md)。

## 其他考虑因素
<a name="custom-ami-other-v3"></a>

**新 AWS ParallelCluster 版本和自定义 AMIs**  
如果构建并使用自定义 AMI，则必须重复执行用于随每个新的 AWS ParallelCluster 版本创建自定义 AMI 的步骤。

**自定义引导操作**  
请查看该[自定义引导操作](custom-bootstrap-actions-v3.md)部分，以确定您要进行的修改是否可以编写脚本并支持未来的 AWS ParallelCluster 版本。

**使用自定义 AMIs**  
你可以在集群配置 AMIs 中的 [`Image`](Image-v3.md)/[`CustomAmi`](Image-v3.md#yaml-Image-CustomAmi)和//-[`Scheduling`[`SlurmQueues`[`Name`[`Image`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-Image)](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Name)](Scheduling-v3.md#Scheduling-v3-SlurmQueues)](Scheduling-v3.md)/[`CustomAmi`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Image-CustomAmi)部分中指定自定义。  
要排查自定义 AMI 验证警告，请参阅[排查自定义 AMI 问题](troubleshooting-v3-custom-amis.md)。

# 使用按需容量预留（ODCR）启动实例
<a name="launch-instances-odcr-v3"></a>

使用[按需容量预留](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html)（ODCR），您可以为特定可用区中的集群 Amazon EC2 实例预留容量。通过这种方式，您可以独立于由[节省计划](https://aws.amazon.com/savingsplans/)或[区域性预留实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/reserved-instances-scope.html)提供的账单账户创建和管理容量预留。

您可以配置`open`或`targeted` ODCR。*开放式* ODCR 涵盖与 ODCR 属性匹配的所有实例。这些属性包括实例类型、平台和可用区。您必须在集群配置中显式定义*定向* ODCR。要确定 ODCR 是`open`还是`targeted`，请运行 AWS CLI Amazon EC2 [https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html) 命令。

您还可以在集群置放群组中创建 ODCR，称为[集群置放群组按需容量预留 (CPG ODCR)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cr-cpg.html)。

 ODCRs 可以将多个资源分组到一个资源组中。这可以在集群配置文件中定义。有关资源组的更多信息，请参阅 *Resource Groups and Tags User Guide* 中的 [What are resource groups?](https://docs.aws.amazon.com/ARG/latest/userguide/resource-groups.html)。

## 将 ODCR 与 AWS ParallelCluster
<a name="odcr-parallelcuster-v3"></a>

AWS ParallelCluster 支持开放式 ODCR。使用开放式 ODCR 时，您不需要在 AWS ParallelCluster中指定任何内容。系统会自动为集群选择实例。您可以指定现有的置放群组或为您 AWS ParallelCluster 创建一个新的置放群组。

### 集群配置中的 ODCR
<a name="odcr-parallelcuster-config-v3"></a>

从 AWS ParallelCluster 版本 3.3.0 开始，您可以在集群配置文件中定义 ODCR，而无需指定 Amazon EC2 运行实例替代。

您首先使用各自链接文档中描述的方法创建[容量预留](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/capacity-reservations-using.html)和[资源组](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-cr-group.html)。您必须使用这些 AWS CLI 方法来创建容量预留组。如果您使用 AWS 管理控制台，则只能创建基于标签或基于堆栈的资源组。启动带有容量预留的实例 AWS CLI 时， AWS ParallelCluster 或不支持基于标签和基于堆栈的资源组。

创建容量预留和资源组后，在 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`CapacityReservationTarget`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-CapacityReservationTarget) 或 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`ComputeResources`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources)/[`CapacityReservationTarget`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-CapacityReservationTarget) 中指定它们，如以下集群配置示例所示。用您的有效值替换以红色*values*突出显示的内容。

```
Image:
  Os: os
HeadNode:
  InstanceType: head_node_instance
  Networking:
    SubnetId: public_subnet_id
  Ssh:
    KeyName: key_name
Scheduling:
  Scheduler: scheduler
  SlurmQueues:
    - Name: queue1
      Networking:
        SubnetIds:
          - private_subnet_id
      ComputeResources:
        - Name: cr1
          Instances:
            - InstanceType: instance
          MaxCount: max_queue_size
          MinCount: max_queue_size
          Efa:
            Enabled: true
          CapacityReservationTarget:
            CapacityReservationResourceGroupArn: capacity_reservation_arn
```

### 过时/不推荐 - 使用 Amazon EC2 实例覆盖的定向 ODCR
<a name="odcr-parallelcuster-override-v3"></a>

**警告**  
从 3.3.0 AWS ParallelCluster 版开始，我们不建议使用这种方法。本节仍然是使用先前版本的实施参考。
此方法与 Slurm 的多实例类型分配不兼容。

 AWS ParallelCluster 3.1.1 中增加了`targeted` ODCRs 对 Support 的支持。此版本中引入了一种机制，可覆盖 EC2 `RunInstances` 参数并传递有关要对 AWS ParallelCluster中配置的每个计算资源使用的预留的信息。该机制与`targeted` ODCR 兼容。但在使用`targeted` ODCR 时，必须指定 `run-instances` 覆盖配置。 ODCRs 必须在 AWS CLI Amazon EC2 [https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html)命令中明确定义@@ *目标*。要确定 ODCR 是`open`还是`targeted`运行 AWS CLI Amazon EC2 命令[https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-capacity-reservations.html)。

 ODCRs 可以将多个资源分组到一个资源组中。这可以用在运行实例覆盖中，以同时定位多个 ODCRs 实例。

如果您使用的是 `targeted` ODCR，则可以指定置放群组。但您还需要指定 `run-instances` 覆盖配置。

假设为您 AWS 创建了一个 `targeted` ODCR，或者您有一组特定的预留实例。则您无法指定置放群组。由配置的规则 AWS 可能与置放群组设置冲突。因此，如果您的应用程序需要置放群组，请使用 [CPG ODCR](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/cr-cpg.html)。在任何一种情况下，您还必须指定 `run-instances` 覆盖配置。

如果您使用的是 CPG ODCR，则必须指定 `run-instances` 覆盖配置，并且必须在集群配置中指定相同的置放群组。

### 将预留实例与 AWS ParallelCluster
<a name="odcr-reserved-instances"></a>

预留实例[不同于](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html#capacity-reservations-differences)容量预留 (ODCR)。预留实例有[两种类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/reserved-instances-scope.html)。*区域性*预留实例不预留容量。分区预留实例可在指定可用区中预留容量。

如果您有区域性预留实例，则没有容量预留，可能会出现容量不足错误。如果您有分区预留实例，则有容量预留，但没有 `run-instances` API 参数可以用来指定容量预留。

任何 AWS ParallelCluster 版本都支持预留实例。您无需在中指定任何内容 AWS ParallelCluster ，实例就会自动选中。

使用分区预留实例时，您可以不在集群配置中指定置放群组，从而避免潜在的容量不足错误。

### 已过时/不推荐-使用 AWS ParallelCluster 3 中的`RunInstances`自定义功能进行`targeted`按需容量预留 (ODCR)
<a name="odcr-run-instances"></a>

**警告**  
从 3.3.0 AWS ParallelCluster 版开始，我们不建议使用这种方法。本节仍然是使用先前版本的实施参考。
此方法与 Slurm 的多实例类型分配不兼容。

您可以覆盖集群队列中配置的每个计算资源的 Amazon EC2 `RunInstances` 参数。为此，请在集群的头节点上创建包含以下代码片段内容的 `/opt/slurm/etc/pcluster/run_instances_overrides.json` 文件：
+ `${queue_name}` 是要对其应用覆盖的队列的名称。
+ `${compute_resource_name}` 是要对其应用覆盖的计算资源。
+ `${overrides}`是一个任意 JSON 对象，其中包含用于队列和实例类型特定组合的`RunInstances`替代列表。覆盖语法必须遵循与 [run\$1instances](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2.html#EC2.Client.run_instances) boto3 调用中记录的规范相同的规范。

```
{
    "${queue_name}": {
        "${compute_resource_name}": {
            ${overrides}
        },
        ...
    },
    ...
}
```

例如，以下 JSON 将 ODCR 组 `group_arn` 配置为用于 `my-queue` 和 `my-compute-resource` 中配置的 `p4d.24xlarge` 实例。

```
{
    "my-queue": {
        "my-compute-resource": {
            "CapacityReservationSpecification": {
                "CapacityReservationTarget": {
                    "CapacityReservationResourceGroupArn": "group_arn"
                }
            }
        }
    }
}
```

生成此 JSON 文件后，负责集群扩展的 AWS ParallelCluster 守护程序会自动使用覆盖配置启动实例。要确认实例预置是否使用了指定的参数，请查看以下日志文件：
+ `/var/log/parallelcluster/clustermgtd`（对于静态容量）
+ `/var/log/parallelcluster/slurm_resume.log`（对于动态容量）

如果参数正确，您会发现包含以下内容的日志条目：

```
Found RunInstances parameters override. Launching instances with: <parameters_list>
```

### 过时/不推荐 - 创建包含 `targeted` 按需容量预留（ODCR）的集群
<a name="odcr-create-cluster"></a>

**警告**  
从 3.3.0 AWS ParallelCluster 版开始，我们不建议使用这种方法。本节仍然是使用先前版本的实施参考。
此方法与 [Slurm 的多实例类型分配](slurm-multiple-instance-allocation-v3.md)不兼容。

1. **创建资源组以对容量分组。**

   ```
   $ aws resource-groups create-group --name EC2CRGroup \ 
       --configuration '{"Type":"AWS::EC2::CapacityReservationPool"}' '{"Type":"AWS::ResourceGroups::Generic", "Parameters": [{"Name": "allowed-resource-types", "Values": ["AWS::EC2::CapacityReservation"]}]}'
   ```
**注意**  
资源组不支持由其他账户共享的资源。  
如果目标 ODCR 由其他账户共享，则无需创建资源组。在步骤 3 中使用 `CapacityReservationId` 代替资源组。  

   ```
   #!/bin/bash
   set -e
   
   # Override run_instance attributes
   cat > /opt/slurm/etc/pcluster/run_instances_overrides.json << EOF
   {
       "my-queue": {
           "my-compute-resource": {
               "CapacityReservationSpecification": {
                   "CapacityReservationTarget": {
                       "CapacityReservationId": "cr-abcdef01234567890"
                   }
               }
           }
       }
   }
   EOF
   ```

   向资源组中添加容量预留。每次创建新的 ODCR 时，请将其添加到群组预留中。`ACCOUNT_ID`替换为您的账户 ID、`PLACEHOLDER_CAPACITY_RESERVATION`容量预留 ID 和`REGION_ID`您的 AWS 区域 ID（例如 us-east-1）。

   ```
   $ aws resource-groups group-resources --region REGION_ID --group EC2CRGroup \
       --resource-arns arn:aws:ec2:REGION_ID:ACCOUNT_ID:capacity-reservation/PLACEHOLDER_CAPACITY_RESERVATION
   ```

   在本地计算机中创建策略文档。`ACCOUNT_ID`替换为您的账户 ID 和 `REGION_ID` AWS 区域 ID（例如 us-east-1）。

   ```
   cat > policy.json << EOF
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "RunInstancesInCapacityReservation",
               "Effect": "Allow",
               "Action": "ec2:RunInstances",
               "Resource": [
                   "arn:aws:ec2:REGION_ID:ACCOUNT_ID:capacity-reservation/*",
                   "arn:aws:resource-groups:REGION_ID:ACCOUNT_ID:group/*"
               ]
           }
       ]
   }
   EOF
   ```

1. ** AWS 账户 使用您创建的 json 文件在您的上创建 IAM 策略。**

   ```
   $ aws iam create-policy --policy-name RunInstancesCapacityReservation --policy-document file://policy.json
   ```

1. **在实例上本地创建以下安装后脚本并将其命名为 `postinstall.sh`。**

   `ACCOUNT_ID`替换为你的 AWS 账户 身份证和`REGION_ID`你的 AWS 区域 身份证（例如 us-east-1）。

   ```
   #!/bin/bash
   set -e
   
   # Override run_instance attributes
   cat > /opt/slurm/etc/pcluster/run_instances_overrides.json << EOF
   {
       "my-queue": {
           "my-compute-resource": {
               "CapacityReservationSpecification": {
                   "CapacityReservationTarget": {
                       "CapacityReservationResourceGroupArn": "arn:aws:resource-groups:REGION_ID:ACCOUNT_ID:group/EC2CRGroup"
                   }
               }
           }
       }
   }
   EOF
   ```

   将该文件上传到 Amazon S3 存储桶。*amzn-s3-demo-bucket*替换为您特定的 S3 存储桶名称。

   ```
   $ aws s3 mb s3://amzn-s3-demo-bucket
   aws s3 cp postinstall.sh s3://amzn-s3-demo-bucket/postinstall.sh
   ```

1. **创建本地集群配置，将占位符替换为您自己的值。**

   ```
   Region: REGION_ID
   Image:
     Os: alinux2
   HeadNode:
     InstanceType: c5.2xlarge
     Ssh:
       KeyName: YOUR_SSH_KEY
     Iam:
       S3Access:
         - BucketName: amzn-s3-demo-bucket
       AdditionalIamPolicies:
         - Policy: arn:aws:iam::ACCOUNT_ID:policy/RunInstancesCapacityReservation
     ## This post-install script is executed after the node is configured.
     ## It is used to install scripts at boot time and specific configurations
     ## In the script below we are overriding the calls to RunInstance to force
     ## the provisioning of our my-queue partition to go through
     ## the On-Demand Capacity Reservation
     CustomActions:
       OnNodeConfigured:
         Script: s3://amzn-s3-demo-bucket/postinstall.sh
     Networking:
       SubnetId: YOUR_PUBLIC_SUBNET_IN_TARGET_AZ
   
   Scheduling:
     Scheduler: slurm
     SlurmQueues:
       - Name: my-queue
         ComputeResources:
           - MinCount: 0
             MaxCount: 100
             InstanceType: p4d.24xlarge
             Name: my-compute-resource
             Efa:
               Enabled: true
         Networking:
           ## PlacementGroup:
           ##   Enabled: true ## Keep PG disabled if using targeted ODCR
           SubnetIds:
             - YOUR_PRIVATE_SUBNET_IN_TARGET_AZ
   ```

1. **创建集群。**

   使用以下命令来创建集群。`cluster-config.yaml`替换为配置文件名、`cluster-dl`集群*REGION\$1ID*名称和区域 ID（例如 us-east-1）。

   ```
   $ pcluster create-cluster --cluster-configuration cluster-config.yaml --cluster-name cluster-dl --region REGION_ID
   ```

   创建集群后，安装后脚本将在头节点中运行。该脚本将会创建 `run_instances_overrides.json` 文件并覆盖对 `RunInstances` 的调用，以将分区强制预置为完成按需容量预留。

   负责集群扩展的 AWS ParallelCluster 守护程序会自动将此配置用于启动的新实例。要确认是否将指定的参数用于预置实例，您可以查看以下日志文件：
   + `/var/log/parallelcluster/clustermgtd`（对于静态容量 - [`MinCount`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-MinCount)` > 0`）
   + `/var/log/parallelcluster/slurm_resume.log`（对于动态容量）

   如果参数正确，您会发现包含以下内容的日志条目。

   ```
   Found RunInstances parameters override. Launching instances with: <parameters_list>
   ```

 **更新 `RunInstances` 覆盖** 

您可以随时更新生成的 JSON 配置，而无需停止计算实例集。应用更改后，所有新实例都将使用更新的配置启动。如果您需要将更新的配置应用于正在运行的节点，请通过强制终止实例 AWS ParallelCluster 来回收节点，然后等待替换这些节点。为此，您可以从 Amazon EC2 控制台或 AWS CLI中终止实例，或者将 Slurm 节点设置为 `DOWN` 或 `DRAIN` 状态。

使用以下命令将 Slurm 节点设置为 `DOWN` 或 `DRAIN`。

```
$ scontrol update nodename=my-queue-dy-my-compute-resource-1 state=down reason=your_reason
scontrol update nodename=my-queue-dy-my-compute-resource-1 state=drain reason=your_reason
```

# 使用容量块（CB）启动实例
<a name="launch-instances-capacity-blocks"></a>

AWS ParallelCluster 支持 Machine Learn [ing 的[按需容量预留 (ODCR)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-reservations.html) 和容量块 (CB)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-capacity-blocks.html)。与 ODCR 不同，CB 可以有未来的开始时间，并且有时间限制。有关使用 ODCR 启动的更多信息，请参阅[使用按需容量预留（ODCR）启动实例](launch-instances-odcr-v3.md)。

## 将 CB 与 AWS ParallelCluster
<a name="capacity-blocks-with-pc"></a>

要将您的新集群或现有集群配置为使用 CB，您的 AWS 账户中首先需要有一个有效的 CB。您可以按照官方文档使用 AWS 管理控制台 AWS Command Line Interface、或 SDK 查找和购买可用的 CB。获得有效的 CB 后，您可以在 AWS ParallelCluster 配置文件中设置 CB Amazon 资源名称 (ARN) 和相关参数。有关更多信息，请参阅[查找和购买容量块（CB）](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/capacity-blocks-using.html#capacity-blocks-purchase)

### 集群配置中的 CB
<a name="capacity-blocks-cluster-config"></a>

要将 CB 用于特定队列，必须使用`CapacityReservationId`参数。将此参数配置为现有的 CB ID。您可以从用于创建 CB 的 AWS 管理控制台 AWS CLI、或 SDK 中获取 CB ARN。

您必须`CapacityType = CAPACITY_BLOCK`为要使用 CB 的队列进行设置。将其设置为`InstanceType`计算资源的（与 CB 的 Amazon 弹性计算云实例类型相同）。

当您在计算资源级别指定时，`InstanceType`是可选的，因为它将自动从预留中检索。`CapacityReservationId`

使用时`CapacityType = CAPACITY_BLOCK`，`MaxCount`必须等于`MinCount`和大于 0，因为所有属于 CB 预留的实例都作为静态节点进行管理。

在创建集群时，头节点会等待所有静态节点准备就绪，然后才会发出集群创建成功的信号。但是，当您使用时`CapacityType = CAPACITY_BLOCK`，属于与之关联的计算资源一部分的节点将不会被考虑用于此检查。即使所有配置的集群都未处于活动状态，也会创建集群。

以下配置文件片段显示了在 AWS ParallelCluster 配置文件中启用所需的参数。

```
SlurmQueues:
 - Name: string
   CapacityType: CAPACITY_BLOCK
   ComputeResources:
   - Name: string
     InstanceType: String (EC2 Instance type of the CB)
     MinCount: integer (<= total capacity of the CB)
     MaxCount: integer (equal to MinCount)
     CapacityReservationTarget:
        CapacityReservationId: String (CB id)
```

### 如何 AWS ParallelCluster 使用容量块 (CB)
<a name="how-parallelcluster-use-capacity-blocks"></a>

AWS ParallelCluster 以一种特殊的方式管理与之关联的静态节点。 AWS ParallelCluster 即使 CB 尚未激活，也会创建集群，并且一旦 CB 处于活动状态，实例就会自动启动。

与计算资源相对应、与之关联但尚未处于活动状态的Slurm节点将一直处于维护状态，直到它们到达 CB 开始时间。 Slurm节点保持 reservation/maintenance 状态并与 slurm 管理员用户关联。这意味着他们可以接受工作，但这些工作将一直保留，`pending`直到保留被移除。

AWS ParallelCluster 自动更新Slurm预留并将相关的 CB 节点置于维护状态（对应于 CB 状态）。当 CB 处于活动状态时，Slurm预留将被移除，节点将启动并可用于待处理的任务或提交的新作业。

当到达 CB 结束时间时，节点将移回某个 reservation/maintenance 状态。当 CB 不再处于活动状态并且实例终止时，用户可以将任务分配到新的队列/计算资源。 resubmit/requeue 

# AMI 修补和亚马逊 EC2 实例更换
<a name="instance-updates-ami-patch-v3"></a>

为确保所有动态启动的集群计算节点的行为方式一致，请 AWS ParallelCluster 禁用集群实例自动操作系统更新。此外，还会为每个版本 AWS ParallelCluster 及其关联 AWS ParallelCluster AMIs 的 CLI 构建一组特定的。这组特定的版本 AMIs 保持不变，只有它们所针对的 AWS ParallelCluster 版本支持。 AWS ParallelCluster AMIs对于已发布的版本未更新。

但是，由于突发的安全问题，客户可能需要向这些补丁添加补丁， AMIs 然后使用已修补的 AMI 更新其集群。这与 [AWS ParallelCluster 责任共担模式](security.md)一致。

要查看您当前使用的 AWS ParallelCluster CLI 版本 AWS ParallelCluster AMIs 支持的特定集合，请运行：

```
$ pcluster version
$ pcluster list-official-images
```

 AWS ParallelCluster 头节点是一个静态实例，你可以手动更新它。从 3.0.0 AWS ParallelCluster 版开始，完全支持重启和重启头节点。

如果您的实例具有临时实例存储，则必须记得在手动更新之前保存实例存储数据。有关更多信息，请参阅 *Amazon Linux 实例 EC2 用户指南中的 `HeadNode` `LocalStorage` [[`LocalStorage`](HeadNode-v3.md#HeadNode-v3-LocalStorage)](HeadNode-v3.md)//`EphemeralVolume`[](HeadNode-v3.md#yaml-HeadNode-LocalStorage-EphemeralVolume)集群配置和带有实例存储卷的实例*[类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html#instance-store-volumes)。

计算节点是临时实例。默认情况下，只能从头节点访问它们。从 AWS ParallelCluster 版本 3.0.0 开始，在使用以下命令停止计算队列后，您可以通过修改 [`Scheduling`](Scheduling-v3.md)//[`SlurmQueues`[`Image`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-Image)](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`CustomAmi`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Image-CustomAmi)参数并运行[`pcluster update-cluster`](pcluster.update-cluster-v3.md)命令来更新与计算实例关联的 AMI：[`pcluster update-compute-fleet`](pcluster.update-compute-fleet-v3.md)

```
$ pcluster update-compute-fleet-status --status STOP_REQUESTED
```

可以使用以下方法之一为计算节点自动创建更新的自定义 AMI：
+ 将 [`pcluster build-image`](pcluster.build-image-v3.md) 命令与更新的 [Build](Build-v3.md)/[`ParentImage`](Build-v3.md#yaml-build-image-Build-ParentImage) 结合使用。
+ 使用 [`Build`](Build-v3.md)/[`UpdateOsPackages`](Build-v3.md#Build-v3-UpdateOsPackages)/[`Enabled`](Build-v3.md#yaml-build-image-Components-UpdateOsPackages-Enabled):`true` 运行构建。

## 头节点实例更新或替换
<a name="instance-updates-headnode-v3"></a>

在某些情况下，可能需要重启或重新引导头节点。例如，当您手动更新操作系统，或者 [AWS 实例计划停用](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-retirement.html)强制重启头节点实例时，必须执行此操作。

如果实例没有临时驱动器，则可以随时停止并重新启动该实例。在计划停用的情况下，启动已停止的实例会将其迁移为使用新硬件。

同样，您可以手动停止和启动没有实例存储的实例。对于没有临时卷的实例的这种情况以及其他情况，请参阅[停止和启动集群的头节点](#instance-headnode-stop-start-v3)。

如果实例具有临时驱动器且已停止，则实例存储中的数据将会丢失。您可以根据[实例存储卷](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html#instance-store-volumes)中的表确定用于头节点的实例类型是否具有实例存储。

## 保存临时驱动器中的数据
<a name="instance-updates-save-data-v3"></a>

从 AWS ParallelCluster 版本 3.0.0 开始，每种实例类型都完全支持头节点重启和重启。但如果实例有临时驱动器，其数据将会丢失。在重启头节点之前，请按照以下步骤保留数据。

要检查是否有需要保留的数据，请查看 [`EphemeralVolume`](HeadNode-v3.md#yaml-HeadNode-LocalStorage-EphemeralVolume)/[`MountDir`](HeadNode-v3.md#yaml-HeadNode-LocalStorage-EphemeralVolume-MountDir) 文件夹（默认情况下为 `/scratch`）中的内容。

您可以将数据传输到根卷或连接到集群的共享存储系统，例如 Amazon FSx、Amazon EFS 或 Amazon EBS。请注意，将数据传输到远程存储可能会产生额外费用。

保存数据后，继续[停止和启动集群的头节点](#instance-headnode-stop-start-v3)。

## 停止和启动集群的头节点
<a name="instance-headnode-stop-start-v3"></a>

1. 确认集群中没有任何正在运行的作业。

   使用时 Slurm 调度器：
   + 如果未指定 `sbatch` `--no-requeue` 选项，则对正在运行的作业进行重新排队。
   + 如果指定了 `--no-requeue` 选项，则正在运行的作业将会失败。

1. 请求集群计算实例集停止：

   ```
   $ pcluster update-compute-fleet --cluster-name cluster-name --status STOP_REQUESTED
   {
     "status": "STOP_REQUESTED",
     ...
   }
   ```

1. 等到计算实例集状态变为 `STOPPED`：

   ```
   $ pcluster update-compute-fleet --cluster-name cluster-name --status STOP_REQUESTED
   {
     "status": "STOPPED",
     ...
   }
   ```

1. 要通过操作系统重启或实例重启进行手动更新，您可以使用 AWS 管理控制台 或 AWS CLI。下面是使用 AWS CLI的示例。

   ```
   # Retrieve head node instance id
   $ pcluster describe-cluster --cluster-name cluster-name --status STOP_REQUESTED
   {
     "headNode": {
     "instanceId": "i-1234567890abcdef0",
     ...
   },
     ...
   }
   # stop and start the instance
   $ aws ec2 stop-instances --instance-ids 1234567890abcdef0
   {
     "StoppingInstances": [
       {
         "CurrentState": {
           "Name": "stopping"
           ...
         },
         "InstanceId": "i-1234567890abcdef0",
         "PreviousState": {
           "Name": "running"
           ...
         }
       }
     ]
   }
   $ aws ec2 start-instances --instance-ids 1234567890abcdef0
   {
     "StartingInstances": [
       {
         "CurrentState": {
           "Name": "pending"
           ...
         },
         "InstanceId": "i-1234567890abcdef0",
         "PreviousState": {
           "Name": "stopped"
           ...
         }
       }
     ]
   }
   ```

1. 启动集群计算实例集：

   ```
   $ pcluster update-compute-fleet --cluster-name cluster-name --status START_REQUESTED
   {
     "status": "START_REQUESTED",
     ...
   }
   ```

# 操作系统
<a name="operating-systems-v3"></a>

AWS ParallelCluster 支持亚马逊 Linux 2、亚马逊 Linux 2023、Ubuntu24.04、Ubuntu 22.04、Ubuntu 20.04、红帽企业 Linux 8 (RHEL8)、Rocky 8、红帽企业 Linux 9 () 和 Rocky 9。RHEL9 AWS ParallelCluster AMIs 为特定操作系统预先构建，有关 AMIs提供的更多详细信息， AWS ParallelCluster 请参阅。[`Image` 部分](Image-v3.md)

## 操作系统注意事项
<a name="OS-Consideration-v3"></a>

**Ubuntu 22.04 和 Ubuntu 24.04**

Ubuntu 22.04 和 Ubuntu 24.04 需要更安全的密钥才能使用 SSH，并且默认情况下不支持 RSA 密钥。请生成 ed25519 密钥并使用该密钥进行集群创建。

Ubuntu 22.04 无法更新到最新的内核，因为该内核没有 FSx 客户端。

**RHEL 8**

RedHat 从版本 3.6.0 开始添加企业 Linux 8.7 (rhel8)。 AWS ParallelCluster 如果您将集群配置为使用 rhel8，则任何实例类型的按需成本都高于将集群配置为使用支持的其它操作系统时的按需成本。

有关定价的更多信息，请参阅[按需定价](https://aws.amazon.com/ec2/pricing/on-demand)和 [Amazon Elastic Compute Cloud 上如何提供和定价 Red Hat Enterprise Linux？](https://aws.amazon.com/partners/redhat/faqs/#Pricing_and_Billing)。

**Rocky 8**

AWS ParallelCluster 3.8.0 支持 Rocky Linux 8，但预先构建的 Rocky Linux 8 AMIs （适用于 x86 和 ARM 架构）不可用。 AWS ParallelCluster 3.8.0 支持使用属性使用自定义 AMIs 方式使用 Rocky Linux 8 创建集群。[CustomAmi](Image-v3.md#yaml-Image-CustomAmi)有关构建自定义的更多信息 AMIs，请参阅[AWS ParallelCluster AMI 自定义](custom-ami-v3.md)。

要从基本 Rocky Linux 8 AMI 构建自定义 AMI，你可以考虑订阅 Mark AWS [etplace](https://aws.amazon.com/marketplace) 上线的 [Rocky Linux 8 AMIs](https://aws.amazon.com/marketplace/seller-profile?id=01538adc-2664-49d5-b926-3381dffce12d)。请务必在 Mark AWS etplace AMIs 上查看 Rocky Linux 8 的定价和订阅费用。或者，你也可以使用[官方的 Rocky Linux 8 AMIs](https://rockylinux.org/cloud-images/) 作为你的基础 AMI。

**Rocky9**

AWS ParallelCluster 3.9.0 支持 Rocky Linux 9，但预先构建的 Rocky Linux 9 AMIs （适用于 x86 和 ARM 架构）不可用。 AWS ParallelCluster 3.9.0 支持使用属性使用自定义 AMIs 方式使用 Rocky Linux 9 创建集群。[CustomAmi](Image-v3.md#yaml-Image-CustomAmi)有关构建自定义的更多信息 AMIs，请参阅 [AWS ParallelCluster AMI 自定义](custom-ami-v3.md)。要从基本 Rocky Linux 9 AMI 构建自定义 AMI，你也可以使用[官方的 Rocky Linux 9 AMIs](https://rockylinux.org/cloud-images/) 作为基础 AMI。如果基础 AMI 没有最新的内核，则自定义 Rocky Linux 9 AMI 的构建可能会失败。要在构建 AMI 之前升级内核，请执行以下操作：
+ 通过 [https://rockylinux.org/cloud-images/](https://rockylinux.org/cloud-images/)，使用 rocky9 AMI id 启动实例
+ 通过 ssh 登录实例并运行以下命令：`sudo yum -y update`
+ 从实例创建映像以用作 `ParentImage`

 