簡體   English   中英

更新AWS ECS服務

[英]Updating an AWS ECS Service

我有一個在AWS EC2容器服務(ECS)上運行的服務。 我的設置相對簡單。 它使用單個任務定義和以下詳細信息進行操作:

  • 所需容量設置為2
  • 最低健康狀況定為50%
  • 最大可用設置為200%
  • 任務以80%的CPU和內存預留運行

最初,我能夠在沒有問題的情況下獲得注冊到集群的必要EC2實例。 然后,關聯的任務開始在兩個實例上運行。 正如預期的那樣 - 考慮到CPU和內存預留 - 這些任務幾乎占用了整個EC2實例的資源。

有時,我希望任務使用它正在運行的應用程序的新版本。 為了實現這一點,我創建了任務的修訂版,取消注冊了以前的版本,然后更新了服務。 請注意,我已將最低健康百分比設置為要求始終運行2 * 0.50 = 1實例,並且允許最大健康百分比允許最多2 * 2.00 = 4實例運行。

因此,我預計將取消注冊的任務實例中的一個被排空並脫機,以便可以使該任務的新修訂版的一個實例聯機。 然后,該過程將重復,使部署成功。

不幸的是,集群什么也沒做。 events日志中,它告訴我它不能放置新任務,即使我上面描述的過程允許它這樣做。

如何讓集群執行我期望的行為? 當我手動將另一個EC2實例注冊到集群然后在更新完成后將其拆除(我不希望這樣做)時,我才能夠這樣做。

我遇到了同樣的問題,其中任務被卡住並且沒有空間放置它們。 以下來自AWS doc的更新服務片段幫助我做出以下決定。

如果您的服務具有所需數量的四個任務且最大百分比值為200%,則調度程序可以在停止四個較舊任務之前啟動四個新任務(前提是執行此操作所需的群集資源可用)。 最大百分比的默認值為200%。

我們應該有可用集群資源/容器實例來啟動新任務,以便它們可以啟動,舊的任務可以耗盡。

這些是我做的事情

  1. 在執行服務更新之前,請為群集添加20%的容量。 您可以使用ASG(自動擴展組)命令行,並從所需的容量中將20%添加到您的群集。 這樣,您將在部署期間獲得一些額外的實例。

  2. 一旦你有了實例,新任務將很快開始旋轉,舊任務將開始耗盡。

但這是否意味着我將有額外的容器實例?

是的,在部署期間,您將添加一些實例,但隨着較舊的任務耗盡,它們將會閑置。 刪除它們的方法是

創建一個MemoryReservationLow警報(在您的情況下約為70%閾值),持續25分鍾(持續時間更長,以確保我們已經過度調試)。 一旦你沒有使用那些額外的服務器,預訂將變低,他們可以被刪除。

我之前見過這個。 如果端口映射正在嘗試將靜態主機端口映射到任務中的容器,則需要更多群集實例。

這也可能是因為沒有足夠的可用內存來滿足任務中容器請求的內存(軟或硬)限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM