2015-07-22 105 views
21

我最近尝试使用AWS的任务定义部署docker容器。一路上,我遇到了以下问题。如何理解Amazon ECS群集

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

  2. 集群中需要多少个ECS实例,有哪些因素?

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

回答

31

这些都是真三个相当不同的问题,所以它可能最好在这里因此将其分成不同的问题 - 我会尽力提供一个答案,无论:

  1. Amazon ECS Container Instances间接添加,这是在每个实例上的Amazon ECS Container Agent的作业将自己注册到由您创建和命名的集群中,详情请参阅conceptslifecycle。为此,您需要按照Launching an Amazon ECS Container Instance中列出的步骤操作,无论是手动还是自动化。注意第10步:

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

#!/bin/bash 
echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config 
  • 你只需要一个实例ECS为这样的工作,因为集群本身是由AWS代表你的管理。这不会是足够高可用性方案,但:

    • 因为容器主机都只是普通的亚马逊EC2情况下,你需要遵循AWS最佳实践和传播他们在两个或三个Availability Zones (AZ)使得(罕见)AZ的中断不会影响您的群集,因为ECS可以将您的容器迁移到其他主机实例(前提是您的群集具有足够的备用容量)。
    • 许多促进容器的高级群集技术都有自己的服务编排层,并且通常需要使用不均匀数> 3(服务)实例来实现高可用性设置。您可以在Administration范围内(参见Running CoreOS with AWS EC2 Container Service)在最佳群集大小中了解关于此的更多信息。
  • 这是指回至2中提到已在高可用性和服务编排的主题,更确切地说你所面临的service discovery问题,使用一般的容器技术和微服务中,即使其中的日益流行特别是:

  • +1

    真棒的答案!我希望它仍然有效,但是如果某些事情发生了变化,你会以我为答案更新他的答案。 – the0ther