+86 13541016684Mon. - Fri. 10:00-22:00

Amazon ECS 容器集群配置

Amazon ECS 容器集群配置

Amazon ECS 容器集群配置

Amazon ECS-Docker 基本知识

Docker 基本知识

Docker 是一项可让您构建、运行、测试和部署基于 Linux 容器的分布式应用程序的技术。Amazon ECS 使用任务定义中的 Docker 映像来启动群集中的 EC2 实例上的容器。有关 Amazon ECS 产品详细信息、特色客户案例研究和常见问题,请参阅 Amazon EC2 Container Service 产品详细信息页面

本指南中的文档假定读者已基本了解 Docker 是什么及其工作方式。有关 Docker 的更多信息,请参阅 Docker 是什么?Docker 用户指南

安装 Docker

Docker 适用于许多不同的操作系统,包括大多数现代 Linux 分发版(如 Ubuntu)甚至 Mac OSX 和 Windows。有关如何在特定的操作系统上安装 Docker 的更多信息,请转到 Docker 安装指南

您甚至无需本地开发系统即可使用 Docker。如果您已使用 Amazon EC2,则可启动 Amazon Linux 实例并安装 Docker 以开始使用。

在 Amazon Linux 实例上安装 Docker

  1. 使用 Amazon Linux AMI 启动实例。有关更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的启动实例
  2. 连接到您的实例。有关更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的连接到您的 Linux 实例
  3. 更新实例上已安装的程序包和程序包缓存。
    Copy
    [ec2-user ~]$ sudo yum update -y
  4. 安装最新的 Docker Community Edition 程序包。
    Copy
    [ec2-user ~]$ sudo yum install -y docker
  5. 启动 Docker 服务。
    Copy
    [ec2-user ~]$ sudo service docker start Starting cgconfig service: [ OK ] Starting docker: [ OK ]
  6. ec2-user 添加到 docker 组,以便您能够执行 Docker 命令,而无需使用 sudo
    Copy
    [ec2-user ~]$ sudo usermod -a -G docker ec2-user
  7. 退出,再重新登录以接受新的 docker 组权限。
  8. 验证 ec2-user 是否能在没有 sudo 的情况下运行 Docker 命令。
    Copy
    [ec2-user ~]$ docker info Containers: 2 Images: 24 Storage Driver: devicemapper Pool Name: docker-202:1-263460-pool Pool Blocksize: 65.54 kB Data file: /var/lib/docker/devicemapper/devicemapper/data Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata Data Space Used: 702.3 MB Data Space Total: 107.4 GB Metadata Space Used: 1.864 MB Metadata Space Total: 2.147 GB Library Version: 1.02.89-RHEL6 (2014-09-01) Execution Driver: native-0.2 Kernel Version: 3.14.27-25.47.amzn1.x86_64 Operating System: Amazon Linux AMI 2014.09

    注意

    在某些情况下,您可能需要重新启动实例,以便为 ec2-user 提供访问 Docker 守护程序的权限。如果您看到以下错误消息,请尝试重启您的实例:

    Copy
    Cannot connect to the Docker daemon. Is the docker daemon running on this host?

(可选)注册 Docker Hub 账户

Docker 使用存储在存储库中的用来启动容器的映像。最常见的 Docker 映像存储库(以及 Docker 守护程序的默认存储库)是 Docker Hub。虽然您无需 Docker Hub 账户即可使用 Amazon ECS 或 Docker,但拥有 Docker Hub 账户可让您自由存储修改后的 Docker 映像,以便在 ECS 任务定义中使用这些映像。

有关 Docker Hub 以及注册账户的更多信息,请转到 https://hub.docker.com

Docker Hub 提供公共注册表和私有注册表。您可以在 Docker Hub 上创建私有注册表,并将 ECS 容器实例上的私有注册表身份验证配置为在任务定义中使用私有映像。

(可选)Amazon EC2 Container Registry

