如何理解Amazon ECS群集
我最近尝试使用AWS的任务定义部署Docker容器。 一路上,我遇到了以下问题。
-
如何将实例添加到集群? 使用Amazon ECS控制台创build新集群时,如何将新的ec2实例添加到新集群。 换句话说,启动新的ec2实例时,需要使用哪种configuration才能将其分配给Amazon ECS下的用户创build的群集。
-
集群中需要多less个ECS实例,这些因素是什么?
-
如果在集群中有两个实例(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:
- Amazon ECS容器实例是间接添加的,这是Amazon ECS容器代理在每个实例上的作业,可以将自己注册到由您创build和命名的集群,详细信息请参阅概念和生命周期 。 为此,您需要按照启动Amazon ECS容器实例中列出的步骤操作,无论是手动还是通过自动化。 请注意第10步。
默认情况下,您的容器实例启动到您的默认集群。 如果要启动到自己的群集而不是默认群集,请select“高级详细信息”列表,然后将以下脚本粘贴到“用户数据”字段中,将your_cluster_namereplace为群集的名称。
#!/bin/bash echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config
-
您只需要ECS的单个实例就可以这样工作,因为集群本身是由您代表AWSpipe理的。 尽pipe如此,这对于高可用性场景来说还不够:
- 因为容器主机只是常规的Amazon EC2实例,所以您需要遵循AWS最佳实践,并将其分布在两个或三个可用区(AZ)上,以便AZ的(罕见)停机不会影响您的群集,因为ECS可以将容器迁移到不同的主机实例(只要您的集群具有足够的备用容量)。
- 许多促进容器的高级群集技术都有自己的服务编排层,并且通常需要不均匀的数量≥3(服务)实例来实现高可用性设置。 有关详细信息,请参阅“ pipe理中的 最佳群集大小”一节(另请参阅使用AWS EC2容器服务运行CoreOS )。
-
这是指在2中提到的高可用性和服务编排主题。更确切地说,您正在面临服务发现问题,即使在一般情况下使用容器技术,特别是在使用微服务时, 服务发现问题也会变得更加普遍:
- 为了熟悉这一点,我推荐Jeff Lindsay的“ 了解Docker的现代服务发现”,其中详细介绍了您的用例。
- Jeff还维护了日益stream行的Consul的集装箱版本,这使得服务可以简单地注册并通过DNS或HTTP接口发现其他服务 (请参阅在Docker和gliderlabs / docker-consul中 运行Consul )。
- EC2上的Docker无法连接到S3
- aws ecs优化AMI中的私有dockerregistryauthentication不成功
- 竹:每个EC2弹性实例有多个代理?
- 什么触发Elastic Beanstalk拉入更新的Docker镜像
- 我已经做了一个dockerfile,我打算在AWS ECS上运行它,但是我不能,因为它需要-t
- Kubernetes节点由于docker覆盖造成的高磁盘使用率
- 在新的EC2 Jenkins Slave上首次执行Docker不起作用
- AWS Mesosphere:docker守护进程的参数
- 将Docker部署到AWS Elastic Beanstalk – 如何将端口转发到主机? (端口绑定)