Amazon ECS EC2 容器实例 - Amazon Elastic Container Service

Amazon ECS EC2 容器实例

Amazon ECS 代理是在向您的集群注册的每个容器实例上运行的进程。它可以促进您的容器实例与 Amazon ECS 之间的通信。

注意

在 Linux 容器实例上,代理容器会挂载顶级目录,例如 /lib/lib64/proc。这对于 ECS 的各种特征和功能是必需的,例如 Amazon EBS 卷、awsvpc 网络模式、Amazon ECS Service Connect 和适用于 Amazon ECS 的 FireLens 等。

每个 Amazon ECS 容器代理版本都支持不同的功能集并提供了针对早期版本的错误修复。如果可能,我们始终建议使用最新版本的 Amazon ECS 容器代理。要将您的容器代理更新至最新版本,请参阅更新 Amazon ECS 容器代理

Amazon ECS 容器代理程序包含 amazon-ecs-pause 映像。Amazon ECS 使用此映像来执行使用 awsvpc 网络模式的任务。

要查看每个代理版本包含了哪些功能和增强功能,请参阅 https://github.com/aws/amazon-ecs-agent/releases

重要

可靠指标的最低 Docker 版本是 Docker 版本 v20.10.13 及更高版本,该版本包含在经 Amazon ECS 优化的 AMI 20220607 及更高版本中。

Amazon ECS 代理版本 1.20.0 及更高版本已弃用对早于 18.01.0 的 Docker 版本的支持。

生命周期

当 Amazon ECS 容器代理将 Amazon EC2 实例注册到集群时,Amazon EC2 容器实例将其状态报告为 ACTIVE,并将其代理连接状态报告为 TRUE。此容器实例可接受运行任务请求。

如果停止(而不是终止)容器实例,则状态将保持为 ACTIVE,但代理连接状态将在几分钟内转换为 FALSE。在容器实例上运行的任何任务将停止。如果您再次启动容器实例,则容器代理将使用 Amazon ECS 服务重新连接,并且您能够在实例上再次运行任务。

重要

如果您停止并启动某个容器实例,即重启该实例,则一些旧版本的 Amazon ECS 容器代理会在未注销原始容器实例 ID 的情况下再次注册该实例。这种情况下,Amazon ECS 会在集群中列出超出实际拥有数量的容器实例。(如果具有同一 Amazon EC2 实例 ID 的重复容器实例 ID,则可以安全地注销列出为 ACTIVE 且代理连接状态为 FALSE 的重复项。) 此问题已在当前版本的 Amazon ECS 容器代理中修复。有关更新到当前版本的更多信息,请参阅更新 Amazon ECS 容器代理

如果将容器实例的状态更改为 DRAINING,则新任务不会置于该容器实例中,并将尽可能删除在此容器实例上运行的所有服务任务,以便执行系统更新。有关更多信息,请参阅 耗尽 Amazon ECS 容器实例

如果您注销或终止某个容器实例,则该容器实例状态将立即更改为 INACTIVE,而且在您列出您的容器实例时将不再报告该容器实例。但您仍可以在终止后的 1 小时内描述容器实例。1 小时后,该实例描述将不再可用。

重要

您可以手动耗尽实例,也可以构建 自动扩缩组生命周期钩子以将实例状态设置为 DRAINING。有关 Auto Scaling 生命周期钩子的更多信息,请参阅 Amazon EC2 Auto Scaling 生命周期钩子

Docker 支持

Amazon ECS 支持在 Amazon Linux 上发布的最近两个主要版本的 Docker。目前,其中包括 Docker 20.10.x 和 Docker 25.x。

Amazon ECS 的最低所需 Docker 版本可以在 GitHub 上的 Amazon ECS 代理规范文件中找到。

使用 Amazon ECS 优化版 AMI 时,Docker 已预装,并配置为与 Amazon ECS 容器代理配合使用。AMI 包括经 Amazon ECS 测试和支持的 Docker 版本。

注意

虽然 Amazon ECS 支持多个 Docker 版本,但为了获得最佳兼容性和支持,我们建议使用 Amazon ECS 优化版 AMI 附带的 Docker 版本。

经 Amazon ECS 优化的 AMI