另一个注册表选项是 Amazon EC2 Container Registry (Amazon ECR)。Amazon ECR 是一项托管 AWS Docker 注册表服务。客户可以使用熟悉的 Docker CLI 推送、拉取和管理映像。有关 Amazon ECR 产品详细信息、特色客户案例研究和常见问题,请参阅 Amazon EC2 Container Registry 产品详细信息页面。要使用 Amazon ECR 完成此演练,请参阅 Amazon EC2 Container Registry 用户指南 中的创建 Docker 映像

创建 Docker 映像并将其上传到 Docker Hub

Amazon ECS 任务定义使用 Docker 映像启动群集中的容器实例上的容器。在此部分中,您将创建简单 PHP Web 应用程序的 Docker 映像,并在本地系统或 EC2 实例上测试此映像,然后将此映像推送至 Docker Hub 注册表,以便能够在 ECS 任务定义中使用它。

创建 PHP Web 应用程序的 Docker 映像

  1. 安装 git 并使用它将简单 PHP 应用程序从 GitHub 存储库克隆到系统中。
    1. 安装 git。
      Copy
      [ec2-user ~]$ sudo yum install -y git
    2. 将简单 PHP 应用程序克隆到系统中。
      Copy
      [ec2-user ~]$ git clone https://github.com/awslabs/ecs-demo-php-simple-app
  2. 将目录更改为 ecs-demo-php-simple-app 文件夹。
    Copy
    [ec2-user ~]$ cd ecs-demo-php-simple-app
  3. 在此文件中检查 Dockerfile。Dockerfile 是一个清单文件,描述了用于 Docker 映像的基本映像以及要安装的项目以及在此项目上运行的内容。有关 Dockerfile 的更多信息,请转到Dockerfile 参考
    Copy
    [ec2-user ecs-demo-php-simple-app]$ cat Dockerfile FROM ubuntu:12.04 # Install dependencies RUN apt-get update -y RUN apt-get install -y git curl apache2 php5 libapache2-mod-php5 php5-mcrypt php5-mysql # Install app RUN rm -rf /var/www/* ADD src /var/www # Configure apache RUN a2enmod rewrite RUN chown -R www-data:www-data /var/www ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 EXPOSE 80 CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]

    此 Dockerfile 使用 Ubuntu 12.04 映像。RUN 指令将更新程序包缓存,为 Web 服务器和 PHP 支持安装一些软件包,然后将您的 PHP 应用程序添加到 Web 服务器的文档根目录。EXPOSE 指令在容器上公开端口 80,CMD 指令启动 Web 服务器。

  4. 从您的 Dockerfile 构建 Docker 映像。将 my-dockerhub-username 替换为您的 Docker Hub 用户名。

    注意

    Docker 的某些版本可能需要在以下命令中使用 Dockerfile 完整路径,而不是所示的相对路径。

    Copy
    [ec2-user ecs-demo-php-simple-app]$ docker build -t my-dockerhub-username/amazon-ecs-sample .
  5. 运行 docker images 以验证是否已正确创建映像以及映像名称是否包含可推送到的存储库(在此示例中,您的 Docker Hub 用户名)。
    Copy
    [ec2-user ecs-demo-php-simple-app]$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE my-dockerhub-username/amazon-ecs-sample latest 43c52559a0a1 12 minutes ago 258.1 MB ubuntu 12.04 78cef618c77e 3 weeks ago 133.7 MB
  6. 运行新构建的映像。-p 80:80 选项将容器上公开的端口 80 映射到主机系统上的端口 80。有关 docker run 的更多信息,请转到 Docker 运行参考
    Copy
    [ec2-user ecs-demo-php-simple-app]$ docker run -p 80:80 my-dockerhub-username/amazon-ecs-sample apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2 for ServerName

    注意

    来自 Apache Web 服务器的输出将显示在终端窗口中。您可以忽略“Could not reliably determine the server's fully qualified domain name”消息。

  7. 打开浏览器并指向正在运行 Docker 并托管您的容器的服务器。
    • 如果您使用的是 EC2 实例,这将是服务器的 Public DNS 值,此值与您用于通过 SSH 连接到实例的地址相同。确保实例的安全组允许端口 80 上的入站流量。
    • 如果您正在本地运行 Docker,可将您的浏览器指向 http://localhost/
    • 如果您正在 Windows 或 Mac 计算机上使用 docker-machine,请使用 docker-machine ip 命令查找托管 Docker 的 VirtualBox VM 的 IP 地址,并将 machine-name 替换为您正在使用的 Docker 计算机的名称。
      Copy
      $ docker-machine ip machine-name 192.168.59.103

    您应看到正在运行简单 PHP 应用程序的网页。

    simple-php-app
  8. 通过键入 Ctrl +c 来停止 Docker 容器。
  9. 利用您的 Docker Hub 证书对 Docker 客户端进行身份验证。
    Copy
    [ec2-user ecs-demo-php-simple-app]$ docker login
  10. 将映像推送到 Docker Hub。
    Copy
    [ec2-user ecs-demo-php-simple-app]$ docker push my-dockerhub-username/amazon-ecs-sample

