View a markdown version of this page

在中配置节点生命周期操作 AWS 个 - AWS 个

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

在中配置节点生命周期操作 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。

AWS 管理控制台
使用控制台添加生命周期操作
  1. 打开 AWS PCS 控制台

  2. 打开计算节点组的创建或更新页面。

  3. 节点生命周期操作部分中,选择添加脚本

  4. 选择脚本源:

    1. 从 AWS PCS 脚本库中添加 — 引用 AWS维护的脚本。有关更多信息,请参阅 使用 AWS-维护了中节点生命周期操作的脚本 AWS PCS

    2. 通过 S3 添加 — 按脚本的 Amazon S3 URI 引用脚本。

    3. 通过 HTTPS 添加 — 通过脚本的 HTTPS 网址引用脚本。

  5. 选择节点阶段。

  6. 对于通过 S3 或 HTTPS 添加的脚本,请指定以下设置:

    1. 脚本位置 -输入脚本的 S3 URI 或 HTTPS 网址。

    2. 名称 — 输入脚本的名称。

    3. (可选)校验和 -输入 SHA-256 校验和以验证脚本的完整性。有关更多信息,请参阅 脚本完整性(校验和)

    4. (可选)对于通过 S3 添加的脚本,输入版本以引用该对象的特定版本。

  7. 对于所有脚本源,请指定以下设置:

    1. 错误处理行为 -选择TERMINATESTOP_SEQUENCE、或CONTINUE

    2. 执行策略 -选择FIRST_BOOT_ONLYEVERY_BOOT

    3. (可选)参数 -添加要传递给脚本的参数。

  8. 要添加更多脚本,请重复这些步骤。

  9. 脚本在一个阶段内从上到下运行。要更改执行顺序,请为脚本选择 “操作”,然后选择 “上移” 或 “下移”

  10. 对于缓存策略,选择CACHE_ONCEREFRESH_ON_REBOOT。缓存策略适用于所有脚本。有关更多信息,请参阅 脚本缓存和更新

AWS CLI

使用带有 create-compute-node-group or update-compute-node-group 命令的--node-lifecycle-actions参数。有关参数结构,请参阅 AWS PCS API 参考NodeLifecycleActionsRequest中的。有关命令示例,请参见的节点生命周期操作示例 AWS 个

控制重启行为

设置executionPolicy每个脚本以控制它是否在重启时重新运行。

行为

何时使用

FIRST_BOOT_ONLY(默认值)

在节点首次启动时运行一次脚本。随后每次重启时都要跳过它。

One-time 设置,例如安装软件包、加入域或初始化存储。你不必让这些脚本成为等效的。

EVERY_BOOT

在首次启动和每次重启时运行脚本。

重启后必须重新应用的配置,例如重新安装临时文件系统或重新设置节点状态。

脚本设置为FIRST_BOOT_ONLY运行一次,重新启动时会跳过。脚本设置为在每次启动时EVERY_BOOT运行,并且应该是等效的(可以安全地多次运行并获得相同的结果)。

脚本存储位置

您可以将脚本存储在 Amazon S3 中或通过 HTTPS 提供脚本。脚本无法通过 API 内联上传,并且每个脚本必须不大于 2 MiB,代理会拒绝任何超过此大小的脚本。

  • 亚马逊 S3 (s3://bucket/key) — 对象s3:GetObject上必须有实例 IAM 配置文件。使用 S3 网关 VPC 终端节点,私有子网中的节点可以通过 VPC 终端节点检索脚本。将特定版本固定到scriptSource.s3VersionId(仅限 S3 位置)。

  • HTTPS (https://hostname/path) — 主机必须是公开可读的(无身份验证),并且该节点需要出站互联网接入(互联网网关、NAT 网关或 HTTP 代理)。这对于托管在 GitHub 或其他公共存储库上的脚本很有用。

外部存储提供版本控制、可审计性和跨团队重复使用。不支持内联或上传的脚本。

将参数传递给脚本

将参数作为有序数组传递。它们作为位置命令行参数到达您的脚本。

arguments: ["fs-12345678", "/shared", "nfs4"] # script.sh fs-12345678 /shared nfs4 ($1=fs-12345678, $2=/shared, $3=nfs4)

代理将环境变量导出到每个脚本。这些变量包含集群和节点元数据。

变量

描述

PCS_CLUSTER_ID / PCS_CLUSTER_NAME

集群标识符/名称

PCS_COMPUTE_NODE_GROUP_ID / PCS_COMPUTE_NODE_GROUP_NAME

计算节点组标识符/名称

PCS_NODE_ID

节点标识符

PCS_IS_FIRST_BOOT

1在节点首次启动时,0在随后每次重启时。使用它来分支EVERY_BOOT脚本中的行为。

#!/usr/bin/env bash echo "Configuring node $PCS_NODE_ID in cluster $PCS_CLUSTER_NAME"

错误处理

每个脚本都有一个onError字段,用于控制脚本退出非零值或被信号终止时发生的情况。

行为

何时使用

TERMINATE(默认值)

标记节点失败并终止该节点。

关键设置(存储挂载、Active Directory 加入)。防止为损坏的节点付费。

STOP_SEQUENCE

停止舞台中的剩余脚本;让节点保持运行状态。

调试 — 失败后检查实例。

CONTINUE

记录错误并运行下一个脚本。

可选或尽力而为的任务。

如果脚本以非零值退出或被信号杀死(例如),则脚本会失败。SIGSEGV脚本未重试。如果操作可能遇到暂时性故障,请在脚本中添加重试逻辑。但是,在行为应用之前,会重试脚本检索(下载),最多 3 次尝试,指数回退(最长约 17 秒)。onError

脚本缓存和更新

代理会在首次启动时将每个脚本下载到实例并将其存储在本地。两个字段控制重启时的行为:scriptCachingPolicy控制重新下载和executionPolicy控制重新执行。

  • CACHE_ONCE(默认)— 首次启动时下载一次;永远不要重新获取。重启后的行为是相同的。更新脚本内容需要更换实例。

  • REFRESH_ON_REBOOT— 每次 Re-download 重启时,都会覆盖缓存。这使您可以通过重启来发布脚本修复程序。每次启动都需要网络访问权限;如果刷新失败,则下载将被视为检索失败,脚本的onError行为适用(缓存副本没有回退)。刷新后的脚本只有在重新启动时才会真正重新运行。executionPolicy EVERY_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