2017-09-12 43 views
1

我想在ECS羣集上運行多個不同的服務,每個服務應運行在單個EC2實例上。所有服務的EC2實例類型相同。我希望這些服務能夠使用其所有託管EC2可用資源。Amazon ECS任務定義--CPU單元和內存 - 將容器設置爲使用100%的EC2可用資源

我假設如果我只在任務配置中使用軟內存參數(不使用硬內存參數),這將允許我的容器實例使用託管它的EC2實例上的所有可用內存,將不會受到限制。那是對的嗎?

至於EC2類型(例如t2.micro [vCPU = 1,內存= 1Gib])!!有可能簡單地說:

{ 
    ... 
    "memory": 1024, 
    "cpu": 1024, 
    ... 
} 

由於EC2應該已經設置了一堆容器服務要求。

+0

對於您的示例中的JSON塊,ECS配置文檔還是其他內容? –

+0

它在ECS – Ayoub

回答

5

您試圖讓每個ECS實例只處理每個實例的單個任務是否正確?

你的問題的簡短答案是,沒有。通常,容器可用的內存量比機器本身的可用內存量少一些。這是爲了使操作系統有足夠的內存來保持運行。根據我的經驗,具有2048 MB內存的T2.Small最終將以2004 MB用於容器。

說到任務定義,有兩種指定內存的方法。 memory設置是一個硬限制。如果容器的內存使用量達到這個數量,容器將被終止。另一方面,如果您指定memoryReservation,那麼將爲該任務預留多少內存,但它可以使用更多內存,最多爲機器總量。查看Task Definition documentation瞭解更多詳情。

這裏一個重要的考慮是隻需要memorymemoryReservation之一。如果兩者都用,memoryReservation應該小於memory。如果你只打算指定其中的一個,我建議使用memoryReservation,因爲它可以讓你的任務使用最多的機器內存。如果同時使用兩者,則將使用memoryReservation來計算任務所消耗的內存量。

將任務放置在實例上時,它會查看可用內存量,即已註冊的實例內存量減去已經放置的任何任務量。如果此數字小於任務所需的內存量,則不會在其上放置任何任務。如果沒有實例具有足夠的內存用於該任務,則不會放置它,並且該錯誤將記錄在服務Events日誌中。

因此,查看實例類型實際註冊的內存量非常重要,然後確保您的memorymemoryReservation低於實例註冊的數量。否則,你的任務將永遠不會被放置。

至於cpu,此值不是必需的,如果未指定,則實例上的所有任務都允許爲系統上可用CPU的相等部分。如果實例上只有一個任務,則默認情況下它可以使用該實例的整個CPU。

+0

的x服務的任務定義中非常感謝@Jamie,這正是我一直試圖澄清的! – Ayoub

相關問題