【问题标题】:How to understand Amazon ECS cluster如何理解 Amazon ECS 集群
【发布时间】:2015-10-11 19:46:57
【问题描述】:

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

【问题讨论】:

    标签: amazon-web-services deployment amazon-ec2 docker amazon-ecs


    【解决方案1】:

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

    1. Amazon ECS Container Instances 是间接添加的,每个实例上的 Amazon ECS Container Agent 的工作是向您创建和命名的集群注册自己,有关详细信息,请参阅 conceptslifecycle。为此,您需要遵循Launching an Amazon ECS Container Instance 中列出的步骤,无论是手动还是通过自动化。请注意第 10 步:

    默认情况下,您的容器实例启动到您的默认值 簇。如果您想启动到您自己的集群而不是 默认情况下,选择 Advanced Details 列表并粘贴以下内容 脚本进入用户数据字段,将 your_cluster_name 替换为 您的集群的名称。

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

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

    【讨论】:

    • 很棒的答案!我希望它仍然有效,但你觉得我是那种如果有变化就会更新他的答案的类型。
    猜你喜欢
    • 2017-09-13
    • 1970-01-01
    • 2017-06-16
    • 2018-02-27
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    相关资源
    最近更新 更多