构建自定义 AWS ParallelCluster AMI - AWS ParallelCluster

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

构建自定义 AWS ParallelCluster AMI

使用 AWS ParallelCluster 命令行界面 (CLI) 或 API 时,您只需为创建或更新 AWS ParallelCluster 映像和集群时创建的 AWS 资源付费。有关更多信息,请参阅 AWS 使用的服务 AWS ParallelCluster

AWS ParallelCluster 用户界面基于无服务器架构构建,在大多数情况下,您可以在 AWS 免费套餐类别中使用它。有关更多信息,请参阅 AWS ParallelCluster UI 成本

重要

如果构建自定义 AMI,则必须重复执行用于随每个新的 AWS ParallelCluster 版本创建自定义 AMI 的步骤。

在进一步阅读之前,我们建议您首先查看自定义引导操作一节。确定未来 AWS ParallelCluster 版本是否可以脚本化并支持您要进行的修改。

尽管通常构建自定义 AMI 并不理想,但在某些特定场景中,需要 AWS ParallelCluster 为其构建自定义 AMI。本教程介绍如何为这些场景构建自定义 AMI。

先决条件

如何自定义 AWS ParallelCluster AMI

有两种方法可以构建自定义 AWS ParallelCluster AMI。这两种方法之一是使用 CLI 构建新 AM AWS ParallelCluster I。另一种方法需要进行手动修改以构建可在您的 AWS 账户下使用的新 AMI。

构建自定义 AWS ParallelCluster AMI

如果您有自定义 AMI 和软件,则可以在其 AWS ParallelCluster 上应用所需的更改。 AWS ParallelCluster 依靠 EC2 Image Builder 服务来构建自定义 AMI。有关更多信息,请参阅 Image Builder User Guide

关键点:

  • 该过程需要 1 小时左右的时间。如果在构建时需要安装其他Build/Components,则此时间可能会有所不同。

  • AMI 标有主要组件的版本。其中包括内核、调度器和 EFA 驱动程序。还会在 AMI 描述中报告一部分组件版本。

  • 从 AWS ParallelCluster 3.0.0 开始,可以使用一组新的 CLI 命令来管理映像的生命周期。这包括 build-imagelist-imagesdescribe-imagedelete-image

  • 这种方法是可重复的。您可以重新运行该方法以使 AMI 保持更新(例如操作系统更新),然后在更新现有集群时使用这些 AMI。

注意

如果你 AWS 在中国分区中使用这种方法,你可能会遇到网络错误。例如,当pcluster build-image命令从操作系统存储库 GitHub 或从操作系统存储库下载软件包时,您可能会看到这些错误。如果发生这种情况,我们建议使用以下替代方法之一:

  1. 按照修改 AWS ParallelCluster AMI 方法绕过此命令。

  2. 在另一个分区和区域(例如 us-east-1)中构建映像,然后对其进行存储-还原,以将其移动到中国区域。有关更多信息,请参阅 Amazon EC2 用户指南中的使用 S3 存储和恢复 AMI

