Amazon ECS和Amazon EC2有什么区别?

时间:2016-11-13 15:37:40

标签: amazon-web-services amazon-ec2 amazon-ecs

我刚刚开始使用AWS EC2,我知道EC2就像一台远程计算机,我几乎可以做任何我想做的事情。然后我找到ECS,我知道它使用的是docker,但却被这两者之间的关系搞糊涂了。

ECS只是在EC2中安装码头吗? 如果我已经有EC2,那么我启动一个ECS,这是否意味着我有两个实例?

7 个答案:

答案 0 :(得分:102)

你的问题

  

ECS只是在EC2中安装码头吗?如果我已经有EC2,那么我   启动ECS,这是否意味着我有两个实例?

没有。 AWS ECS只是EC2个实例的逻辑分组(群集),EC2的所有ECS个实例都是Docker个主机,即ECS可以发送命令在它们上启动容器(EC2)。 如果您已经有EC2,然后启动ECS,那么您仍然只有一个实例。如果您将EC2添加/注册(通过安装AWS ECS容器代理)到ECS,它将成为群集的一部分,但仍然是EC2的单个实例。

没有任何EC2注册(添加到群集中)的Amazon ECS无济于事。

<强> TL; DR

概述

  • EC2 - 只是一台远程(虚拟)计算机。
  • ECS 代表 Elastic Container Service - 根据computer cluster的基本定义, ECS是基本上是一个逻辑分组 EC2个机器/实例。从技术上讲,ECS仅仅是一个问题 有效使用和管理EC2的配置 实例资源,即存储,内存,CPU等。

为了进一步简化,如果您已经添加了Amazon ECS但没有添加EC2个实例,那么它什么都不做,即您无法做任何事情。 ECS只有在添加一个(或多个)EC2个实例后才有意义。

下一个令人困惑的事情是容器术语 - 它不是完全虚拟化的机器实例,而 Docker 是我们可以用来创建容器实例的一种技术。 Docker是一个可以在我们的机器上安装的实用程序,它使它成为Docker主机,在这个主机上你可以创建容器(与虚拟机相同 - 但更轻量级)。总而言之, ECS只是关于EC2实例的集群,并使用Docker来实例化这些(EC2)主机上的容器/实例/虚拟机

您需要做的就是启动ECS,并根据需要向其注册/添加尽可能多的EC2个实例。您可以添加/注册EC​​2实例,您只需要在您的EC2实例/机器上运行Amazon ECS容器代理,这可以手动完成或直接使用特殊的AMI(亚马逊机器映像),即Amazon ECS优化的AMI,已经有Amazon ECS容器代理。在启动新的EC2实例期间,代理会自动将其注册到默认的ECS群集。

EC2群集中的每个实例(Amazon ECS实例)上运行的容器代理会将有关实例的当前运行任务和资源利用率的信息发送到Amazon ECS,并在收到Amazon ECS的请求时启动和停止任务。有关更多信息,请参阅Amazon ECS Container Agent。设置后,每个创建的容器实例(任何EC2机器/节点)都将成为Amazon ECS群中的实例。

有关详细信息,请参阅本文档中的步骤10:Launching an Amazon ECS Container Instance

  

为容器实例选择AMI。您可以选择亚马逊   ECS优化的AMI,或其他操作系统,如CoreOS或   Ubuntu Linux系统。如果您不选择Amazon ECS优化的AMI,则需要   按照Installing the Amazon ECS Container Agent中的步骤进行操作。

     

默认情况下,容器实例将启动为默认值   簇。如果要启动到自己的群集而不是   默认情况下,选择高级详细信息列表并粘贴以下内容   脚本进入用户数据字段,用。替换your_cluster_name   您的群集的名称。

#!/bin/bash
echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config
     

或者,如果您在Amazon S3中有ecs.config文件并且已启用   Amazon S3只读访问您的容器实例角色,选择   高级详细信息列出并将以下脚本粘贴到用户   数据字段,将your_bucket_name替换为您的存储桶名称   安装AWS CLI并在启动时编写配置文件。   注意有关此配置的详细信息,请参阅存储   Amazon S3中的容器实例配置。