后续步骤

在完成映像推送后,您可以在 Amazon ECS 任务定义中使用可用于运行任务的 my-dockerhub-username/amazon-ecs-sample 映像。

使用 amazon-ecs-sample 映像注册任务定义

  1. 检查 ecs-demo-php-simple-app 文件夹中的 simple-app-task-def.json 文件。
    Copy
    {
        "family": "console-sample-app",
        "volumes": [
            {
                "name": "my-vol",
                "host": {}
            }
        ],
        "containerDefinitions": [
            {
                "environment": [],
                "name": "simple-app",
                "image": "amazon/amazon-ecs-sample", "cpu": 10, "memory": 500, "portMappings": [ { "containerPort": 80, "hostPort": 80 } ], "mountPoints": [ { "sourceVolume": "my-vol", "containerPath": "/var/www/my-vol" } ], "entryPoint": [ "/usr/sbin/apache2", "-D", "FOREGROUND" ], "essential": true }, { "name": "busybox", "image": "busybox", "cpu": 10, "memory": 500, "volumesFrom": [ { "sourceContainer": "simple-app" } ], "entryPoint": [ "sh", "-c" ], "command": [ "/bin/sh -c \"while true; do /bin/date > /var/www/my-vol/date; sleep 1; done\"" ], "essential": false } ] }

    此任务定义 JSON 文件指定两个容器,其中一个容器使用 amazon-ecs-sample 映像。默认情况下,将从 Amazon Docker Hub 存储库中提取此映像,但如果您想使用之前推送的my-dockerhub-username/amazon-ecs-sample 映像,则可以将上面定义的 amazon存储库更改为您自己的存储库。

  2. 使用 simple-app-task-def.json 文件注册任务定义。
    Copy
    [ec2-user ecs-demo-php-simple-app]$ aws ecs register-task-definition --cli-input-json file://simple-app-task-def.json

    任务定义已在 console-sample-app 系列中注册,如 JSON 文件中所定义。

使用 console-sample-app 任务定义运行任务

重要

您需要先将容器实例启动到您的集群中,然后才能在 Amazon ECS 中运行任务。有关如何设置和启动容器实例的更多信息,请参阅Amazon ECS 的设置开始使用 Amazon ECS

  • 使用以下 AWS CLI 命令以通过 console-sample-app 任务定义运行任务。
    Copy
    [ec2-user ecs-demo-php-simple-app]$ aws ecs run-task --task-definition console-sample-app

Amazon ECS 集群

Amazon ECS 群集是可以在其上放置任务的容器实例的逻辑分组。在您首次使用 Amazon ECS 时,系统将为您创建一个默认群集,但您可以在一个账户中创建多个群集以保持您的资源独立。

集群概念

  • 集群可包含多个不同的容器实例类型。
  • 集群是特定于区域的。
  • 容器实例一次只能属于一个集群。
  • 您可以为集群创建自定义 IAM 策略以允许或限制用户对特定集群的访问。有关更多信息,请参阅 Amazon ECS IAM 策略示例中的集群部分。

