【发布时间】:2023-04-11 05:16:01
【问题描述】:
我刚刚开始使用 AWS EC2。我知道 EC2 就像一台远程计算机,我几乎可以在其中做任何我想做的事情。然后我发现了ECS。我知道它使用 Docker,但我对这两者之间的关系感到困惑。
ECS 是否只是 EC2 中的 Docker 安装? 如果我已经有一个 EC2 并启动了一个 ECS,是否意味着我有两个实例?
【问题讨论】:
标签: amazon-web-services amazon-ec2 amazon-ecs
我刚刚开始使用 AWS EC2。我知道 EC2 就像一台远程计算机,我几乎可以在其中做任何我想做的事情。然后我发现了ECS。我知道它使用 Docker,但我对这两者之间的关系感到困惑。
ECS 是否只是 EC2 中的 Docker 安装? 如果我已经有一个 EC2 并启动了一个 ECS,是否意味着我有两个实例?
【问题讨论】:
标签: amazon-web-services amazon-ec2 amazon-ecs
EC2 允许您启动单个实例,您几乎可以将其用于任何您喜欢的事情。 ECS 是一种容器服务,这意味着它将启动准备好启动容器应用程序的实例。 这两种服务之间的主要区别在于,使用 EC2,您必须以您选择的任何方法(手动、使用 CM 工具或任何其他方式)单独管理每个实例 - 部署您的应用程序并自己维护服务器之间的连接。 ECS 允许您启动一个机器集群,作为容器应用程序的部署基础,让您可以将集群中的所有实例视为一个可用于容器工作负载的大实例。
回答您的问题 - 您可以启动一个没有实例的 ECS 集群,但随后它将无法在其上运行任何东西。在 ECS 集群中注册 EC2 实例后,容器就可以在其中运行了。所以底线是 - 您可以仅使用一个实例同时使用 ECS 和 EC2,但这并不是这些服务的实际用例。
【讨论】:
你的问题
ECS 是否只是 EC2 中的 docker 安装?如果我已经有一个 EC2,那么我 启动一个ECS,是否意味着我有两个实例?
没有。 AWS ECS 只是EC2 实例的逻辑分组(集群),ECS 的所有EC2 实例部分充当Docker 主机,即ECS 可以发送命令以在它们上启动容器(@987654331 @)。
如果您已经有一个 EC2,然后启动 ECS,您仍然会有一个实例。如果您将 EC2 添加/注册(通过安装 AWS ECS 容器代理)到 ECS,它将成为集群的一部分,但仍然是 EC2 的单个实例。
没有注册任何 EC2(添加到集群)的 Amazon ECS 是没有用的。
TL;博士
概述
EC2 - 只是一台远程(虚拟)机器。 ECS 代表 Elastic Container Service - 根据computer cluster 的基本定义,ECS 基本上是一个逻辑分组
EC2 机器/实例。从技术上讲ECS 只是一个
配置以有效使用和管理您的EC2
实例资源,即存储、内存、CPU 等。为了进一步简化它,如果您启动了一个 Amazon ECS 而没有添加任何 EC2 实例,那么它没有任何好处,即您无能为力。 ECS 仅在添加一个(或多个)EC2 实例后才有意义。
这里的下一个令人困惑的事情是 container 术语 - 它不是完全虚拟化的机器实例,而 Docker 是我们可以用来创建容器实例的一种技术。 Docker 是一个可以安装在我们机器上的实用程序,这使它成为Docker 主机,并且在这台主机上你可以创建容器(与虚拟机相同 - 但更轻量级)。综上所述,ECS只是EC2实例的集群,并使用Docker在这些(EC2)主机上实例化容器/实例/虚拟机。
您需要做的就是启动ECS,并根据需要向其中注册/添加尽可能多的EC2 实例。您可以添加/注册 EC2 实例,您所需要的只是在您的 EC2 实例/机器上运行的 Amazon ECS 容器代理,可以手动或直接使用特殊的 AMI(Amazon 系统映像)即 Amazon ECS-optimized AMI,它已经有Amazon ECS 容器代理。在启动新 EC2 实例期间,代理会自动将其注册到默认 ECS 集群。
在Amazon ECS 集群内的每个实例(EC2 实例)上运行的容器代理将有关实例当前正在运行的任务和资源利用率的信息发送到 Amazon ECS,并启动和停止每当收到来自 Amazon ECS 的请求时执行任务。有关详细信息,请参阅Amazon ECS Container Agent。设置后,每个创建的容器实例(无论EC2 机器/节点)都将成为Amazon ECS 群中的一个实例。
有关更多信息 - 请阅读本文档中的第 10 步:Launching an Amazon ECS Container Instance:
为您的容器实例选择一个 AMI。你可以选择亚马逊 ECS 优化的 AMI,或其他操作系统,例如 CoreOS 或 Ubuntu。如果您不选择 Amazon ECS-optimized AMI,您需要 按照Installing the Amazon ECS Container Agent中的步骤操作。
默认情况下,您的容器实例启动到您的默认值 簇。如果您想启动到您自己的集群而不是 默认情况下,选择 Advanced Details 列表并粘贴以下内容 脚本进入用户数据字段,将 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
进一步澄清一下——您可以在没有ECS 的情况下在单个EC2 实例上创建容器。安装任何容器化技术,即Docker 并运行创建容器命令,将EC2 设置为Docker 主机,并拥有尽可能多的Docker 容器(或尽可能多的EC2') s 资源允许)。
【讨论】:
简单来说,弹性容器服务(ECS)是一种 Docker 容器编排服务。
您可以要求它运行一个或多个 Docker 映像,既可以作为具有自动缩放功能的“Service”,也可以作为临时的“Task”。
服务和任务在“集群”上运行。最初,集群是一组运行 ECS 集群代理的一个或多个预配置 EC2 服务器。集群代理会在 EC2 服务器上调度容器。这些 EC2 服务器显示在您的 EC2 实例列表中,并按常规 EC2 每分钟费用收费 - 您甚至可以像任何普通 EC2 服务器一样通过 SSH 连接到它们。 如果您想要更多容量来运行更多服务或任务,或者如果您想要抵御 EC2 故障,那么您需要更多 EC2 服务器。
2017 年 11 月左右,AWS 添加了 ECS Fargate。现在集群可以在不配置 EC2 节点的情况下运行“无服务器”。您只需定义任务或服务运行所需的 CPU 和内存量,这意味着您只需为 CPU 和内存时间而不是 EC2 付费。
【讨论】:
好的,如您所知,EC2 是 AWS 上的虚拟机,而 ECS 是 AWS 上的容器编排系统。
要使用 ECS,您需要将容器运行到一些虚拟机中,而 EC2 是提供该选项的选项之一。
您需要在 EC2 上安装 ecs-agent 才能与 ECS 建立连接。 ECS 还可以监控 EC2 上的资源使用情况。所以基本上你选择更高级的 EC2 类型,然后你的容器可以使用更多的资源(CPU/MEM)。
【讨论】:
主要区别在于 ECS 提供的 Fargate 实例。
【讨论】:
ECS 代表“弹性容器服务”。它是一个容器编排服务。
假设您有一个 Docker 容器正在运行,并且您决定更新 Docker 映像。如果你有一个容器正在运行,那么停止、拉取和运行是相对容易的任务,但如果你有 10 到 100 个容器正在运行,那么执行相同的步骤就很乏味。
使用 AWS ECS,您可以拥有此控制权。您指定是否需要更新,提供最新的镜像 ID,ECS 将为您处理停止、拉取和运行等命令。它还提供更多附加功能,请参阅 - https://aws.amazon.com/ecs/features/
EC2 代表“弹性计算云”。简单来说,它是一个虚拟机。
ECS 使用 EC2 运行您的容器。
'这些正在运行的 docker 容器(任务)在 EC2 实例上运行'。
【讨论】: