2016-03-01 64 views
5

我正在将一些工作负载迁移到Amazon ECS容器服务,并且发现阻止我前进的阻止程序。限制在特定Amazon ECS实例中运行的服务/应用程序

理想情况下,在ECS上运行的集装箱化应用程序应该是无状态的,以便它们可以在任何集群实例中运行并向外扩展。但事实是,我有一些依赖于EBS数据量的应用程序。据我所知,这些卷必须手动连接到特定的群集实例,并且ECS应用程序应放置在该实例中以便能够访问其数据,所以我需要一些方法来控制这些最终运行的位置。

举个例子,假设我们有一个由Amazon ECS管理的3个EC2实例的集群。

  • INSTANCE1
  • INSTANCE2
  • instance3

然后,我们有2级集装箱的应用程序:

  • APP1,这是无状态
  • APP2,这取决于EBS卷

APP1可以在集群中,没有问题的任何实例运行。

对于app2,假设我们在instance2中挂接并挂载了EBS卷。

现在,问题是:可以在定义或启动app2时将限制放在instance2中,以便它可以访问EBS卷吗?

非常感谢!


编辑:

我读一点,并我发现了一个办法做到这一点亚马逊的文档。还有的是说文件“Using Data Volumes in Tasks”在一份报告:

重要

亚马逊ECS不同步您的数据量跨越容器 实例。使用持久数据卷的任务可以放在您的群集中具有可用容量的任何容器实例上。如果 您的任务在停止后需要持久数据量,并且重新启动 ,则应始终使用AWS CLI start-task命令在 任务启动时指定相同的容器实例。

所以,看在CLI的start-task命令我发现它正是我一直在寻找:

启动任务

从开始一个新的任务在指定的容器实例或指定的容器实例上指定任务定义。要使用默认的Amazon ECS 调度程序来放置您的任务,请改为使用run-task。

它有两个必需的参数是要启动任务定义和容器实例 ID(最多10个),在其任务运行的。

所以调用命令会是这个样子:

aws ecs start-task --task-definition “hello-world:1” --container-instances “1c66549d-b41c-4439-dd43-c2e1c9a2cc2a” 

我尝试过了,它完美地工作。

目前,这似乎是唯一的方法,因为AWS Web UI在启动任务时没有提供指定容器实例的字段。

我希望这对别人有用。

+0

从我读过的内容:你不能这样做。集群有一组绑定到它的实例,通过调度程序将容器固定为基于资源。我认为你做这件事的唯一方法是通过多个集群。 –

+1

嗨@MarcYoung,我用我找到的解决方案编辑了这个问题。请看看它,因为实际上有办法做到这一点,而无需创建多个群集。 – adrianmo

回答

4

亚马逊最近推出了一项新服务Elastic File System (EFS),该服务专为同时处理多个实例的数据以及任何容器而设计。

EFS的引入承认您简单不能轻松使用EBS进行容器工作负载。

这是关于using EFS with ECS的入门和教程。

EFS基于NFS构建。 NFS协议和EFS实现在网络IO和数据吞吐量方面确实存在一些挑战,因此它可能不适合您的工作负载。

相关问题