自定义引导操作 - AWS ParallelCluster

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

自定义引导操作

如果您定义了 HeadNode/CustomActions/OnNodeStart配置设置,则在节点启动后立即AWS ParallelCluster运行任意代码。如果您定义了 HeadNode/CustomActions/OnNodeConfigured配置设置,则在节点配置正确完成后AWS ParallelCluster运行代码。

从AWS ParallelCluster版本 3.4.0 开始,如果您定义了 HeadNode/CustomActions/OnNodeUpdated配置设置,则可以在头节点更新后运行代码。

在大多数情况下,此代码存储在 Amazon Simple Storage Service (Amazon S3) 中且通过 HTTPS 连接访问。该代码以集群操作系统支持的任何脚本语言的身份运行,root并且可以使用集群操作系统支持的任何脚本语言。代码通常在 BashPython 中。

OnNodeStart操作是在任何节点部署引导操作开始之前调用的,例如配置 NAT、Amazon Elastic Block Store (Amazon EBS) 或调度程序。 OnNodeStart引导操作可能包括修改存储、添加额外用户和添加软件包。

OnNodeConfigured操作是在节点引导过程完成后调用的。 OnNodeConfigured操作是指在实例被视为已完全配置和完成之前发生的最后一次操作。一些OnNodeConfigured操作包括更改调度程序设置、修改存储和修改软件包。您可以通过在配置期间指定脚本来将参数传递给脚本。

OnNodeUpdated操作是在头节点更新完成并且调度程序和共享存储与最新的集群配置更改保持一致后调用的。

OnNodeStartOnNodeConfigured自定义操作成功时,退出代码为零 (0) 表示成功。任何其他退出代码都表示实例引导失败。

OnNodeUpdated自定义操作成功时,使用退出代码零 (0) 表示成功。任何其他退出代码都表示更新失败。

注意

如果您进行了配置 OnNodeUpdated,则必须在更新失败时手动将OnNodeUpdated操作恢复到以前的状态。

如果OnNodeUpdated自定义操作失败,更新将回滚到之前的状态。但是,该OnNodeUpdated操作仅在更新时运行,而不是在堆栈回滚时运行。

您可以在/和 HeadNode/SchedulingSlurmQueues/CustomActionsCustomActions配置部分为头节点和每个队列指定不同的脚本。 OnNodeUpdated只能在HeadNode部分中配置。

注意

在 3.0AWS ParallelCluster 版之前,无法为头节点和计算节点指定不同的脚本。请参阅 从AWS ParallelCluster 2.x 移至 3.x

配置

以下配置设置用于定义 HeadNode//& 和 CustomActions//OnNodeStartOnNodeConfigured& OnNodeUpdatedScheduling/CustomActions/OnNodeStart& OnNodeConfigured操作和参数。

HeadNode: [...] CustomActions: OnNodeStart: # Script URL. This is run before any of the bootstrap scripts are run Script: s3://bucket-name/on-node-start.sh Args: - arg1 OnNodeConfigured: # Script URL. This is run after all the bootstrap scripts are run Script: s3://bucket-name/on-node-configured.sh Args: - arg1 OnNodeUpdated: # Script URL. This is run after the head node update is completed. Script: s3://bucket-name/on-node-updated.sh Args: - arg1 # Bucket permissions Iam: S3Access: - BucketName: bucket_name EnableWriteAccess: false Scheduling: Scheduler: slurm [...] SlurmQueues: - Name: queue1 [...] CustomActions: OnNodeStart: Script: s3://bucket-name/on-node-start.sh Args: - arg1 OnNodeConfigured: Script: s3://bucket-name/on-node-configured.sh Args: - arg1 Iam: S3Access: - BucketName: bucket_name EnableWriteAccess: false

Arguments (参数)

注意

在AWS ParallelCluster 2.x 中,$1参数是保留的,用于存储自定义脚本的 URL。如果你想重用为AWS ParallelCluster 2.x和AWS ParallelCluster 3.x创建的自定义引导脚本,你需要通过考虑参数的转移来调整它们。请参阅 从AWS ParallelCluster 2.x 移至 3.x

示例

以下步骤创建一个简单的脚本,在配置节点后执行,在集群的节点中安装R,curlwget软件包。

  1. 创建脚本。

    #!/bin/bash echo "The script has $# arguments" for arg in "$@" do echo "arg: ${arg}" done yum -y install "${@:1}"
  2. 将具有正确权限的脚本上载到 Amazon S3。如果公共读取权限不适合您,请使用 HeadNode/Iam/S3AccessScheduling/SlurmQueues配置部分。有关更多信息,请参阅使用 Amazon S3

    $ aws s3 cp --acl public-read /path/to/myscript.sh s3://<bucket-name>/myscript.sh
    重要

    如果在 Windows 上编辑脚本,则在将脚本上传到 Amazon S3 之前,必须将行结尾从 CRLF 更改为 LF。

  3. 更新AWS ParallelCluster配置以包括新OnNodeConfigured操作。

    CustomActions: OnNodeConfigured: Script: https://<bucket-name>.s3.<region>.amazonaws.com/myscript.sh Args: - "R" - "curl" - "wget"

    如果存储桶没有公共读取权限,请使用s3作为 URL 协议。

    CustomActions: OnNodeConfigured: Script: s3://<bucket-name>/myscript.sh Args: - "R" - "curl" - "wget"
  4. 启动集群。

    $ pcluster create-cluster --cluster-name mycluster \ --region <region> --cluster-configuration config-file.yaml
  5. 验证输出。

    • 如果您在HeadNode配置中添加了自定义操作,请登录到头节点并/var/log/cfn-init.log通过运行以下命令检查位于的cfn-init.log文件:

      $ less /var/log/cfn-init.log 2021-09-03 10:43:54,588 [DEBUG] Command run postinstall output: The script has 3 arguments arg: R arg: curl arg: wget Loaded plugins: dkms-build-requires, priorities, update-motd, upgrade-helper Package R-3.4.1-1.52.amzn1.x86_64 already installed and latest version Package curl-7.61.1-7.91.amzn1.x86_64 already installed and latest version Package wget-1.18-4.29.amzn1.x86_64 already installed and latest version Nothing to do
    • 如果您在SlurmQueues设置/var/log/cloud-init.log中添加了自定义操作,请检查cloud-init.log位于计算节点中的。用于 CloudWatch 查看这些日志。

    您可以在亚马逊 CloudWatch 控制台中查看这两个日志。有关更多信息,请参阅 与 Amazon CloudWatch Logs