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

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

自定义引导导导导导导操作

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

从Amazon 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.0Amazon ParallelCluster 版本之前,无法为头节点和计算节点指定不同的脚本。请参阅 从移动Amazon ParallelCluster2.x 到 3.x

配置

以下配置设置用于定义 HeadNode/CustomActions/OnNodeStart& OnNodeConfigured& 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 (参数)

注意

在Amazon ParallelCluster 2.x 中,$1参数是保留的,用于存储自定义脚本的 URL。如果你想重复使用Amazon ParallelCluster为 2.x 和Amazon ParallelCluster 3.x 创建的自定义引导脚本,你需要考虑参数的移动,对它们进行调整。请参阅 从移动Amazon ParallelCluster2.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. 更新Amazon 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. 验证输出。

    $ 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