Amazon ECS-开始使用Amazon ECS

开始使用 Amazon ECS

让我们通过在 Amazon ECS 控制台中创建任务定义、计划任务和配置集群来开始使用 Amazon EC2 Container Service (Amazon ECS)。

您也可选择创建 Amazon EC2 Container Registry (Amazon ECR) 映像存储库并将映像推送到库中。有关 Amazon ECR 的更多信息,请参阅 Amazon EC2 Container Registry 用户指南

Amazon ECS 首次运行向导将会引导您完成开始使用 Amazon ECS 的过程。此向导为您提供了创建集群和启动我们的示例 Web 应用程序的选项,或者,如果您已有一个要在 Amazon ECS 中启动的 Docker 映像,则可通过该映像创建任务定义并将其用于您的集群。

重要

在开始之前,请确保完成Amazon ECS 的设置中的步骤,并且您的 AWS 用户具有Amazon ECS 首次运行向导 IAM 策略示例中指定的必要权限。

选择 Amazon ECS 首次运行向导配置选项

  1. 打开 https://console.aws.amazon.com/ecs/home#/firstRun 上的 Amazon ECS 控制台首次运行向导。
  2. 选择您的 Amazon ECS 首次运行选项。
    choose-first-run-config

    要创建 Amazon ECS 集群并向其部署容器应用程序,请选中顶部选项。要创建 Amazon ECR 存储库并将映像推送到库中(您可在 Amazon ECS 任务定义中使用该库),请选中底部选项。选择 Continue 以继续。

  3. 如果您选择创建 Amazon ECR 存储库,则完成首次运行向导接下来的两个部分 Configure repositoryBuild, tag, and push Docker image。如果您不创建 Amazon ECR 存储库,则向前跳至创建任务定义

配置存储库

存储库是您在 Amazon ECR 中存储 Docker 镜像的位置。当您在 Amazon ECR 中推送或拉取映像时,您将指定注册表和存储库位置以告知 Docker 将映像推送到哪个位置或从哪个位置拉取映像。

  • 对于 Repository name,输入存储库的唯一名称并选择 Next step

构建、标记和推送 Docker 映像

在向导的此部分中,您使用 Docker CLI 标记现有本地映像(您从 Dockerfile 构建或从另一个注册表中拉取的映像,例如 Docker Hub),然后将标记的映像推送到 Amazon ECR 注册表。

  1. 检索 docker login 命令,此命令可用于通过将控制台中的 aws ecr get-login 命令粘贴到终端窗口中来对注册表验证 Docker 客户端。

    注意

    get-login 命令在自版本 1.9.15 起的 AWS CLI 中可用。您可以使用 aws –version 命令查看 AWS CLI 的版本。

  2. 运行上一步中返回的 docker login 命令。此命令提供一个在 12 小时内有效的授权令牌。

    重要

    在执行此 docker login 命令时,进程列表 (ps -e) 显示中将为系统上的其他用户显示命令字符串。由于 docker login 命令包含验证凭证,因此系统上的其他用户可按此方式查看凭证并使用这些凭证来获取对存储库的推送和拉取访问权会带来风险。如果您所在的系统不安全,则应考虑此风险,并通过省略 -ppassword 选项并在系统提示时输入密码来以交互方式登录。

  3. (可选) 如果您有要让映像推送的 Dockerfile,请通过将控制台中的 docker build 命令粘贴到终端窗口来为新存储库构建并标记映像。确定您与您的 Dockerfile 在同一目录中。
  4. 通过将控制台中的 docker tag 命令粘贴到终端窗口中来为 ECR 注册表和新存储库标记映像。控制台命令假定您已在上一步中从 Dockerfile 构建映像;如果您未从 Dockerfile 构建映像,请将 repository:latest 的第一个实例替换为要推送的本地映像的映像 ID 或映像名。
  5. 通过将 docker push 命令粘贴到终端窗口中来将新标记的映像推送到 ECR 存储库。
  6. 选择完成

创建任务定义