步骤:

  1. 配置您的 AWS 账户 证书,以便 AWS ParallelCluster 客户端可以代表您调用 AWS API 操作。有关所需权限的列表,请参阅AWS Identity and Access Management 中的权限 AWS ParallelCluster

  2. 创建基本的构建映像 配置文件。为此,请指定用于构建映像以及 ParentImageInstanceType。这些步骤用作创建 AMI 的起点。有关可选构建参数的更多信息,请参阅映像配置

    Build: InstanceType: <BUILD_INSTANCE_TYPE> ParentImage: <BASE_AMI_ID>
  3. 使用 CLI 命令pcluster build-image从您作为基础提供的 AMI 开始构建 AMI。 AWS ParallelCluster

    $ pcluster build-image --image-id IMAGE_ID --image-configuration IMAGE_CONFIG.yaml --region REGION { "image": { "imageId": "IMAGE_ID", "imageBuildStatus": "BUILD_IN_PROGRESS", "cloudformationStackStatus": "CREATE_IN_PROGRESS", "cloudformationStackArn": "arn:aws:cloudformation:us-east-1:123456789012:stack/IMAGE_ID/abcd1234-ef56-gh78-ij90-1234abcd5678", "region": "us-east-1", "version": "3.7.0" } }
    警告

    pcluster build-image 使用默认 VPC。如果您使用 AWS Control Tower 或 AWS 着陆区删除默认 VPC,则必须在映像配置文件中指定子网 ID。有关更多信息,请参阅 SubnetId

    有关其他参数的列表,请参阅 pcluster build-image 命令参考页面。前面命令的结果如下所述:

    • 堆 CloudFormation 栈是根据映像配置创建的。该堆栈包括构建所需的所有 EC2 Image Builder 资源。

    • 创建的资源包括可以向其添加自定义图像生成器 AWS ParallelCluster 组件的官方 Image Builder 组件。要了解如何创建自定义组件,请参阅面向公共部门客户的 HPC 研讨会 中的自定义 AMI 示例

    • EC2 Image Builder 启动构建实例、应用说明 AWS ParallelCluster 书、安装 AWS ParallelCluster 软件堆栈并执行必要的配置任务。 AWS ParallelCluster 这本食谱用于构建和引导 AWS ParallelCluster。

    • 停止该实例,并在其基础上创建新的 AMI。

    • 从新创建的 AMI 启动另一个实例。在测试阶段,EC2 Image Builder 会运行 Image Builder 组件中定义的测试。

    • 如果构建成功,则会删除堆栈。如果构建失败,则会保留堆栈以供检查。

  4. 您可以通过运行以下命令来监控构建过程的状态。构建完成后,您可以运行该 AMI 以便检索响应中给出的 AMI ID。

    $ pcluster describe-image --image-id IMAGE_ID --region REGION # BEFORE COMPLETE { "imageConfiguration": { "url": "https://parallelcluster-1234abcd5678efgh-v1-do-not-delete.s3.amazonaws.com/parallelcluster/3.7.0/images/IMAGE_ID-abcd1234efgh5678/configs/image-config.yaml?...", }, "imageId": "IMAGE_ID", "imagebuilderImageStatus": "BUILDING", "imageBuildStatus": "BUILD_IN_PROGRESS", "cloudformationStackStatus": "CREATE_IN_PROGRESS", "cloudformationStackArn": "arn:aws:cloudformation:us-east-1:123456789012:stack/IMAGE_ID/abcd1234-ef56-gh78-ij90-1234abcd5678", "region": "us-east-1", "version": "3.7.0", "cloudformationStackTags": [ { "value": "3.7.0", "key": "parallelcluster:version" }, { "value": "IMAGE_ID", "key": "parallelcluster:image_name" }, ... ], "imageBuildLogsArn": "arn:aws:logs:us-east-1:123456789012:log-group:/aws/imagebuilder/ParallelClusterImage-IMAGE_ID", "cloudformationStackCreationTime": "2022-04-05T21:36:26.176Z" } # AFTER COMPLETE { "imageConfiguration": { "url": "https://parallelcluster-1234abcd5678efgh-v1-do-not-delete.s3.us-east-1.amazonaws.com/parallelcluster/3.7.0/images/IMAGE_ID-abcd1234efgh5678/configs/image-config.yaml?Signature=..." }, "imageId": "IMAGE_ID", "imageBuildStatus": "BUILD_COMPLETE", "region": "us-east-1", "ec2AmiInfo": { "amiName": "IMAGE_ID 2022-04-05T21-39-24.020Z", "amiId": "ami-1234stuv5678wxyz", "description": "AWS ParallelCluster AMI for alinux2, kernel-4.14.238-182.422.amzn2.x86_64, lustre-2.10.8-5.amzn2.x86_64, efa-1.13.0-1.amzn2.x86_64, dcv-2021.1.10598-1.el7.x86_64, slurm-20-11-8-1", "state": "AVAILABLE", "tags": [ { "value": "2021.3.11591-1.el7.x86_64", "key": "parallelcluster:dcv_version" }, ... ], "architecture": "x86_64" }, "version": "3.7.0" }
  5. 要创建集群,请在集群配置内的 CustomAmi 字段中输入该 AMI ID。

对 AMI 创建过程进行故障排除和监控

映像创建将在大约一个小时后完成。您可以通过运行 pcluster describe-image 命令或日志检索命令来监控该过程。

$ pcluster describe-image --image-id IMAGE_ID --region REGION

build-image命令使用构建映像所需的所有 Amazon EC2 资源创建一个 CloudFormation 堆栈,并启动 EC2 Image Builder 流程。

运行build-image命令后,可以使用来检索 CloudFormation 堆栈事件pcluster get-image-stack-events。您可以使用 --query 参数来筛选结果,以查看最新事件。有关更多信息,请参阅《AWS Command Line Interface 用户指南》中的筛选 AWS CLI 输出