#!/bin/bash
yum install -y aws-cli
aws s3 cp s3://your_bucket_name/ecs.config /etc/ecs/ecs.config

只是为了进一步澄清 - 您可以在单EC2个实例上创建容器而不使用ECS。安装任何容器化技术,即Docker并运行create container命令,将EC2设置为Docker主机,并根据需要添加Docker个容器(或和你的EC2资源一样多。

答案 1 :(得分:23)

EC2允许您启动个别实例,您可以将其用于任何您喜欢的任何内容。 ECS是一个容器服务,这意味着它将启动准备启动容器应用程序的实例。 两种服务之间的主要区别在于,使用EC2,您必须以您选择的任何方法(手动,使用CM工具或任何其他方式)单独管理每个实例 - 部署应用程序并自行维护服务器之间的连接。 ECS允许您启动一组计算机作为容器应用程序的部署基础,允许您将集群中的所有实例视为可用于容器工作负载的一个大实例。

并回答你的问题 - 你可以启动一个没有实例的ECS集群,但它将无法在其上运行任何内容。在ECS群集中注册EC2实例后,容器就可以在其中运行。所以底线是 - 你可以只使用一个实例使用ECS和EC2,但这不是这些服务的实际用例。

答案 2 :(得分:11)

简单来说,ECS是经理,而EC2实例就像员工。 该经理(ECS)之下的所有雇员(EC2)都可以执行“ Docker”任务,并且经理也非常了解“ Docker”。因此,无论何时需要“泊坞窗”资源,都可以在Manager面前看到。经理已经拥有每位员工的状态(EC2)决定应由哪位员工执行任务。

现在,回到您的问题,没有“雇员”的经理没有道理。

enter image description here

答案 3 :(得分:1)

好的,您知道EC2是AWS上的虚拟机,而ECS是AWS上的容器编排系统。

要使用ECS,您需要将容器运行到某些虚拟机中,EC2是提供虚拟机的一种选择。

您需要在EC2上安装ecs-agent才能与ECS建立连接。 ECS还可以监视EC2上的资源使用情况。因此,基本上,您选择的是更高级的EC2类型,然后您的容器可以使用更多的资源(CPU / MEM)。

答案 4 :(得分:0)

简单地说,弹性容器服务(ECS)是Docker容器编排服务。

您可以要求它运行一个或多个Docker映像,既可以作为具有自动缩放功能的“ 服务”,也可以作为临时的“ 任务”。< / p>

服务和任务在“ 集群”上运行。群集最初是一组由一个或多个运行ECS群集代理的预配置EC2服务器组成。群集代理将在EC2服务器上安排容器。这些EC2服务器显示在您的EC2实例列表中,并按常规EC2每分钟收费-您甚至可以像任何普通EC2服务器一样通过SSH对其进行SSH。 如果您希望有更多的容量来运行更多的服务或任务,或者想要对EC2失败具有弹性,那么您将需要更多的EC2服务器。

2017年11月前后,AWS添加了ECS Fargate 。现在,群集无需配置EC2节点即可运行“无服务器”。您只需定义任务或服务运行所需的CPU和内存量,这意味着您只需为CPU和内存时间付费,而不是为EC2付费。

答案 5 :(得分:0)

主要区别在于ECS提供的Fargate实例。

答案 6 :(得分:0)

ECS 代表“弹性容器服务”。它是一个容器编排服务。
假设您有一个 Docker 容器正在运行,并且您决定更新 Docker 映像。如果您有一个容器在运行,那么停止、拉取和运行是相对容易的任务,但如果您有 10 到 100 个容器在运行,那么执行相同的步骤就很乏味了。
使用 AWS ECS,您可以拥有这种控制权。您指定是否需要更新并提供最新的映像 ID,ECS 将为您处理停止、拉取和运行等命令。它还提供了更多附加功能,请参阅 - https://aws.amazon.com/ecs/features/
EC2 代表“弹性计算云”。简单来说,它是一个虚拟机。
ECS 使用 EC2 来运行您的容器。
'这些正在运行的 docker 容器(任务)在 EC2 实例上运行'