如何理解Amazon ECS群集

我最近尝试使用AWS的任务定义部署Docker容器。 一路上,我遇到了以下问题。

  1. 如何将实例添加到集群? 使用Amazon ECS控制台创build新集群时,如何将新的ec2实例添加到新集群。 换句话说,启动新的ec2实例时,需要使用哪种configuration才能将其分配给Amazon ECS下的用户创build的群集。

  2. 集群中需要多less个ECS实例,这些因素是什么?

  3. 如果在集群中有两个实例(ins1,ins2),并且我的webapp,db容器正在ins1中运行。 在更新运行服务(通过http://docs.aws.amazon.com/AmazonECS/latest/developerguide/update-service.html )之后,我可以看到新创build的服务在“ins2”中运行,旧的服务在“ins1”。 我的问题是,我的webapp容器分配给另一个实例后,访问IP地址成为另一个实例IP。 如何防止或者什么解决scheme使得相同的IP地址访问webapp? 不仅IP,更换新实例后的数据如何?

这实际上是三个完全不同的问题,所以最好把它们分成不同的问题 – 我会尽量提供一个答案,不pipe:

  1. Amazon ECS容器实例是间接添加的,这是Amazon ECS容器代理在每个实例上的作业,可以将自己注册到由您创build和命名的集群,详细信息请参阅概念和生命周期 。 为此,您需要按照启动Amazon ECS容器实例中列出的步骤操作,无论是手动还是通过自动化。 请注意第10步。

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

#!/bin/bash echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config 
  1. 您只需要ECS的单个实例就可以这样工作,因为集群本身是由您代表AWSpipe理的。 尽pipe如此,这对于高可用性场景来说还不够:

    • 因为容器主机只是常规的Amazon EC2实例,所以您需要遵循AWS最佳实践,并将其分布在两个或三个可用区(AZ)上,以便AZ的(罕见)停机不会影响您的群集,因为ECS可以将容器迁移到不同的主机实例(只要您的集群具有足够的备用容量)。
    • 许多促进容器的高级群集技术都有自己的服务编排层,并且通常需要不均匀的数量≥3(服务)实例来实现高可用性设置。 有关详细信息,请参阅“ pipe理中的 最佳群集大小”一节(另请参阅使用AWS EC2容器服务运行CoreOS )。
  2. 这是指在2中提到的高可用性和服务编排主题。更确切地说,您正在面临服务发现问题,即使在一般情况下使用容器技术,特别是在使用微服务时, 服务发现问题也会变得更加普遍:

    • 为了熟悉这一点,我推荐Jeff Lindsay的“ 了解Docker的现代服务发现”,其中详细介绍了您的用例。
    • Jeff还维护了日益stream行的Consul的集装箱版本,这使得服务可以简单地注册并通过DNS或HTTP接口发现其他服务 (请参阅在Docker和gliderlabs / docker-consul中 运行Consul )。