本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
构建自定义 AWS ParallelCluster AMI
使用 AWS ParallelCluster 命令行界面 (CLI) 或 API 时,您只需为创建或更新 AWS ParallelCluster 映像和集群时创建的 AWS 资源付费。有关更多信息,请参阅 AWS ParallelCluster 使用的 AWS 服务。
PCUI 基于无服务器的架构而构建,在大多数情况下,可以在 AWS Free Tier 类别中使用。有关更多信息,请参阅 PCUI 成本。
重要
如果构建自定义 AMI,则必须重复执行用于随每个新的 AWS ParallelCluster 版本创建自定义 AMI 的步骤。
在进一步阅读之前,我们建议您首先查看自定义引导操作一节。确定未来 AWS ParallelCluster 版本是否可以脚本化并支持您要进行的修改。
虽然构建自定义 AMI 通常并不是理想情况,但是在某些特定场景中,需要为 AWS ParallelCluster 构建自定义 AMI。本教程介绍如何为这些场景构建自定义 AMI。
先决条件
-
AWS ParallelCluster已安装 安装 AWS ParallelCluster 命令行界面 (CLI)。
-
您有一个 Amazon EC2 密钥对。
如何自定义 AWS ParallelCluster AMI
可以通过两种方式构建自定义 AWS ParallelCluster AMI。这两种方法之一是使用 AWS ParallelCluster CLI 构建新的 AMI。另一种方法需要进行手动修改以构建可在您的 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-image、list-images、describe-image 和 delete-image。
-
这种方法是可重复的。您可以重新运行该方法以使 AMI 保持更新(例如操作系统更新),然后在更新现有集群时使用这些 AMI。
注意
如果您在 AWS 中国分区中使用这种方法,可能会遇到网络错误。例如,当 pcluster build-image
命令从 GitHub 或操作系统存储库下载程序包时,您可能会看到这些错误。如果发生这种情况,我们建议使用以下替代方法之一:
-
按照修改 AWS ParallelCluster AMI 方法绕过此命令。
-
在另一个分区和区域(例如
us-east-1
)中构建映像,然后对其进行存储-还原,以将其移动到中国区域。有关更多信息,请参阅《Amazon EC2 用户指南》中的使用 S3 存储和还原 AMI。
步骤:
-
配置您的 AWS 账户凭证,以便 AWS ParallelCluster 客户端可以代表您调用 AWS API 操作。有关所需权限的列表,请参阅AWS ParallelCluster 中的 AWS Identity and Access Management 权限。
-
创建基本的构建映像 配置文件。为此,请指定用于构建映像以及 ParentImage 的 InstanceType。这些步骤用作创建 AMI 的起点。有关可选构建参数的更多信息,请参阅映像配置。
Build: InstanceType:
<BUILD_INSTANCE_TYPE>
ParentImage:<BASE_AMI_ID>
-
以您作为基础提供的 AMI 为起点,使用 CLI 命令 pcluster build-image 构建 AWS ParallelCluster AMI。
$
pcluster build-image --image-id
IMAGE_ID
--image-configurationIMAGE_CONFIG.yaml
--regionREGION
{ "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 资源。
-
创建的资源包括官方 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 组件中定义的测试。
-
如果构建成功,则会删除堆栈。如果构建失败,则会保留堆栈以供检查。
-
-
您可以通过运行以下命令来监控构建过程的状态。构建完成后,您可以运行该 AMI 以便检索响应中给出的 AMI ID。
$
pcluster describe-image --image-id
IMAGE_ID
--regionREGION
# 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" }
-
要创建集群,请在集群配置内的 CustomAmi 字段中输入该 AMI ID。
对 AMI 创建过程进行故障排除和监控
映像创建将在大约一个小时后完成。您可以通过运行 pcluster describe-image 命令或日志检索命令来监控该过程。
$
pcluster describe-image --image-id
IMAGE_ID
--regionREGION
build-image 命令将会创建一个 CloudFormation 堆栈,其中包含构建映像所需的所有 Amazon EC2 资源,并启动 EC2 Image Builder 进程。
运行 该build-image 命令后,可以使用 pcluster get-image-stack-events 来检索 CloudFormation 堆栈事件。您可以使用 --query
参数来筛选结果,以查看最新事件。有关更多详细信息,请参阅 AWS Command Line Interface 用户指南 中的筛选 AWS CLI 输出。
$
pcluster get-image-stack-events --image-id
IMAGE_ID
--regionREGION
--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-streams 和 pcluster get-image-log-events 命令列出映像日志流并监控 Image Builder 步骤。
$
pcluster list-image-log-streams --image-id
"3.7.0/1" ]IMAGE_ID
--regionREGION
\ --query 'logStreams[*].logStreamName'$
pcluster get-image-log-events --image-id
IMAGE_ID
--regionREGION
\ --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
--regionREGION
{ "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
--regionREGION
\ --bucketBUCKET_NAME
--bucket-prefixBUCKET_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
\ --regionREGION
--bucketBUCKET_NAME
--bucket-prefixBUCKET_FOLDER
--output-file /tmp/archive.tar.gz{ "path": "/tmp/archive.tar.gz" }
该存档包含与 Image Builder 进程相关的 CloudWatch Logs 流和 AWS CloudFormation 堆栈事件。该命令的运行可能需要几分钟才能完成。
管理自定义 AMI
从 AWS ParallelCluster 3.0.0 开始,CLI 中添加了一组用于构建、监控和管理映像生命周期的新命令。有关这些命令的更多信息,请参阅 pcluster 命令。
修改 AWS ParallelCluster AMI
此方法通过在官方 AWS ParallelCluster AMI 上添加自定义来修改官方 AMI。基础 AWS ParallelCluster AMI 已经随新版本进行了更新。如果安装并配置了 AWS ParallelCluster,这些 AMI 包含确保该软件正常运行所需的所有组件。您可以以其中一个 AMI 作为起点。
关键点:
-
此方法比 build-image 命令快。但它是一个手动过程,不会自动重复。
-
使用此方法,您无权使用通过 CLI 提供的日志检索和映像生命周期管理命令。
步骤: