Amazon EC2 Container Service
开发人员指南 (API Version 2014-11-13)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

安装 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 上的源代码

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

    Copy
    [ec2-user ~]$ sudo service docker start

    输出:

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

    Copy
    [ec2-user ~]$ sudo start ecs

    输出:

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

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

    输出:

    {
      "Cluster": "default",
      "ContainerInstanceArn": "<container_instance_ARN>",
      "Version": "Amazon ECS Agent - v1.14.5 (0dcd02c)"
    }

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

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

  2. 连接到您的实例。

  3. 在实例上安装 Docker。Amazon ECS 需要最低 Docker 版本的 1.5.0 (推荐使用版本 17.03.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 版本以验证系统是否满足最低版本要求。

    Copy
    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. 在容器实例上运行以下命令,以允许端口代理使用回环地址路由流量。

    Copy
    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 角色

    Copy
    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:

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

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

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

    Copy
    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 代理时遇到困难,请执行以下操作:

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

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

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

    Copy
    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 命令删除失败的容器并重新尝试运行代理。