任务定义就像是您的应用程序的蓝图。每次在 Amazon ECS 中启动任务时,您均应指定一个任务定义,以便服务知道要用于容器的 Docker 映像、任务中要使用的容器数量以及为每个容器分配的资源。

  1. 配置任务定义参数。首次运行向导会预加载一个任务定义,您可以看到在控制台中定义的 simple-app 容器。(可选)您可以选择重命名任务定义或通过选择容器名称并编辑显示的值(CPU 单位数位于Advanced container configuration 菜单下)来查看和编辑容器使用的资源。为简单起见,首次运行向导中创建的任务定义仅限用于一个容器。您之后可在 Amazon ECS 控制台中创建多容器任务定义。

    注意

    如果您在任务定义中使用的是 Amazon ECR 映像,请确保对您的 Amazon ECR 映像使用完整的 registry/repository:tag 命名。例如,aws_account_id.dkr.ecr.region.amazonaws.com/my-web-app:latest

    有关每个任务定义参数的作用的更多信息,请参阅任务定义参数

  2. 选择 Next step 以继续。

配置服务

在向导的此部分中,您可选择您希望配置通过任务定义创建的 Amazon ECS 服务的方式。一个服务将会启动并在您的集群中维护指定数量的任务定义副本。Amazon ECS sample 应用程序是一个基于 Web 的“Hello World”样式应用程序,可无限期地运行,因此通过将它作为服务运行,它将会在任务出现不正常或意外停止时重新启动。

  1. Service Name 字段中,为您的服务选择一个名称。
  2. Desired number of tasks 字段中,输入您要使用指定的任务定义启动的任务数量。

    注意

    如果您的任务定义包含静态端口映射,则您在向导的下一部分中启动的容器实例的数量必须大于或等于在此处指定的任务数量。

  3. (可选) 您可选择对您的服务使用 Application Load Balancer。从配置为使用负载均衡器的服务启动一个任务时,将会向负载均衡器注册启动该任务的容器实例,来自负载均衡器的流量将会分布到负载均衡器中的各个实例中。有关更多信息,请参阅 Application Load Balancer 简介

    重要

    AWS 资源中有 应用程序负载均衡器 时,将产生相应费用。有关 应用程序负载均衡器 定价的更多信息,请参阅 应用程序负载均衡器 定价

    完成下列步骤以对服务使用负载均衡器。

    1. Application load balancing 部分,选择 Container name : container port : protocol 菜单,然后选择 simple-app:80:tcp。此处的默认值是为示例应用程序设置的,但您可为负载均衡器配置不同的侦听器选项。有关更多信息,请参阅 服务负载均衡
    2. Service IAM Role 部分,选择 Select IAM role for service 菜单,然后选择您已创建的现有 Amazon ECS 服务 (ecsServiceRole) 角色,或单击 Create new role来为您的服务创建所需的 IAM 角色。
  4. 查看负载均衡器设置,然后单击 Next Step

配置集群

在向导的此部分,您将命名您的集群,然后配置可放置您的任务的容器实例、可从中访问您的实例和负载均衡器的地址范围,以及用于您的容器实例的 IAM 角色(让 Amazon ECS 为您处理此配置)。

  1. Cluster name 字段中,选择集群的名称。
  2. EC2 instance type 字段中,选择要用于您的容器实例的实例类型。具有更多 CPU 和内存资源的实例类型可处理更多任务。有关各种实例类型的更多信息,请参阅 Amazon EC2 实例
  3. Number of instances 字段中,键入您要在集群中启动的用于放置任务的 Amazon EC2 实例的数量。您在集群中的实例越多,您可在其中放置的任务就越多。Amazon EC2 实例在您的 AWS 资源中的存在期间将会产生费用。有关更多信息,请参阅 Amazon EC2 定价

    注意

    如果您创建的服务中有多个将容器端口公开给容器实例端口的所需任务(如Amazon ECS sample 应用程序),则至少需要在此处指定相同数量的实例。

  4. 选择要用于您的容器实例的密钥对名称。您使用 SSH 登录实例时需要此密钥对;如果您在此处未指定密钥对,则无法使用 SSH 连接到容器实例。如果您没有密钥对,在可在位于https://console.aws.amazon.com/ec2/ 的 Amazon EC2 控制台中创建一个。
  5. (可选)在 Security Group 部分,您可选择一个用于限制对实例的访问的 CIDR 块。默认值 (Anywhere) 允许来自整个 Internet 的访问。
  6. Container instance IAM role 部分,选择您已创建的现有 Amazon ECS 容器实例 (ecsInstanceRole) 角色,或选择 Create new role 来为您的容器实例创建所需的 IAM 角色。
  7. 单击 Review and Launch 以继续。

审核

  1. 查看您的任务定义、任务配置和集群配置,然后单击 Launch Instance & Run Service 以完成操作。您将会转到 Launch Status 页面,此页面显示您的启动状态并描述此过程的每一步(在创建和填充您的 Auto Scaling 组时,这可能需要几分钟时间才能完成)。
  2. 在启动完成后,选择 View service 以在 Amazon ECS 控制台中查看您的服务。

Amazon ECS-集群-创建集群

创建集群

您可以使用 AWS 管理控制台创建 ECS 群集,如本主题中所述。开始之前,请确保您已完成Amazon ECS 的设置中的步骤。创建集群后,您可以向其注册容器实例并运行任务和服务。

注意

此群集创建向导提供了一种创建 ECS 群集所需的资源的简单方法,并且可让您自定义几个常用的群集配置选项。但是,该向导不允许您自定义每个资源选项 (例如,容器实例 AMI ID)。如果您的需求超出此向导中支持的范围,请考虑使用我们在https://github.com/awslabs/ecs-refarch-cloudformation 上的参考架构。

不要试图在该向导创建基础资源后直接修改这些资源。

创建集群

  1. https://console.aws.amazon.com/ecs/ 上打开 Amazon ECS 控制台。
  2. 从导航栏中,选择要使用的区域。
  3. 在导航窗格中,选择 Clusters
  4. Clusters 页面上,选择 Create Cluster
  5. 对于 Cluster name,输入集群的名称。最多能包含 255 个字母 (大写和小写字母)、数字、连字符和下划线。
  6. (可选) 要创建没有关联容器实例的空群集,请依次选择 Create an empty clusterCreate

    注意

    如果您创建一个空群集,则必须先手动在该群集中启动容器实例,然后才能在群集中运行任务。有关更多信息,请参阅 启动 Amazon ECS 容器实例

  7. 对于 Instance type,请选择以下任一项:
    • On-Demand EC2 – 使用按需实例,您只需要按小时支付计算容量费用,无需长期购买或预先付款。
    • Spot – 使用竞价型实例,您可以为空闲的 Amazon EC2 计算容量出价,最多可低至按需价格的 1 折。有关更多信息,请参阅 Spot Instances.

      注意

      竞价型实例可能会中断。我们建议您不要为不能中断的应用程序使用竞价型实例。有关更多信息,请参阅竞价型实例中断

  8. 对于竞价型实例,执行以下操作;否则跳到下一步。
    1. 对于 Spot allocation strategy,选择满足您的需求的策略。有关更多信息,请参阅竞价型队列分配策略
    2. 对于 Maximum bid price (per instance/hour),指定一个出价。如果您的出价低于所选实例类型的现货价格,则您的竞价型实例不会启动。
  9. 对于 EC2 instance type,选择容器实例的 EC2 实例类型。您选择的实例类型决定了可用于您的任务的资源。
  10. 对于 Number of instances,选择要在群集中启动的 EC2 实例的数量。使用最新的经 Amazon ECS 优化的 AMI 启动这些实例。有关更多信息,请参阅 经 Amazon ECS 优化的 AMI
  11. 对于 EBS storage (GiB),选择要用于容器实例上的数据存储的 Amazon EBS 卷的大小。默认情况下,经 Amazon ECS 优化的 AMI 启动时使用一个 8 GiB 根卷和一个 22 GiB 数据卷。您可增加数据卷的大小,以支持更大的映像和容器存储。
  12. 对于 Key pair,选择要用于容器实例以进行 SSH 访问的 Amazon EC2 密钥对。如果您未指定密钥对,则无法使用 SSH 连接到容器实例。有关更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的 Amazon EC2 密钥对
  13. Networking 部分中,配置要启动容器实例的 VPC。默认情况下,集群创建向导会创建一个新的 VPC(具有位于不同可用区中的两个子网)和一个安全组(在端口 80 上对 Internet 开放)。这是一个适用于 HTTP 访问的基本设置。不过,您可以通过执行以下子步骤来修改这些设置。
    1. 对于 VPC,创建一个新 VPC 或选择现有 VPC。
    2. (可选) 如果您选择创建新 VPC,请为 CIDR Block 选择 VPC 的 CIDR 块。有关更多信息,请参阅 Amazon VPC 用户指南中的 Your VPC and Subnets
    3. 对于 Subnets,选择要用于 VPC 的子网。如果您选择创建新 VPC,则可保留默认设置,也可修改这些设置以满足您的需求。如果选择使用现有 VPC,则在该 VPC 中选择一个或多个要用于集群的子网。
    4. 对于 Security group,选择要附加到群集中的容器实例的安全组。如果您选择创建新的安全组,可指定一个 CIDR 块以允许入站流量(默认 0.0.0.0/0 对 Internet 开放),并指定在容器实例上开放的一个端口或一系列连续端口。要实现更复杂的安全组规则,您可以选择已创建的现有安全组。

      注意

      您还可以选择在创建集群后创建新的安全组并修改规则。有关更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的适用于 Linux 实例的 Amazon EC2 安全组

  14. Container instance IAM role 部分中,选择要用于容器实例的 IAM 角色。如果您的账户具有首次运行向导时在控制台中为您创建的 ecsInstanceRole,则默认情况下会将其选定。如果您的账户中没有此角色,则可选择创建此角色,也可以选择另一个用于您的容器实例的 IAM 角色。

    重要

    如果您未使用适当的 IAM 权限启动容器实例,则您的 Amazon ECS 代理将不会连接到群集。有关更多信息,请参阅 Amazon ECS 容器实例 IAM 角色

  15. 如果您之前选择了竞价型实例类型,则 Spot Fleet Role IAM role 部分指示会创建一个 IAM 角色 ecsSpotFleetRole
  16. 选择 Create

