如何理解Amazon ECS群集

All*_*ang 25 deployment amazon-ec2 amazon-web-services amazon-ecs docker

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

  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,更改为新实例后的数据怎么样?

Ste*_*pel 35

这些实际上是三个相当不同的问题,所以最好将它们分成不同的问题 - 我会尝试提供答案,无论如何:

  1. Amazon ECS容器实例是间接添加的,每个实例上的Amazon ECS容器代理的工作是将自己注册到由您创建和命名的集群,有关详细信息,请参阅概念和生命周期.为此,您需要按照启动Amazon ECS容器实例中概述的步骤进行操作,无论是手动还是自动化.注意第10步:

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

#!/bin/bash
echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config
Run Code Online (Sandbox Code Playgroud)
  1. 您只需要ECS的单个实例就可以这样工作,因为集群本身由AWS代表您管理.但这对于高可用性方案来说还不够:

    • 由于容器主机只是常规的Amazon EC2实例,因此您需要遵循AWS最佳实践并将其分布在两个或三个可用区(AZ)上,以便AZ的(罕见)中断不会影响您的群集,因为ECS可以将容器迁移到其他主机实例(前提是您的群集有足够的备用容量).
    • 许多便于容器的高级群集技术都有自己的服务编排层,并且通常需要数量不均匀的> = 3(服务)实例才能实现高可用性设置.例如,您可以在管理中的最佳群集大小部分中阅读有关此内容的更多信息(另请参阅使用AWS EC2容器服务运行CoreOS).
  2. 这又回到了2中提到的高可用性和服务编排主题,更确切地说,您正面临着服务发现的问题,即使在使用容器技术和特别是微服务时,服务发现也会变得更加普遍:

  • 很棒的答案!我希望它仍然有效,但你给我的印象是,如果事情发生变化,你会更新他的答案。 (2认同)