

# Amazon ECS EC2 容器实例
<a name="ecs-agent-versions"></a>

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 容器代理](ecs-agent-update.md)。

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

要查看每个代理版本包含了哪些功能和增强功能，请参阅 [https://github.com/aws/amazon-ecs-agent/releases](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 版本的支持。

## 生命周期
<a name="container-lifecycle"></a>

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

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

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

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

您可以手动耗尽实例，也可以构建自动扩缩组生命周期挂钩以将实例状态设置为 `DRAINING`。有关自动扩缩生命周期挂钩的更多信息，请参阅 [Amazon EC2 Auto Scaling 生命周期挂钩](https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html)。

## Docker 支持
<a name="docker-support"></a>

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

Amazon ECS 的最低所需 Docker 版本可以在 GitHub 上的 [Amazon ECS 代理规范文件](https://github.com/aws/amazon-ecs-agent/blob/dev/packaging/amazon-linux-ami-integrated/ecs-agent.spec#L53)中找到。

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

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

## 经 Amazon ECS 优化的 AMI
<a name="ecs-optimized-ami"></a>

有关经 Amazon ECS 优化的 AMI 的更多信息，请参阅经 [Amazon ECS 优化的 Linux AMI](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html)。

## 附加信息
<a name="additional-information"></a>

以下页面提供了有关更改的更多信息：
+ GitHub 上的 [Amazon ECS 代理变更日志](https://github.com/aws/amazon-ecs-agent/blob/master/CHANGELOG.md)
+ [Amazon Linux 2 发行说明](https://docs.aws.amazon.com/AL2/latest/relnotes/relnotes-al2.html)。
+ Docker 文档中的 [Docker 引擎版本注释](https://docs.docker.com/engine/release-notes/27/)
+ NVIDIA 文档中的 [NVIDIA 驱动程序文档](https://docs.nvidia.com/datacenter/tesla/index.html)

## Amazon ECS 容器代理日志配置参数
<a name="agent-logs"></a>

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 容器代理配置](ecs-agent-config.md)或 GitHub 上的 [Amazon ECS Agent README](https://github.com/aws/amazon-ecs-agent/blob/master/README.md)。

对于容器代理版本 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"}
```