安装 Amazon ECS 容器代理 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

安装 Amazon ECS 容器代理

如果您想向 Amazon ECS 集群注册 Amazon EC2 实例,并且该实例不使用基于经 Amazon ECS 优化的 AMI 的 AMI,您可以使用以下过程手动安装 Amazon ECS 容器代理。为此,您可以从区域性 Amazon S3 存储桶之一或 Amazon Elastic Container Registry Public 下载代理。如果您从区域性 Amazon S3 存储桶之一下载,则可以选择使用 PGP 签名来验证容器代理的有效性。

注意

Amazon ECS 和 Docker 服务的 systemd 单元都有一个指令,在启动两个这两项服务之前等待 cloud-init 完成。在您的 Amazon EC2 用户数据完成运行之前,cloud-init 过程不会被视为已完成。因此,通过 Amazon EC2 用户数据启动 Amazon ECS 或 Docker 可能会导致死锁。要使用 Amazon EC2 用户数据启动容器代理,您可以使用 systemctl enable --now --no-block ecs.service

在非 Amazon Linux EC2 实例上安装 Amazon ECS 容器代理

要在非 Amazon EC2 实例上安装 Amazon ECS 容器代理,您可以从区域性 Amazon S3 存储桶之一下载代理并安装它。

注意

使用非 Amazon Linux AMI 时,您的 Amazon EC2 实例需要 cgroupfs 支持 cgroup 驱动程序,以便 Amazon ECS 代理能够支持任务级别的资源限制。有关更多信息,请参阅 GitHub 上的 Amazon ECS 代理

下面按区域列出了每个系统架构最新的 Amazon ECS 容器代理文件,以供参考。

区域 区域名称 Amazon ECS init deb 文件 Amazon ECS init rpm 文件
us-east-2 美国东部(俄亥俄州)

Amazon ECS init amd64(amd64)

Amazon ECS init arm64(arm64)

Amazon ECS init x86_64(x86_64)

Amazon ECS init aarch64(aarch64)

us-east-1 美国东部(弗吉尼亚州北部)

Amazon ECS init amd64(amd64)

Amazon ECS init arm64(arm64)

Amazon ECS init x86_64(x86_64)

Amazon ECS init aarch64(aarch64)

us-west-1 美国西部(加利福尼亚北部)

Amazon ECS init amd64(amd64)

Amazon ECS init arm64(arm64)

Amazon ECS init x86_64(x86_64)

Amazon ECS init aarch64(aarch64)

us-west-2 美国西部(俄勒冈州)

Amazon ECS init amd64(amd64)

Amazon ECS init arm64(arm64)

Amazon ECS init x86_64(x86_64)

Amazon ECS init aarch64(aarch64)

ap-east-1 亚太地区(香港)

Amazon ECS init amd64(amd64)

Amazon ECS init arm64(arm64)

Amazon ECS init x86_64(x86_64)

Amazon ECS init aarch64(aarch64)

ap-northeast-1 亚太地区(东京)

Amazon ECS init amd64(amd64)

Amazon ECS init arm64(arm64)

Amazon ECS init x86_64(x86_64)

Amazon ECS init aarch64(aarch64)

ap-northeast-2 亚太地区(首尔)

Amazon ECS init amd64(amd64)

Amazon ECS init arm64(arm64)

Amazon ECS init x86_64(x86_64)

Amazon ECS init aarch64(aarch64)

ap-south-1 亚太地区(孟买)

Amazon ECS init amd64(amd64)

Amazon ECS init arm64(arm64)

Amazon ECS init x86_64(x86_64)

Amazon ECS init aarch64(aarch64)

ap-southeast-1 亚太地区(新加坡)

Amazon ECS init amd64(amd64)

Amazon ECS init arm64(arm64)

Amazon ECS init x86_64(x86_64)

Amazon ECS init aarch64(aarch64)

ap-southeast-2 亚太地区(悉尼)

Amazon ECS init amd64(amd64)

Amazon ECS init arm64(arm64)

Amazon ECS init x86_64(x86_64)

Amazon ECS init aarch64(aarch64)

ca-central-1 加拿大(中部)

Amazon ECS init amd64(amd64)

Amazon ECS init arm64(arm64)

Amazon ECS init x86_64(x86_64)

Amazon ECS init aarch64(aarch64)

cn-north-1 中国(北京)

