如何理解 Amazon ECS 集群

How to understand Amazon ECS cluster

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

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

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

  3. 如果我在集群中有两个实例(ins1、ins2),而我的 webapp、数据库容器在 ins1 中是 运行。更新 运行 服务后(通过 http://docs.aws.amazon.com/AmazonECS/latest/developerguide/update-service.html),我可以看到新创建的服务在 "ins2" 中是 运行,然后在 "ins1" 中删除旧服务.我的问题是我的webapp容器分配给另一个实例后,访问IP地址变成了另一个实例IP。同一个IP地址访问webapp,如何防止或者有什么解决办法?不只是IP,换个新实例后的数据呢?

这实际上是三个完全不同的问题,因此最好在这里将它们相应地分成不同的问题 - 不管怎样我都会尝试提供答案:

  1. Amazon ECS Container Instances are added indirectly, it's the job of the Amazon ECS Container Agent on each instance to register itself with the cluster created and named by you, see concepts and lifecycle for details. For this to work, you need follow the steps outlined in Launching an Amazon ECS Container Instance,无论是手动还是通过自动化。请注意第 10 步。:

By default, your container instance launches into your default cluster. If you want to launch into your own cluster instead of the default, choose the Advanced Details list and paste the following script into the User data field, replacing your_cluster_name with the name of your cluster.

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

    • 因为容器主机只是普通的 Amazon EC2 instances, you would need to follow AWS best practices and spread them over two or three Availability Zones (AZ),所以 AZ 的(罕见)中断不会影响您的集群,因为 ECS 可以将您的容器迁移到不同的主机实例(前提是您的集群有足够的备用容量)。
    • 许多促进容器的高级集群技术都有自己的服务编排层,通常需要奇数> = 3(服务)实例来实现高可用性设置。您可以在 Administration for example (see also Running CoreOS with AWS EC2 Container Service 内的 最佳簇大小 部分阅读更多相关信息。
  2. 这又回到了 2. 中提到的高可用性和服务编排主题,更准确地说,您正面临 service discovery 的问题,即使在使用容器技术时,该问题也变得更加普遍一般而言,尤其是微服务: