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

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

安装 Amazon ECS 容器代理

如果您的容器实例不是使用经 Amazon ECS 优化的 AMI启动的,您可以使用以下过程之一手动安装 Amazon ECS 容器代理。Amazon ECS 容器代理包含在经 Amazon ECS 优化过的 AMI 中且不需要安装。

注意

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 2 EC2 实例上安装 Amazon ECS 容器代理

要使用 amazon-linux-extras 命令在 Amazon Linux 2 EC2 实例上安装 Amazon ECS 容器代理,请使用以下步骤。

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

  2. 连接到您的实例。

  3. 禁用 docker Amazon Linux 额外存储库。ecs Amazon Linux 额外存储库带有自己的 Docker 版本,因此必须关闭 docker 额外版本以免以后出现任何潜在冲突。这可确保您始终使用 Amazon ECS 希望您用于特定版本的容器代理的 Docker 版本。

    [ec2-user ~]$ sudo amazon-linux-extras disable docker
  4. 安装并启用 ecs Amazon Linux 额外存储库。

    [ec2-user ~]$ sudo amazon-linux-extras install -y ecs; sudo systemctl enable --now ecs
  5. (可选) 您可以利用代理自检 API 验证代理是否正在运行并查看有关新容器实例的一些信息。有关更多信息,请参阅 亚马逊 ECS 容器内省

    [ec2-user ~]$ curl -s http://localhost:51678/v1/metadata | python -mjson.tool
    注意

    如果您未获得响应,请确保在启动实例时已关联 Amazon ECS 容器实例 IAM 角色。有关更多信息,请参阅 Amazon ECS 容器实例 IAM 角色

在亚马逊 Linux EC2 实例上安装 Amazon ECS 容器代理

要使用 Amazon YUM 存储库在 Amazon Linux EC2 实例上安装 Amazon ECS 容器代理,请使用以下步骤。

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

  2. 连接到您的实例。

  3. 安装 ecs-init 软件包。有关的更多信息ecs-init,请参阅上的源代码 GitHub

    [ec2-user ~]$ sudo yum install -y ecs-init
  4. 启动 Docker 守护程序。

    [ec2-user ~]$ sudo service docker start

    输出:

    Starting cgconfig service:                                 [  OK  ]
    Starting docker:	                                   [  OK  ]
  5. 启动 ecs-init upstart 作业。

    [ec2-user ~]$ sudo service ecs start

    输出:

    ecs start/running, process 2804
  6. (可选) 您可以利用代理自检 API 验证代理是否正在运行并查看有关新容器实例的一些信息。有关更多信息,请参阅 亚马逊 ECS 容器内省

    [ec2-user ~]$ curl -s http://localhost:51678/v1/metadata | python -mjson.tool

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

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

注意

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

下面按区域列出了每个系统架构最新的 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 US West(Oregon)

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 South America(São Paulo)

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 S3 中任务的私有注册表身份验证

  8. 启动 ecs 服务。

    ubuntu:~$ sudo systemctl start ecs

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

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

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

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