建立自定义 Amazon ParallelCluster AMI - Amazon ParallelCluster
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

建立自定义 Amazon ParallelCluster AMI

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

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

重要

如果您构建了自定义版本AMI,则必须在每个新 Amazon ParallelCluster 版本中重复创建自定义AMI版本时使用的步骤。

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

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

先决条件

如何自定义 Amazon ParallelCluster AMI

有两种方法可以创建自定义 Amazon ParallelCluster AMI。这两种方法之一是AMI使用构建一个新的 Amazon ParallelCluster CLI。另一种方法要求您进行手动修改,以构建在您的下方可AMI用的新版本 Amazon Web Services 账户。

创建自定义 Amazon ParallelCluster AMI

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

关键点:

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

  • 标AMI有主要组件的版本。其中包括内核、调度程序和EFA驱动程序。AMI描述中还报告了组件版本的子集。

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

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

注意

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

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

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

步骤:

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

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

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

    $ 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。如果您VPC使用 Amazon Control Tower 或 Amazon 着陆区域删除默认子网,则必须在映像配置文件中指定子网 ID。有关更多信息,请参阅 SubnetId

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

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

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

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

    • 实例已停止,并从中创建一个新AMI实例。

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

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

  4. 您可以通过运行以下命令来监控构建过程的状态。构建完成后,你可以运行它来检索响应中给出的 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": "Amazon 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 堆栈,并启动 Image Builder 进程。EC2

运行该build-image命令后,可以使用来检索 CloudFormation 堆栈事件pcluster get-image-stack-events。您可以使用 --query 参数来筛选结果,以查看最新事件。有关更多信息,请参阅《Amazon Command Line Interface 用户指南》中的筛选 Amazon 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": "Amazon 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 进程和 Amazon CloudFormation 堆栈事件相关的 CloudWatch 日志流。该命令的运行可能需要几分钟才能完成。

管理自定义 AMIs

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

修改 Amazon ParallelCluster AMI

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

关键点:

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

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

步骤:

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

  2. 登录 Amazon Web Services Management Console 并打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/

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

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

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

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

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

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

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

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

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

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

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

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

    4. 选择创建映像

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

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

  2. 登录 Amazon Web Services Management Console 并打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/

  3. 在导航窗格中,选择 “图像”,然后AMIs。为公共图像设置过滤器并搜索检索到的EC2图像 ID,选择AMI,然后选择 Launch

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

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

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

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

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

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

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

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

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

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

    4. 选择创建映像

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