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

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

自定义引导操作

Amazon ParallelCluster例如,可以在节点启动后立即运行任意代码HeadNode/CustomActions/OnNodeStart,或者当节点配置正确完成时HeadNode/CustomActions/OnNodeConfigured. 在大多数情况下,此代码存储在 Amazon Simple Storage Service (Amazon S3) 中并通过 HTTPS 连接访问。该代码运行为root可以采用集群操作系统支持的任何脚本语言。通常代码在Bash要么Python.

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

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

如果自定义操作失败,则该实例引导也将失败。退出代码为零 (0) 表示成功。任何其他退出代码都表示实例引导失败。

您可以在HeadNode/CustomActionsScheduling/SlurmQueues/CustomActions配置部分。

注意

优化前Amazon ParallelCluster3.0 版中,无法为头节点和计算节点指定不同的脚本。请参阅 从移动Amazon ParallelCluster2.x 到 3.x

配置

以下配置设置用于定义HeadNode/CustomActions/OnNodeStart &OnNodeConfiguredScheduling/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 - arg2 OnNodeConfigured: # Script URL. This is run after all the bootstrap scripts are run Script: s3://bucket-name/on-node-configured.sh Args: - arg1 - arg2 # 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 - arg2 OnNodeConfigured: Script: s3://bucket-name/on-node-configured.sh Args: - arg1 - arg2 Iam: S3Access: - BucketName: bucket_name EnableWriteAccess: false

Arguments (参数)

注意

InAmazon ParallelCluster2.x$1参数是保留的,用于存储自定义脚本的 URL。如果你想重复使用为Amazon ParallelCluster2.xAmazon ParallelCluster3.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 上编辑的,则必须将行结尾从 CRLF 更改为 LF,然后才能将脚本上传到 Amazon S3。

  3. 更新Amazon ParallelCluster包含新的配置OnNodeConfiguredaction.

    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