2017-02-22 42 views
0

我有一個由實例類型A的容器實例組成的ECS集羣,可以說它的t2.small。該集羣由多臺運行多個服務的機器組成。現在,我即將有一個新的服務/任務(讓我們稱之爲「GreatRequirements」),這將需要比任何其他服務/任務更多的CPU /內存。我希望能夠引導1臺大型機器(讓我們稱之爲「LargeMachine」),其他任務永遠不會放在集羣上,以便集羣中的這臺機器始終可用於「GreatRequirements」服務。如何防止任務在某個容器實例上啓動

有沒有什麼辦法可以阻止所有其他服務/任務,而不是在該機器上安排的「GreatRequirements」,除此之外,對所有其他服務/任務都做出約束限制?實質上,我想阻止ECS表單將其他服務/任務放置在「LargeMachine」上,這樣我就不會因爲一堆小服務/任務阻止我的「GreatRequirements」服務啓動任務而無法找到具有足夠cpu /內存。

謝謝

回答

0

您可以使用任務的放置策略/約束。

例如有內置像屬性:

  1. ecs.availability區(例如EU-西-1a)的
  2. ecs.instance型(例如t2.small)
  3. ecs.ami-ID(AMI-XXXXXX)
  4. ecs.os型(如Linux)的

在您的任務定義(任務佈置部件),你可以有這樣的約束:attribute:ecs.instance-type == t2.medium這個任務將總是運行在一個t2.medium上

在你的情況下,我寧願在我的ECS包含器實例上使用自定義標籤`(集羣 - >選擇集羣 - > ECS實例 - >選擇EC2 - >點擊操作 - >上查看/編輯單擊屬性和添加自定義屬性,如姓名= SomeName,值= GreatRequirements.``

而在你的任務定義爲約束,你可以有: attribute:SomeName == GreatRequirements和,這將始終與自定義屬性 ``的屬性,EC2上運行:SomeName = GreatRequirements`和任務將永遠不會對EC2實例與運行自定義屬性

欲瞭解更多關於這些屬性的操作,請查看Operation on attributes

希望得到這個幫助。

+0

但是,這不會阻止其它任務被定於「LargeMachine」運行,而我仍然可以結束了在這樣一個場景,該機器將不會有足夠的CPU /內存? –

+0

從防止其他任務的解決方案: 你可以有一個約束e.g'屬性的所有其他人的任務:ecs.instance型== T2。這會阻止它們在大型機器上運行,或者您可以將您的羣集分爲2個羣集(一個用於普通任務,另一個用於GreatRequirements)。在新的集羣中,您將擁有大型機器並安排您的任務(GreatRequirements)在該機器上運行 – Gigapalmer

+0

在這種情況下,我將不得不爲所有其他服務/任務設置約束,這是我想省略的。除了將所有實例的實例類型更改爲可以使用「GreatRequirements」處理該服務的類型外,我不認爲實際上有一個好的解決方案,並以某種方式檢測服務由於不足而無法調度任務CPU /內存,並基於此將其他實例擴展到羣集中。感謝Gigapalmer提供的幫助:-) –

0

我認爲除了將所有實例的實例類型更改爲可以使用「GreatRequirements」處理服務的類型外,我不認爲真的有一個很好的解決方案 - 並以某種方式檢測服務何時無法計劃任務,因爲CPU /內存不足,並基於此將其他實例擴展到羣集中。

相關問題