使用 ODCR(按需容量预留)启动实例 - Amazon ParallelCluster
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

使用 ODCR(按需容量预留)启动实例

On-Demand Capacity Reservations(ODCR),您可在特定可用区中为Amazon EC2实例预留容量达任意持续时间。通过这种方式,您能够独立于由提供的账单账单账单账单账户。Savings Plans要么区域性预留实例.

您可以配置open要么targetedODCR。打开ODCR 涵盖任何与 ODCR 属性(实例类型、平台、可用区)匹配的实例。TargetedODCR 必须在Amazon CLIec2run-instances命令。确定和 ODCR 是否为open要么targeted,运行Amazon CLIec2describe-capacity-reservation命令。

您还可以在 ODCR 的集群置放群组中创建 ODCR。CPG ODCR(或 CPG/ODCR)。

多个 ODCR 可以分组到资源组中。这可以在run-instances覆盖以同时瞄准多个 ODCR。有关资源组的更多信息,请参阅什么是资源组?中的Resource Groups 和标签用户指南.

将 ODCR 与Amazon ParallelCluster

任何 ODCR 都会自动支持打开 ODCRAmazon ParallelCluster. 使用开放的 ODCR 时,您无需在中指定任何内容Amazon ParallelCluster. 系统会自动为集群选择实例。您可以指定现有置放群组Amazon ParallelCluster创建新的激活。

对该项的支持targeted增加了 ODCRAmazon ParallelCluster3.1.1。我们引入了一种覆盖 EC2 的机制RunInstances参数并传递有关预留的信息,以用于中配置的每个计算资源Amazon ParallelCluster. 这种机制与使用targetedODCR。对于这种情况,您必须指定run-instances覆盖配置,如下一部分所述。

如果您使用的是targetedODCR,您可以指定置放群组。与前面的情况一样,您必须指定run-instances覆盖配置。

如果Amazon创建了一个targetedODCR,或者您有一组特定的预留实例,则无法指定置放群组,因为规则由Amazon可能与置放群组设置冲突。因此,如果您的应用程序需要置放群组,则需要使用CPG ODCR. 无论如何,你需要指定run-instances覆盖配置。

如果您使用的是 CPG ODCR,则必须指定run-instances覆盖配置,您必须在群集配置中指定相同的置放群组。

将预留实例与结合使用Amazon ParallelCluster

预留实例是不同的而不是容量预留 (ODCR)。有2 种类型预留实例的数量。一个区域性的预留实例不会预留容量。一个区域的预留实例可在指定可用区中预留容量。

如果您有区域预留实例,则没有容量预留,并且可能会出现容量不足错误。如果您有区域预留实例,则您有容量预留,但没有run-instances可用于指定它们的 API 参数。

预留实例受任何Amazon ParallelCluster版本。您无需在中指定任何内容Amazon ParallelCluster并自动选择实例。

使用地区预留实例时,您可以省略集群配置中的置放群组规范,从而避免潜在的容量不足错误。

使用RunInstances自定义Amazon ParallelCluster3 对于targeted按需容量预留 (ODCR)

EC2RunInstances可以为群集队列中配置的每个计算资源覆盖参数。为此,请务必创建/opt/slurm/etc/pcluster/run_instances_overrides.json集群的 head 节点上的文件,其中包含以下代码片段内容:

  • ${queue_name}: 是要应用覆盖的队列的名称。

  • ${compute_resource_name}: 是要应用覆盖的计算资源。

  • ${overrides}: 是一个任意 JSON 对象,其中包含RunInstances用于队列和实例类型的特定组合的覆盖。覆盖语法需要遵循在运行实例boto3 打电话。

{     "${queue_name}": {         "${compute_resource_name}": {             ${overrides}         },         ...     },     ... }

例如,以下 JSON 配置了 ODCR 组group_arn用于p4d.24xlarge队列中配置的实例my-queue在计算资源中my-compute-resource.