Amazon ECS-集群-扩展集群

扩展集群

如果您的集群是在 2015 年 11 月 24 日后使用 开始使用 Amazon ECS中描述的控制台首次运行体验创建的,则与为您的集群创建的 AWS CloudFormation 堆栈关联的 Auto Scaling 组可以向上扩展或向下扩展,以添加或删除容器实例。您可以从 Amazon ECS 控制台内部执行此扩展操作。

如果您的集群不是 2015 年 11 月 24 日后使用 开始使用 Amazon ECS中描述的控制台首次运行体验创建的,则您无法从 Amazon ECS 控制台扩展集群。但是,您仍可以在 Auto Scaling 控制台中修改与您的集群关联的现有 Auto Scaling 组。如果您没有与集群关联的 Auto Scaling 组,则可从现有容器实例中创建一个组。有关更多信息,请参阅 Auto Scaling 用户指南 中的使用 EC2 实例创建 Auto Scaling 组。您也可以从 Amazon EC2 控制台手动启动或终止容器实例;有关更多信息,请参阅启动 Amazon ECS 容器实例

扩展集群

  1. https://console.aws.amazon.com/ecs/ 上打开 Amazon ECS 控制台。
  2. 在导航栏中,选择群集所在的区域。
  3. 在导航窗格中,选择 Clusters
  4. 选择要扩展的群集。
  5. Cluster : name 页面上,选择 ECS Instances
    scale_cluster

    如果出现 Scale ECS Instances 按钮,则可以在下一步骤中扩展您的集群。否则,您必须手动调整您的 Auto Scaling 组以向上扩展或向下扩展您的实例,也可以在 Amazon EC2 控制台中手动启动或终止容器实例。

  6. 选择 Scale ECS Instances
  7. 对于 Desired number of instances,输入要将群集扩展到的实例的数量,然后选择Scale

    注意

    如果您减少集群中的容器实例数,则任何正在已终止实例上运行的任务都将停止。

