2016-03-01 65 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和數據吞吐量方面確實存在一些挑戰,因此它可能不適合您的工作負載。

相關問題