经 Amazon ECS 优化的 AMI 的 Linux 变体使用 Amazon Linux 2 AMI 作为其基础。可以通过查询 Systems Manager Parameter Store API 来检索每个变体的 Amazon Linux 2 源 AMI 名称。有关更多信息,请参阅 检索经 Amazon ECS 优化的 Linux AMI 元数据。从最新的经 Amazon ECS 优化的 Amazon Linux 2 AMI 启动容器实例时,您将收到最新的容器代理版本。要启动具有经 Amazon ECS 优化的 Amazon Linux 2 AMI 的容器实例,请参阅 启动 Amazon ECS Linux 容器实例

其他信息

以下页面提供了有关更改的更多信息:

Amazon ECS 容器代理日志配置参数

Amazon ECS 容器代理将日志存储在您的容器实例上。

对于容器代理版本 1.36.0 及更高版本,预设情况下,日志位于 /var/log/ecs/ecs-agent.log(在 Linux 实例上)和 C:\ProgramData\Amazon\ECS\log\ecs-agent.log(在 Windows 实例上)。

对于容器代理版本 1.35.0 及以前的版本,预设情况下,日志位于 /var/log/ecs/ecs-agent.log.timestamp(在 Linux 实例上)和 C:\ProgramData\Amazon\ECS\log\ecs-agent.log.timestamp(在 Windows 实例上)。

预设情况下,代理日志每小时轮换一次,最多存储 24 个日志。

以下是可用于更改原定设置代理日志记录行为的容器代理配置变量。有关所有可用配置参数的详细信息,请参阅 Amazon ECS 容器代理配置或 GitHub 上的 Amazon ECS Agent README

对于容器代理版本 1.36.0 及更高版本,以下是使用 logfmt 格式时的示例日志文件。

level=info time=2019-12-12T23:43:29Z msg="Loading configuration" module=agent.go level=info time=2019-12-12T23:43:29Z msg="Image excluded from cleanup: amazon/amazon-ecs-agent:latest" module=parse.go level=info time=2019-12-12T23:43:29Z msg="Image excluded from cleanup: amazon/amazon-ecs-pause:0.1.0" module=parse.go level=info time=2019-12-12T23:43:29Z msg="Amazon ECS agent Version: 1.36.0, Commit: ca640387" module=agent.go level=info time=2019-12-12T23:43:29Z msg="Creating root ecs cgroup: /ecs" module=init_linux.go level=info time=2019-12-12T23:43:29Z msg="Creating cgroup /ecs" module=cgroup_controller_linux.go level=info time=2019-12-12T23:43:29Z msg="Loading state!" module=statemanager.go level=info time=2019-12-12T23:43:29Z msg="Event stream ContainerChange start listening..." module=eventstream.go level=info time=2019-12-12T23:43:29Z msg="Restored cluster 'auto-robc'" module=agent.go level=info time=2019-12-12T23:43:29Z msg="Restored from checkpoint file. I am running as 'arn:aws:ecs:us-west-2:0123456789:container-instance/auto-robc/3330a8a91d15464ea30662d5840164cd' in cluster 'auto-robc'" module=agent.go

以下是使用 JSON 格式时的示例日志文件。

{"time": "2019-11-07T22:52:02Z", "level": "info", "msg": "Starting Amazon Elastic Container Service Agent", "module": "engine.go"}

对于容器代理版本 1.35.0 及以前的版本,以下是日志文件的格式。

2016-08-15T15:54:41Z [INFO] Starting Agent: Amazon ECS Agent - v1.12.0 (895f3c1) 2016-08-15T15:54:41Z [INFO] Loading configuration 2016-08-15T15:54:41Z [WARN] Invalid value for task cleanup duration, will be overridden to 3h0m0s, parsed value 0, minimum threshold 1m0s 2016-08-15T15:54:41Z [INFO] Checkpointing is enabled. Attempting to load state 2016-08-15T15:54:41Z [INFO] Loading state! module="statemanager" 2016-08-15T15:54:41Z [INFO] Detected Docker versions [1.17 1.18 1.19 1.20 1.21 1.22] 2016-08-15T15:54:41Z [INFO] Registering Instance with ECS 2016-08-15T15:54:41Z [INFO] Registered! module="api client"