$ pcluster get-image-stack-events --image-id IMAGE_ID --region REGION --query "events[0]" { "eventId": "ParallelClusterImage-CREATE_IN_PROGRESS-2022-04-05T21:39:24.725Z", "physicalResourceId": "arn:aws:imagebuilder:us-east-1:123456789012:image/parallelclusterimage-IMAGE_ID/3.7.0/1", "resourceStatus": "CREATE_IN_PROGRESS", "resourceStatusReason": "Resource creation Initiated", "resourceProperties": "{\"InfrastructureConfigurationArn\":\"arn:aws:imagebuilder:us-east-1:123456789012:infrastructure-configuration/parallelclusterimage-abcd1234-ef56-gh78-ij90-1234abcd5678\",\"ImageRecipeArn\":\"arn:aws:imagebuilder:us-east-1:123456789012:image-recipe/parallelclusterimage-IMAGE_ID/3.7.0\",\"DistributionConfigurationArn\":\"arn:aws:imagebuilder:us-east-1:123456789012:distribution-configuration/parallelclusterimage-abcd1234-ef56-gh78-ij90-1234abcd5678\",\"Tags\":{\"parallelcluster:image_name\":\"IMAGE_ID\",\"parallelcluster:image_id\":\"IMAGE_ID\"}}", "stackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/IMAGE_ID/abcd1234-ef56-gh78-ij90-1234abcd5678", "stackName": "IMAGE_ID", "logicalResourceId": "ParallelClusterImage", "resourceType": "AWS::ImageBuilder::Image", "timestamp": "2022-04-05T21:39:24.725Z" }

大约 15 分钟后,堆栈事件将出现在与 Image Builder 创建相关的日志事件条目中。您现在可以使用 pcluster list-image-log-streamspcluster get-image-log-events 命令列出映像日志流并监控 Image Builder 步骤。

$ pcluster list-image-log-streams --image-id IMAGE_ID --region REGION \ --query 'logStreams[*].logStreamName' "3.7.0/1" ] $ pcluster get-image-log-events --image-id IMAGE_ID --region REGION \ --log-stream-name 3.7.0/1 --limit 3 { "nextToken": "f/36295977202298886557255241372854078762600452615936671762", "prevToken": "b/36295977196879805474012299949460899222346900769983430672", "events": [ { "message": "ExecuteBash: FINISHED EXECUTION", "timestamp": "2022-04-05T22:13:26.633Z" }, { "message": "Document arn:aws:imagebuilder:us-east-1:123456789012:component/parallelclusterimage-test-abcd1234-ef56-gh78-ij90-1234abcd5678/3.7.0/1", "timestamp": "2022-04-05T22:13:26.741Z" }, { "message": "TOE has completed execution successfully", "timestamp": "2022-04-05T22:13:26.819Z" } ] }

继续使用 describe-image 命令进行检查,直到看到 BUILD_COMPLETE 状态。

$ pcluster describe-image --image-id IMAGE_ID --region REGION { "imageConfiguration": { "url": "https://parallelcluster-1234abcd5678efgh-v1-do-not-delete.s3.us-east-1.amazonaws.com/parallelcluster/3.7.0/images/IMAGE_ID-abcd1234efgh5678/configs/image-config.yaml?Signature=..." }, "imageId": "IMAGE_ID", "imageBuildStatus": "BUILD_COMPLETE", "region": "us-east-1", "ec2AmiInfo": { "amiName": "IMAGE_ID 2022-04-05T21-39-24.020Z", "amiId": "ami-1234stuv5678wxyz", "description": "AWS ParallelCluster AMI for alinux2, kernel-4.14.238-182.422.amzn2.x86_64, lustre-2.10.8-5.amzn2.x86_64, efa-1.13.0-1.amzn2.x86_64, dcv-2021.1.10598-1.el7.x86_64, slurm-20-11-8-1", "state": "AVAILABLE", "tags": [ { "value": "2021.3.11591-1.el7.x86_64", "key": "parallelcluster:dcv_version" }, ... ], "architecture": "x86_64" }, "version": "3.7.0" }

如果您需要排查自定义 AMI 创建问题,请按照以下步骤所述创建映像日志存档。

可以将日志存档到 Amazon S3 存储桶或本地文件中,具体取决于 --output 参数。

$ pcluster export-image-logs --image-id IMAGE_ID --region REGION \ --bucket BUCKET_NAME --bucket-prefix BUCKET_FOLDER { "url": "https://BUCKET_NAME.s3.us-east-1.amazonaws.com/BUCKET-FOLDER/IMAGE_ID-logs-202209071136.tar.gz?AWSAccessKeyId=..." } $ pcluster export-image-logs --image-id IMAGE_ID \ --region REGION --bucket BUCKET_NAME --bucket-prefix BUCKET_FOLDER --output-file /tmp/archive.tar.gz { "path": "/tmp/archive.tar.gz" }