{     "my-queue": {         "my-compute-resource": {             "CapacityReservationSpecification": {                 "CapacityReservationTarget": {                     "CapacityReservationResourceGroupArn": "group_arn"                 }             }         }     } }

生成这样的 JSON 文件后,Amazon ParallelCluster负责集群扩展的守护进程会自动选择覆盖配置,并开始使用它来启动实例。为了确认指定的参数是否正在用于实例预配,您可以查看以下日志文件:

  • /var/log/parallelcluster/clustermgtd(在静态容量的情况下)

  • /var/log/parallelcluster/slurm_resume.log(在动态容量的情况下)

如果参数被正确使用,你会发现一个包含以下内容的日志条目:

Found RunInstances parameters override. Launching instances with: <parameters_list>

创建一个带targeted按需容量预留 (ODCR)

  1. 创建资源组,以对容量进行分组。

    $ aws resource-groups create-group --name EC2CRGroup \   --configuration '{"Type":"Amazon::EC2::CapacityReservationPool"}' '{"Type":"Amazon::ResourceGroups::Generic", "Parameters": [{"Name": "allowed-resource-types", "Values": ["Amazon::EC2::CapacityReservation"]}]}'
    注意

    资源组不支持其他账户共享的资源。

    如果目标 ODCR 由其他账户 Savinge ODCR 共享,则无需创建资源组。使用CapacityReservationId而不是步骤 3 中的资源组:

    #!/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和你的Amazon区域 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和你的Amazon区域 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
  2. 在上创建 IAM 策略Amazon账户使用你创建的 json 文件。

    $ aws iam create-policy --policy-name RunInstancesCapacityReservation --policy-document file://policy.json
  3. 在实例上本地创建以下名称为的安装后脚本postinstall.sh.

    请务必替换替换的ACCOUNT_ID账户 ID 和REGION_ID和你的Amazon区域 ID (例如 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

    将文件上传到 S3。请务必替换替换的S3_NAME_BUCKET具有唯一的存储桶名称。

    $ aws s3 mb s3://S3_NAME_BUCKET aws s3 cp postinstall.sh s3://S3_NAME_BUCKET/postinstall.sh
  4. 创建本地集群配置,并将占位符替换为您自己的值。

    Region: REGION_ID Image:   Os: alinux2 HeadNode:   InstanceType: c5.2xlarge   Ssh:     KeyName: YOUR_SSH_KEY   Iam:     S3Access:       - BucketName: S3_NAME_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://S3_NAME_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
  5. 创建集群

    请务必替换替换的cluster-config.yaml用你的配置文件名,cluster-dl使用您为集群选择的名称,以及REGION_ID和你的Amazon区域编号。

    $ pcluster create-cluster --cluster-configuration cluster-config.yaml --cluster-name cluster-dl --region REGION_ID

    创建群集后,将在头节点中执行安装后脚本。在脚本中,我们正在创建run_instances_overrides.json文件并覆盖对RunInstances强制分区的置备通过按需容量预留。

    这些区域有:Amazon ParallelCluster负责集群扩展的守护进程将自动选择此配置并开始使用它来启动实例。为了确认指定的参数是否正在用于实例预配,您可以查看以下日志文件:

    • /var/log/parallelcluster/clustermgtd(在静态容量的情况下-MinCount > 0

    • /var/log/parallelcluster/slurm_resume.log(在动态容量的情况下)

    如果正确使用了参数,您会发现一个包含以下内容的日志条目:

    Found RunInstances parameters override. Launching instances with: <parameters_list>

正在更新RunInstances覆盖

生成的 JSON 配置可以随时更新,而无需停止计算队列。应用更改后,任何新实例启动都将使用更新的配置。如果您需要将更新的配置应用于正在运行的节点,则必须通过强制终止实例来回收节点,然后等待Amazon ParallelCluster来替换那些节点。这可以通过以下方式实现:通过 EC2 终止实例,或者在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