Amazon ECS init amd64(amd64)

Amazon ECS init arm64(arm64)

Amazon ECS init x86_64(x86_64)

Amazon ECS init aarch64(aarch64)

cn-northwest-1 中国(宁夏)

Amazon ECS init amd64(amd64)

Amazon ECS init arm64(arm64)

Amazon ECS init x86_64(x86_64)

Amazon ECS init aarch64(aarch64)

eu-central-1 欧洲地区(法兰克福)

Amazon ECS init amd64(amd64)

Amazon ECS init arm64(arm64)

Amazon ECS init x86_64(x86_64)

Amazon ECS init aarch64(aarch64)

eu-west-1 欧洲地区(爱尔兰)

Amazon ECS init amd64(amd64)

Amazon ECS init arm64(arm64)

Amazon ECS init x86_64(x86_64)

Amazon ECS init aarch64(aarch64)

eu-west-2 欧洲地区(伦敦)

Amazon ECS init amd64(amd64)

Amazon ECS init arm64(arm64)

Amazon ECS init x86_64(x86_64)

Amazon ECS init aarch64(aarch64)

eu-west-3 欧洲地区(巴黎)

Amazon ECS init amd64(amd64)

Amazon ECS init arm64(arm64)

Amazon ECS init x86_64(x86_64)

Amazon ECS init aarch64(aarch64)

sa-east-1 南美洲(圣保罗)

Amazon ECS init amd64(amd64)

Amazon ECS init arm64(arm64)

Amazon ECS init x86_64

Amazon ECS init aarch64(aarch64)

使用非 Amazon Linux AMI 在 Amazon EC2 实例上安装 Amazon ECS 容器代理
  1. 启动一个 Amazon EC2 实例,该实例具有允许访问 Amazon ECS 的 IAM 角色。有关更多信息,请参阅 Amazon ECS 容器实例 IAM 角色

  2. 连接到您的实例。

  3. 在实例上安装最新版本的 Docker。

  4. 检查 Docker 版本以验证系统是否满足最低版本要求。

    注意

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

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

    docker --version
  5. 下载适用于您的操作系统和系统架构的相应的 Amazon ECS 代理文件并进行安装。

    对于 deb 架构:

    ubuntu:~$ curl -O https://s3.us-west-2.amazonaws.com/amazon-ecs-agent-us-west-2/amazon-ecs-init-latest.amd64.deb ubuntu:~$ sudo dpkg -i amazon-ecs-init-latest.amd64.deb

    对于 rpm 架构:

    fedora:~$ curl -O https://s3.us-west-2.amazonaws.com/amazon-ecs-agent-us-west-2/amazon-ecs-init-latest.x86_64.rpm fedora:~$ sudo yum localinstall -y amazon-ecs-init-latest.x86_64.rpm
  6. 编辑 /lib/systemd/system/ecs.service 文件并在 [Unit] 部分末尾添加以下行。

    After=cloud-final.service
  7. (可选)向 default 集群以外的集群注册实例,编辑 /etc/ecs/ecs.config 文件并添加以下内容。下面的示例指定了 MyCluster 集群。

    ECS_CLUSTER=MyCluster

    有关这些和其他代理运行时选项的更多信息,请参阅 Amazon ECS 容器代理配置

    注意

    您可以选择将代理环境变量存储在 Amazon S3 中(可在启动时使用 Amazon EC2 用户数据将其下载到容器实例)。建议对敏感信息(如私有存储库的身份验证凭证)采用此方法。有关更多信息,请参阅将 Amazon ECS 容器实例配置存储在 Amazon S3 中在 Amazon ECS 中使用非 Amazon 容器映像

  8. 启动 ecs 服务。

    ubuntu:~$ sudo systemctl start ecs

使用主机网络模式运行 Amazon ECS 代理

在运行 Amazon ECS 容器代理时,ecs-init 将使用 host 网络模式创建容器代理容器。这是容器代理容器的唯一受支持的网络模式。

这使您能够阻止对容器代理启动的容器的 Amazon EC2 实例元数据服务端点 (http://169.254.169.254) 的访问。这将确保容器无法访问容器实例配置文件中的 IAM 角色凭证并强制任务仅使用 IAM 任务角色凭证。有关更多信息,请参阅 Amazon ECS 任务 IAM 角色

这还可以让容器代理不会争用 docker0 桥接上的连接和网络流量。