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

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

构建自定义 Amazon ParallelCluster AMI

重要

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

在进一步阅读之前,建议您先查看自定义引导操作部分,以确定将来是否可以编写脚本并支持您要进行的修改Amazon ParallelCluster版本。

尽管构建自定义 AMI 并不理想,但在某些情况下,为其构建自定义 AMIAmazon ParallelCluster是必要的。本教程将指导您完成针对这些场景构建自定义 AMI 的过程。

先决条件

如何自定义 Amazon ParallelCluster AMI

构建自定义的方法有两种Amazon ParallelClusterAMI 这两种方法之一是使用构建新的 AMIAmazon ParallelClusterCLI。另一种方法需要您进行手动修改才能构建一个新的 AMI,该AMI 可以在您的系统下使用Amazon账户。

构建自定义 Amazon ParallelCluster AMI

如果您已经安装了自定义 AMI 和软件,则可以通过以下方式应用所需的更改Amazon ParallelCluster最重要的是。Amazon ParallelCluster依靠 EC2 Image Builder 服务来构建自定义 AMI。有关更多信息,请参阅 。Image Builder 用户指南.

关键点:

  • 该过程大约需要 1 个小时。如果还有其他时间,这个时间可能会有所不同Build/Components将在编译时安装。

  • AMI 标有主要组件的版本,例如内核、调度器和EFA司机。AMI 描述中还报告了组件版本的子集。

  • 从... 开始Amazon ParallelCluster3.0.0,一组新的 CLI 命令可用于管理镜像的生命周期,包括build-image,list-images,describe-imagedelete-image.

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

注意

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

  1. 关注修改 Amazon ParallelCluster AMI绕过此命令的方法。

  2. 在另一个分区/区域中生成镜像,例如us-east-1,然后对其进行存储-恢复以将其移至中国区域。有关更多信息,请参阅使用 S3 存储和还原 AMI在里面Amazon EC2 Linux 实例.

步骤:

  1. 配置Amazon Web Services 账户证书,这样Amazon ParallelCluster客户可以打电话给Amazon代表您的 API 操作 所需权限集记录在Amazon Identity and Access Management中的角色Amazon ParallelCluster3.x.

  2. 创建基本的建立镜像配置文件,通过指定InstanceType用于构建镜像和ParentImage用作创建 AMI 的起点。有关可选编译参数的更多信息,请参阅映像配置.

    Build: InstanceType: <BUILD_INSTANCE_TYPE> ParentImage: <BASE_AMI_ID>
  3. 使用 CLIpcluster build-image建一个Amazon ParallelClusterAMI 从您提供的 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.2.1" } }
    警告

    pcluster build-image使用原定设置 VPC。如果默认 VPC 已被删除,则可能使用Amazon Control Tower要么Amazon着陆区,子网 ID 必须在镜像配置文件中指定。有关更多信息,请参阅 SubnetId

    有关其他参数,请参阅pcluster build-image命令。前面的命令执行以下操作:

    • 创建 CloudFormation 基于镜像配置的堆栈。堆栈包含构建所需的所有 EC2 Image Builder 资源。

    • 创建的资源包括官方Image BuilderAmazon ParallelCluster组件,可以在其上添加自定义Image Builder 组件。要了解如何创建自定义组件,请浏览自定义 AMI在里面面向公共部门客户的 HPC 研讨会.

    • EC2 Image Builder 启动构建实例,应用Amazon ParallelCluster食谱,安装Amazon ParallelCluster软件堆栈,并执行必要的配置任务。这些区域有:Amazon ParallelCluster食谱用于构建和引导Amazon ParallelCluster.

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

    • 另一个实例从新创建的 AMI 启动。在测试阶段,EC2 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.2.1/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.2.1", "cloudformationStackTags": [ { "value": "3.2.1", "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.2.1/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.2.1" }
  5. 要创建集群,请在 AMICustomAmi集群配置中的字段。

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

图像创建大约需要 1 个小时。您可以通过运行来监控生成过程的状态pcluster describe-image命令或日志检索命令。

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

如前所述,build-image命令创建一个 CloudFormation 堆栈包含构建映像所需的所有 EC2 资源,并启动 EC2 Image Builder 流程。

运行后build-image命令,可以检索 CloudFormation 使用堆叠事件pcluster get-image-stack-events. 您可以使用以下命令筛选结果--query参数以查看最新事件。有关更多信息,请参阅过滤Amazon CLI输出在里面Amazon Command Line Interface用户指南.

$ 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.2.1/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.2.1\",\"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 创建相关的日志事件条目中。现在,您可以使用列出图像日志流并监控 Image Builder 步骤pcluster list-image-log-streamspcluster get-image-log-events命令。

$ pcluster list-image-log-streams --image-id IMAGE_ID --region REGION \ --query 'logStreams[*].logStreamName' "3.2.1/1" ] $ pcluster get-image-log-events --image-id IMAGE_ID --region REGION \ --log-stream-name 3.2.1/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.2.1/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.2.1/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.2.1" }

如果您需要调试 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" }

存档包含 CloudWatch 记录与Image Builder 进程相关的直播,以及Amazon CloudFormation堆栈事件。该命令可能需要几分钟才能运行完毕。

管理自定义 AMI

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

修改 Amazon ParallelCluster AMI

这个方法包括修改一个官方Amazon ParallelClusterAMI 通过在其上添加自定义功能来实现。基地Amazon ParallelClusterAMI 已使用新版本进行了更新。这些 AMI 具有所需的所有组件Amazon ParallelCluster在安装和配置后运行。你可以从其中一个作为基础开始。

关键点:

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

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

步骤:

New EC2 console
  1. 查找Amazon ParallelCluster与您使用的特定区域相对应的 AMI。要找到它,你可以使用pcluster list-official-images命令使用--region用于选择特定区域的参数和--os--architecture使用要使用的操作系统和架构筛选所需的 AMI 的参数。从输出中,您可以检索 EC2 映像 ID。

  2. 登录到 Amazon Web Services Management Console 并打开 Amazon 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. 使用 EC2 控制台从实例创建新的 AMI 或Amazon CLI create-镜像.

    从 EC2 控制台:

    1. 在导航窗格中选择 Instances(实例)。

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

    3. 操作,选择图像和模板,然后创建镜像.

    4. 选择创建映像

  11. 在中输入新的 AMI IDCustomAmi在您的集群配置中填写字段并创建集群。

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

  2. 登录到 Amazon Web Services Management Console 并打开 Amazon 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. 从 EC2 控制台中,选择实例在导航窗格中,选择您的新实例并选择操作,实例状态停止.

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

    从 EC2 控制台

    1. 在导航窗格中选择 Instances(实例)。

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

    3. 操作,选择映像然后创建镜像.

    4. 选择 Create Image

  11. 在中输入新的 AMI IDCustomAmi在您的集群配置中填写字段并创建集群。