Amazon ECS和Amazon EC2有什么区别?


127

我刚刚开始使用AWS EC2。我知道EC2就像一台远程计算机,在其中我可以完成几乎所有我想做的事情。然后我了解了ECS。我知道它使用Docker,但是我对这两者之间的关系感到困惑。

ECS只是EC2中的Docker安装吗?如果我已经有EC2并启动了ECS,是否表示我有两个实例?

Answers:


169

你的问题

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

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

没有注册任何EC2(添加到集群)的Amazon ECS毫无用处。


TL; 博士

概述

  • EC2 -只是一个远程(虚拟)机器。
  • ECS代表Elastic Container Service-根据计算机群集的基本定义,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 Machine Image)来完成,即Amazon ECS优化的AMI,它已经具有Amazon ECS容器代理。在启动新的EC2实例期间,代理会自动将其注册到默认ECS集群。

在集群中的每个实例(实例)上运行的容器代理将有关实例当前正在运行的任务和资源利用率的信息发送到Amazon ECS,并在接收到来自Amazon ECS的请求时启动和停止任务。有关更多信息,请参阅Amazon ECS容器代理。设置后,每个创建的容器实例(无论是什么机器/节点)都将是swarm中的一个实例。EC2Amazon ECSEC2Amazon ECS


有关更多信息–请阅读本文档中的步骤10:启动Amazon ECS容器实例

为您的容器实例选择一个AMI。您可以选择经过Amazon ECS优化的AMI,也可以选择其他操作系统,例如CoreOS或Ubuntu。如果您未选择经过Amazon ECS优化的AMI,则需要按照安装Amazon ECS容器代理中的过程进行操作

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

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

或者,如果您在Amazon S3中具有ecs.config文件并已启用对容器实例角色的Amazon S3只读访问权限,请选择Advanced Details列表,然后将以下脚本粘贴到User data字段中,将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命令,将您设置EC2Docker主机,并拥有所需的尽可能多的Docker容器(或您EC2的资源允许的数量)。


8
ECS不代表弹性容器服务吗?
lfk

1
应该注意的是,随着AWS Fargate在2018年初(运行ECS)的发布,这个答案现在已经过时了:aws.amazon.com/fargate
bsplosion

77

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

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

在此处输入图片说明


很好的解释。比你!
Matley

好吧,您可以拥有不带ECS的EC2实例,但这就像一台简单的虚拟机一样。
Lea Reimann

31

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

并回答您的问题-您可以启动没有实例的ECS集群,但是它将无法在其上运行任何东西。在ECS群集中注册EC2实例后,即可在其中运行容器。因此,最重要的是-您只能在一个实例中使用ECS和EC2,但这不是构建这些服务的实际用例。


3

简而言之,弹性容器服务(ECS)是Docker容器编排服务。

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

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

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


2

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

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

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.