28

我最近尝试使用 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,换新实例后的数据呢?

4

1 回答 1

37

这实际上是三个完全不同的问题,因此最好在此处将它们相应地拆分为不同的问题-无论如何,我都会尝试提供答案:

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

默认情况下,您的容器实例会启动到您的默认集群中。如果要启动到您自己的集群而不是默认集群,请选择 Advanced Details 列表并将以下脚本粘贴到 User data 字段中,将 your_cluster_name 替换为您的集群名称。

#!/bin/bash
echo ECS_CLUSTER=your_cluster_name >> /etc/ecs/ecs.config
  1. 您只需要一个实例即可让 ECS 正常工作,因为集群本身由 AWS 代表您管理。但是,这对于高可用性场景是不够的:

    • 由于容器主机只是常规的 Amazon EC2实例,因此您需要遵循 AWS 最佳实践并将它们分布在两个或三个可用区 (AZ)上,以便 AZ 的(罕见)中断不会影响您的集群,因为 ECS可以将您的容器迁移到不同的主机实例(前提是您的集群有足够的备用容量)。
    • 许多促进容器的高级集群技术都有自己的服务编排层,并且通常需要奇数 >= 3(服务)实例来实现高可用性设置。例如,您可以在Administration中的Optimal Cluster Size部分阅读更多相关信息(另请参阅Running CoreOS with AWS EC2 Container Service)。
  2. 这又回到了 2. 中提到的高可用性和服务编排主题,更准确地说,您正面临服务发现的问题,即使在使用一般容器技术,特别是微服务时,它也变得更加普遍:

于 2015-07-28T08:33:16.323 回答