Amazon ECS-清除Amazon ECS 资源

清除 Amazon ECS 资源

完成对特定 Amazon ECS 群集的试验或使用后,您应清除与其关联的资源,以避免产生与您未使用的资源相关的费用。

有些 Amazon ECS 资源(如任务、服务、集群和容器实例)是使用 Amazon ECS 控制台清除的。其他资源(例如 Amazon EC2 实例、Elastic Load Balancing 负载均衡器和 Auto Scaling 组)必须在 Amazon EC2 控制台中手动清除或通过删除创建它们的 AWS CloudFormation 堆栈来清除。

缩减服务

如果您的集群包含任何服务,您应该先将这些服务中的任务的预期数量缩减至 0,以便让 Amazon ECS 不在您清除资源时尝试在您的容器实例上启动新任务。按照更新服务中的过程操作并在Number of tasks 字段中输入 0。

或者,您也可以使用以下 AWS CLI 命令缩减您的服务。确保替换区域名称、集群名称和您要缩减的每个服务的服务名称。

Copy
aws ecs update-service --cluster default --service service_name --desired-count 0 --region us-west-2

删除服务

您必须先删除集群中的服务才能删除集群。在您的服务缩减至 0 个任务后,您就可以删除服务。对于您的集群中的每个服务,请按照删除服务中的过程进行删除。

或者,您也可以使用以下 AWS CLI 命令删除服务。确保替换区域名称、集群名称和您要删除的每个服务的服务名称。

Copy
aws ecs delete-service --cluster default --service service_name --region us-west-2

取消注册容器实例

您必须先取消注册集群中的容器实例才能删除集群。对于您的集群中的每个容器实例,请按照取消注册容器实例中的过程进行取消注册。

或者,您也可以使用以下 AWS CLI 命令取消注册容器实例。确保替换区域名称、集群名称和您要取消注册的每个容器实例的容器实例 ID。

Copy
aws ecs deregister-container-instance --cluster default --container-instance container_instance_id --region us-west-2 --force

删除集群

从您的 Amazon ECS 集群中删除活动资源后,您就可以删除该集群。请使用以下过程删除集群。

删除集群

  1. https://console.aws.amazon.com/ecs/ 上打开 Amazon ECS 控制台。
  2. 在导航栏中,选择集群所在的区域。
  3. 在导航窗格中,选择 Clusters
  4. Clusters 页面上,单击要删除的集群右上角的 x
    ECS_cluster
  5. 选择 Yes, Delete 以删除集群。

或者,您也可以使用以下 AWS CLI 命令删除集群。确保替换区域名称和您要删除的每个集群的集群名称。

Copy
aws ecs delete-cluster --cluster default --region us-west-2

删除 AWS CloudFormation 堆栈

如果您按照控制台首次运行向导创建了 Amazon ECS 资源,那么您的资源将包含在 AWS CloudFormation 堆栈中。您可以通过删除此堆栈来完全清除与其关联的所有剩余的 AWS 资源。删除 CloudFormation 堆栈将终止 EC2 实例、删除 Auto Scaling 组、删除任何 Elastic Load Balancing 负载均衡器,并删除与集群关联的 Amazon VPC 子网和 Internet 网关。

删除 AWS CloudFormation 堆栈

  1. 通过以下网址打开 AWS CloudFormation 控制台:https://console.aws.amazon.com/cloudformation/
  2. 从导航栏中,选择在其中创建集群的区域。
  3. 选择与您的 Amazon ECS 资源关联的堆栈。Stack Name 值以 EC2ContainerService-default 开头。
  4. 选择 Delete Stack,然后选择 Yes, Delete 以删除您的堆栈资源。