该档案包含与 Image Builder 进程和 AWS CloudFormation 堆栈事件相关的 CloudWatch 日志流。该命令的运行可能需要几分钟才能完成。

管理自定义 AMI

从 AWS ParallelCluster 3.0.0 开始,CLI 中添加了一组用于构建、监控和管理映像生命周期的新命令。有关这些命令的更多信息,请参阅 pcluster 命令

修改 AWS ParallelCluster AMI

此方法包括通过在官方 AWS ParallelCluster AMI 上添加自定义来修改官方 AMI。基本 AWS ParallelCluster AMI 已使用新版本进行了更新。这些 AMI 具有安装和配置后运行所需 AWS ParallelCluster 的所有组件。您可以以其中一个 AMI 作为起点。

关键点:

  • 此方法比 build-image 命令快。但它是一个手动过程,不会自动重复。

  • 使用此方法,您无权使用通过 CLI 提供的日志检索和映像生命周期管理命令。

步骤:

New Amazon EC2 console
  1. 找到与您使用的具体内容相对应 AWS 区域 的 AMI。要找到它,请使用带有--region参数的pcluster list-official-images命令来选择特定的 AWS 区域 和--os--architecture参数,筛选出具有您要使用的操作系统和架构的所需 AMI。从输出中检索 Amazon EC2 映像 ID。

  2. 登录 AWS Management Console 并打开亚马逊 EC2 控制台,网址为 https://console.aws.amazon.com/ec2/

  3. 在导航窗格中,选择映像,然后选择 AMI。搜索检索到的 EC2 映像 ID,选择 AMI,然后选择从 AMI 启动实例

  4. 向下滚动并选择您的实例类型

  5. 选择您的密钥对,然后选择启动实例

  6. 使用操作系统用户和您的 SSH 密钥登录您的实例。

  7. 手动自定义实例以满足您的要求。

  8. 运行以下命令以准备实例来创建 AMI。

    sudo /usr/local/sbin/ami_cleanup.sh
  9. 在控制台中,选择实例状态停止实例

    导航到实例,选择新实例,然后依次选择实例状态停止实例

  10. 使用 Amazon EC2 控制台或 AWS CLI 创建映像从实例创建新 AMI。

    从亚马逊 EC2 控制台
    1. 在导航窗格中选择实例

    2. 选择您创建和修改的实例。

    3. 操作中,依次选择映像创建映像

    4. 选择创建映像

  11. 在集群配置内的 CustomAmi 字段中输入新 AMI ID,并创建集群。

Old Amazon EC2 console
  1. 找到与您使用的具体内容相对应 AWS 区域 的 AWS ParallelCluster AMI。要找到它,你可以使用带有--region参数的pcluster list-official-images命令来选择特定的 AWS 区域 和--os--architecture参数,然后根据你想要使用的操作系统和架构筛选出所需的 AMI。您可以从输出中检索 Amazon EC2 映像 ID。

  2. 登录 AWS Management Console 并打开亚马逊 EC2 控制台,网址为 https://console.aws.amazon.com/ec2/

  3. 在导航窗格中,选择映像,然后选择 AMI。针对公有映像设置筛选器并搜索检索到的 EC2 映像 ID,选择 AMI,然后选择启动

  4. 选择您的实例类型,然后选择下一步:配置实例详细信息查看并启动以启动您的实例。

  5. 选择启动,选择您的密钥对,然后选择启动实例

  6. 使用操作系统用户和您的 SSH 密钥登录您的实例。有关更多信息,请导航至实例,选择新实例,然后选择连接

  7. 手动自定义实例以满足您的要求。

  8. 运行以下命令以准备实例来创建 AMI:

    sudo /usr/local/sbin/ami_cleanup.sh
  9. 在 Amazon EC2 控制台中,在导航窗格中选择实例,选择您的新实例,然后选择操作实例状态停止

  10. 使用 Amazon EC2 控制台或 AWS CLI 创建映像从实例创建新 AMI。

    从亚马逊 EC2 控制台
    1. 在导航窗格中选择实例

    2. 选择您创建和修改的实例。

    3. 操作中,依次选择映像创建映像

    4. 选择创建映像

  11. 在集群配置内的 CustomAmi 字段中输入新 AMI ID,并创建集群。