Amazon Elastic Container Service
开发人员指南 (API Version 2014-11-13)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

安装 Amazon ECS 容器代理

如果容器实例不是从包含 Amazon ECS 容器代理的 AMI 启动的,则可以使用以下过程安装该实例。

注意

Amazon ECS 容器代理包含在针对 Amazon ECS 优化过的 AMI 中且不需要安装。

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

  1. 启动一个 Amazon Linux 实例,该实例具有允许访问 Amazon ECS 的 IAM 角色。有关更多信息,请参阅 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 start ecs

    输出:

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

    [ec2-user ~]$ curl http://localhost:51678/v1/metadata

    输出:

    { "Cluster": "default", "ContainerInstanceArn": "<container_instance_ARN>", "Version": "Amazon ECS Agent - v1.16.0 (1ca656c)" }

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

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

  2. 连接到您的实例。

  3. 在实例上安装 Docker。Amazon ECS 需要最低 Docker 版本的 1.5.0 (推荐使用版本 17.06.2-ce),许多系统程序包管理器中的默认 Docker 版本 (如 yumapt-get) 未满足此最低要求。有关在特定 Linux 分发版上安装最新 Docker 版本的信息,请参阅 https://docs.docker.com/engine/installation/

    注意

    Amazon Linux AMI 始终包含用于 Amazon ECS 的 Docker 推荐版本。您可以利用 sudo yum install docker -y 命令在 Amazon Linux 上安装 Docker。

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

    ubuntu:~$ sudo docker version

    输出:

    Client version: 1.4.1 Client API version: 1.16 Go version (client): go1.3.3 Git commit (client): 5bc2ff8 OS/Arch (client): linux/amd64 Server version: 1.4.1 Server API version: 1.16 Go version (server): go1.3.3 Git commit (server): 5bc2ff8

    在本示例中,Docker 版本为 1.4.1,低于最低版本 1.5.0。在继续之前,此实例需要升级其 Docker。有关在特定 Linux 分发版上安装最新 Docker 版本的信息,请转到 https://docs.docker.com/engine/installation/

  5. 在容器实例上运行以下命令,以允许端口代理使用回环地址路由流量。

    ubuntu:~$ sudo sh -c "echo 'net.ipv4.conf.all.route_localnet = 1' >> /etc/sysctl.conf" ubuntu:~$ sudo sysctl -p /etc/sysctl.conf
  6. 对容器实例运行以下命令以便为任务启用 IAM 角色。有关更多信息,请参阅 任务的 IAM 角色

    ubuntu:~$ iptables -t nat -A PREROUTING -p tcp -d 169.254.170.2 --dport 80 -j DNAT --to-destination 127.0.0.1:51679 ubuntu:~$ iptables -t nat -A OUTPUT -d 169.254.170.2 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 51679
  7. 将新的 iptables 配置写入到特定于您的操作系统的位置。

    • 对于 Debian/Ubuntu:

      sudo sh -c 'iptables-save > /etc/iptables/rules.v4'
    • 对于 CentOS/RHEL:

      sudo sh -c 'iptables-save > /etc/sysconfig/iptables'
  8. 创建 /etc/ecs 目录并创建 Amazon ECS 容器代理配置文件。

    ubuntu:~$ sudo mkdir -p /etc/ecs && sudo touch /etc/ecs/ecs.config
  9. 编辑 /etc/ecs/ecs.config 文件并添加以下内容。如果不希望向默认群集注册容器实例,请将 ECS_CLUSTER 的值指定为群集名称。

    ECS_DATADIR=/data ECS_ENABLE_TASK_IAM_ROLE=true ECS_ENABLE_TASK_IAM_ROLE_NETWORK_HOST=true ECS_LOGFILE=/log/ecs-agent.log ECS_AVAILABLE_LOGGING_DRIVERS=["json-file","awslogs"] ECS_LOGLEVEL=info ECS_CLUSTER=default

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

    注意

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

  10. 在容器实例上拉取并运行最新的 Amazon ECS 容器代理。

    注意

    您应使用 Docker 重新启动策略或进程管理器(如 upstartsystemd)将容器代理作为服务或守护程序处理,并确保在容器代理退出后重新启动它。有关更多信息,请参阅 Docker 文档中的自动启动容器重新启动策略。针对 Amazon ECS 优化过的 AMI 使用 ecs-init RPM 达到此目的,并且您可以在 GitHub 上查看此 RPM 的源代码。有关适用于 Ubuntu 16.04 和 CentOS 7 的示例 systemd 单元文件,请参阅示例容器实例用户数据配置脚本

    以下示例代理运行命令分为若干个单独的行以显示每个选项。有关这些和其他代理运行时选项的更多信息,请参阅 Amazon ECS 容器代理配置

    重要

    运行启用了 SELinux 的操作系统需要在 docker run 命令中使用 --privileged 选项。此外,对于启用了 SELinux 的容器实例,建议向 /log/data 卷挂载添加 :Z 选项。但是,在运行该命令前,这些卷的主机挂载必须存在,否则会出现 no such file or directory 错误。如果您在启用了 SELinux 的容器实例上运行 Amazon ECS 代理时遇到困难,请执行以下操作:

    • 在容器实例上创建主机卷挂载点。

      ubuntu:~$ sudo mkdir -p /var/log/ecs /var/lib/ecs/data
    • --privileged 选项添加到下面的 docker 命令中。

    • :Z 选项追加到针对下面的 docker run 命令的 /log/data 容器卷挂载 (例如,--volume=/var/log/ecs/:/log:Z)。

    ubuntu:~$ sudo docker run --name ecs-agent \ --detach=true \ --restart=on-failure:10 \ --volume=/var/run:/var/run \ --volume=/var/log/ecs/:/log \ --volume=/var/lib/ecs/data:/data \ --volume=/etc/ecs:/etc/ecs \ --net=host \ --env-file=/etc/ecs/ecs.config \ amazon/amazon-ecs-agent:latest

    注意

    如果您收到一条 Error response from daemon: Cannot start container 消息,则可以利用 sudo docker rm ecs-agent 命令删除失败的容器并重新尝试运行代理。