安装 Amazon ECS 容器代理
如果您的容器实例不是使用经 Amazon ECS 优化的 AMI启动的,您可以使用以下过程之一手动安装 Amazon ECS 容器代理。Amazon ECS 容器代理包含在经 Amazon ECS 优化过的 AMI 中且不需要安装。
-
对于 Amazon Linux 2 实例,可以使用
amazon-linux-extras
命令安装代理。有关更多信息,请参阅在 Amazon Linux 2 EC2 实例上安装 Amazon ECS 容器代理。 -
对于 Amazon Linux AMI 实例,可以使用 Amazon YUM 存储库安装代理。有关更多信息,请参阅在 Amazon Linux AMI EC2 实例上安装 Amazon ECS 容器代理。
-
对于非 Amazon Linux 实例,您可以从区域性 S3 存储桶之一或 Amazon Elastic Container Registry Public 下载代理。如果您从区域性 S3 存储桶之一下载,则可以选择使用 PGP 签名来验证容器代理的有效性。有关更多信息,请参阅在非 Amazon Linux EC2 实例上安装 Amazon ECS 容器代理。
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 容器代理
-
启动一个 Amazon Linux 2 EC2 实例,该实例具有允许访问 Amazon ECS 的 IAM 角色。有关更多信息,请参阅Amazon ECS 容器实例 IAM 角色。
-
连接到您的实例。
-
禁用
docker
Amazon Linux 额外存储库。ecs
Amazon Linux 额外存储库带有自己的 Docker 版本,因此必须关闭docker
额外版本以免以后出现任何潜在冲突。这可确保您始终使用 Amazon ECS 希望您用于特定版本的容器代理的 Docker 版本。[ec2-user ~]$
sudo amazon-linux-extras disable docker
-
安装并启用
ecs
Amazon Linux 额外存储库。[ec2-user ~]$
sudo amazon-linux-extras install -y ecs; sudo systemctl enable --now ecs
-
(可选) 您可以利用代理自检 API 验证代理是否正在运行并查看有关新容器实例的一些信息。有关更多信息,请参阅Amazon ECS 容器代理自检。
[ec2-user ~]$
curl -s http://localhost:51678/v1/metadata | python -mjson.tool
注意 如果您未获得响应,请确保在启动实例时已关联 Amazon ECS 容器实例 IAM 角色。有关更多信息,请参阅Amazon ECS 容器实例 IAM 角色。
在 Amazon Linux AMI EC2 实例上安装 Amazon ECS 容器代理
要使用 Amazon YUM 存储库在 Amazon Linux AMI EC2 实例上安装 Amazon ECS 容器代理,请使用以下步骤。
要在 Amazon Linux AMI EC2 实例上安装 Amazon ECS 容器代理
-
启动一个 Amazon Linux AMI EC2 实例,该实例具有允许访问 Amazon ECS 的 IAM 角色。有关更多信息,请参阅Amazon ECS 容器实例 IAM 角色。
-
连接到您的实例。
-
安装
ecs-init
软件包。有关ecs-init
的更多信息,请参阅 GitHub 上的源代码。 [ec2-user ~]$
sudo yum install -y ecs-init
-
启动 Docker 守护程序。
[ec2-user ~]$
sudo service docker start
输出:
Starting cgconfig service: [ OK ] Starting docker: [ OK ]
-
启动
ecs-init
upstart 作业。[ec2-user ~]$
sudo service ecs start
输出:
ecs start/running, process
2804
-
(可选) 您可以利用代理自检 API 验证代理是否正在运行并查看有关新容器实例的一些信息。有关更多信息,请参阅Amazon 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 代理能够支持任务级别的资源限制。有关更多信息,请参阅 GitHub 上的 Amazon ECS 代理
下面按区域列出了每个系统架构最新的 Amazon ECS 容器代理文件,以供参考。
使用非 Amazon Linux AMI 在 Amazon EC2 实例上安装 Amazon ECS 容器代理
-
启动一个 Amazon EC2 实例,该实例具有允许访问 Amazon ECS 的 IAM 角色。有关更多信息,请参阅Amazon ECS 容器实例 IAM 角色。
-
连接到您的实例。
-
在实例上安装最新版本的 Docker。
-
检查 Docker 版本以验证系统是否满足最低版本要求。
docker --version
-
下载适用于您的操作系统和系统架构的相应的 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
-
(可选)向
default
集群以外的集群注册实例,编辑/etc/ecs/ecs.config
文件并添加以下内容。下面的示例指定了MyCluster
集群。ECS_CLUSTER=
MyCluster
有关这些和其他代理运行时选项的更多信息,请参阅 Amazon ECS 容器代理配置。
注意 您可以选择将代理环境变量存储在 Amazon S3 中(可在启动时使用 Amazon EC2 用户数据将其下载到容器实例)。建议对敏感信息(如私有存储库的身份验证凭证)采用此方法。有关更多信息,请参阅 将容器实例配置存储在 Amazon S3 中 和 任务的私有注册表身份验证:
-
启动
ecs
服务。ubuntu:~$
sudo systemctl start ecs
使用主机网络模式运行 Amazon ECS 代理
在运行 Amazon ECS 容器代理时,ecs-init
将使用 host
网络模式创建容器代理容器。这是容器代理容器的唯一受支持的网络模式。
这使您能够阻止对容器代理启动的容器的 Amazon EC2 实例元数据服务端点(http://169.254.169.254
)的访问。这将确保容器无法访问容器实例配置文件中的 IAM 角色凭证并强制任务仅使用 IAM 任务角色凭证。有关更多信息,请参阅任务 IAM 角色。
这还可以让容器代理不会争用 docker0
桥接上的连接和网络流量。