本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在中配置节点生命周期操作 AWS 个
您可以在计算节点组配置中定义节点生命周期操作。本主题介绍如何定义脚本、控制脚本是否在重启时重新运行、存储脚本、向其传递参数、处理故障、缓存脚本、验证其完整性以及读取其日志。
代理版本要求
节点生命周期操作需要 AWS PCS 代理版本 1.5.0-1 或更高版本。如果您的计算节点使用带有较旧代理版本的自定义 AMI,请在配置生命周期操作之前更新代理。有关更多信息,请参阅 AWS PCS 代理版本。
如何定义脚本
每个脚本都有一个namescriptSource、一个arguments、可选、一个onError策略和一个executionPolicy。位置和完整性字段分组如下scriptSource。
{ "name": "My script", "scriptSource": { "scriptLocation": "s3://my-bucket/my-script.sh", "s3VersionId": "optional, S3 only", "checksum": "optional 64-char SHA-256 hex" }, "arguments": ["arg1", "arg2"], "onError": "TERMINATE", "executionPolicy": "FIRST_BOOT_ONLY" }
向计算节点组添加生命周期操作
在创建或更新计算节点组时,您可以添加生命周期操作。使用 AWS 管理控制台 或 AWS CLI。
控制重启行为
设置executionPolicy每个脚本以控制它是否在重启时重新运行。
值 |
行为 |
何时使用 |
|---|---|---|
|
在节点首次启动时运行一次脚本。随后每次重启时都要跳过它。 |
One-time 设置,例如安装软件包、加入域或初始化存储。你不必让这些脚本成为等效的。 |
|
在首次启动和每次重启时运行脚本。 |
重启后必须重新应用的配置,例如重新安装临时文件系统或重新设置节点状态。 |
脚本设置为FIRST_BOOT_ONLY运行一次,重新启动时会跳过。脚本设置为在每次启动时EVERY_BOOT运行,并且应该是等效的(可以安全地多次运行并获得相同的结果)。
脚本存储位置
您可以将脚本存储在 Amazon S3 中或通过 HTTPS 提供脚本。脚本无法通过 API 内联上传,并且每个脚本必须不大于 2 MiB,代理会拒绝任何超过此大小的脚本。
-
亚马逊 S3 (
s3://) — 对象bucket/keys3:GetObject上必须有实例 IAM 配置文件。使用 S3 网关 VPC 终端节点,私有子网中的节点可以通过 VPC 终端节点检索脚本。将特定版本固定到scriptSource.s3VersionId(仅限 S3 位置)。 -
HTTPS (
https://) — 主机必须是公开可读的(无身份验证),并且该节点需要出站互联网接入(互联网网关、NAT 网关或 HTTP 代理)。这对于托管在 GitHub 或其他公共存储库上的脚本很有用。hostname/path
外部存储提供版本控制、可审计性和跨团队重复使用。不支持内联或上传的脚本。
将参数传递给脚本
将参数作为有序数组传递。它们作为位置命令行参数到达您的脚本。
arguments: ["fs-12345678", "/shared", "nfs4"] # script.sh fs-12345678 /shared nfs4 ($1=fs-12345678, $2=/shared, $3=nfs4)
代理将环境变量导出到每个脚本。这些变量包含集群和节点元数据。
变量 |
描述 |
|---|---|
|
集群标识符/名称 |
|
计算节点组标识符/名称 |
|
节点标识符 |
|
|
#!/usr/bin/env bash echo "Configuring node $PCS_NODE_ID in cluster $PCS_CLUSTER_NAME"
错误处理
每个脚本都有一个onError字段,用于控制脚本退出非零值或被信号终止时发生的情况。
值 |
行为 |
何时使用 |
|---|---|---|
|
标记节点失败并终止该节点。 |
关键设置(存储挂载、Active Directory 加入)。防止为损坏的节点付费。 |
|
停止舞台中的剩余脚本;让节点保持运行状态。 |
调试 — 失败后检查实例。 |
|
记录错误并运行下一个脚本。 |
可选或尽力而为的任务。 |
如果脚本以非零值退出或被信号杀死(例如),则脚本会失败。SIGSEGV脚本未重试。如果操作可能遇到暂时性故障,请在脚本中添加重试逻辑。但是,在行为应用之前,会重试脚本检索(下载),最多 3 次尝试,指数回退(最长约 17 秒)。onError
脚本缓存和更新
代理会在首次启动时将每个脚本下载到实例并将其存储在本地。两个字段控制重启时的行为:scriptCachingPolicy控制重新下载和executionPolicy控制重新执行。
-
CACHE_ONCE(默认)— 首次启动时下载一次;永远不要重新获取。重启后的行为是相同的。更新脚本内容需要更换实例。 -
REFRESH_ON_REBOOT— 每次 Re-download 重启时,都会覆盖缓存。这使您可以通过重启来发布脚本修复程序。每次启动都需要网络访问权限;如果刷新失败,则下载将被视为检索失败,脚本的onError行为适用(缓存副本没有回退)。刷新后的脚本只有在重新启动时才会真正重新运行。executionPolicyEVERY_BOOT
每个实例的生命周期配置(运行哪些脚本、其参数、错误处理和执行策略)始终是不可变的。更改它只UpdateComputeNodeGroup会影响新实例并触发DRAIN策略,因此运行任务在替换节点之前完成。
脚本完整性(校验和)
(可选) SHA-256 checksum在脚本中提供 64 个字符的scriptSource十六进制字符串。代理在下载时对其进行验证;不匹配被视为下载失败并触发。onError我们建议在生产环境中使用校验和,特别是对于来自共享或外部来源的脚本。
sha256sum mount-efs.sh # use the 64-char hex hash as the checksum value
记录和调试
每个脚本都写入自己的日志文件,代理保留自己的操作日志。
# agent: download, caching, checksum, orchestration /var/log/amazon/pcs/lifecycle/actions/executor.log # each script's stdout/stderr /var/log/amazon/pcs/lifecycle/actions/<stage>/<script-name>.log
日志文件名使用您定义的脚本名称。空间被保留。例如,一个名为的脚本Mount EFS home directory写入Mount EFS home
directory.log。使用 SSH 或 AWS Systems Manager 会话管理器进行阅读——两者均可在nodeBootstrapped舞台前使用。由于失败的节点会TERMINATE被替换,因此在终止后将日志转发到实例外进行调试:添加节点引导脚本,配置 Amazon CloudWatch 代理将生命周期日志目录发送到 Amazon Logs。 CloudWatch 由 AWS维护的configure-cloudwatch-logs.sh脚本执行此操作。有关更多信息,请参阅 使用 AWS-维护了中节点生命周期操作的脚本 AWS PCS。