[英]Updating an AWS ECS Service
我有一個在AWS EC2容器服務(ECS)上運行的服務。 我的設置相對簡單。 它使用單個任務定義和以下詳細信息進行操作:
最初,我能夠在沒有問題的情況下獲得注冊到集群的必要EC2實例。 然后,關聯的任務開始在兩個實例上運行。 正如預期的那樣 - 考慮到CPU和內存預留 - 這些任務幾乎占用了整個EC2實例的資源。
有時,我希望任務使用它正在運行的應用程序的新版本。 為了實現這一點,我創建了任務的修訂版,取消注冊了以前的版本,然后更新了服務。 請注意,我已將最低健康百分比設置為要求始終運行2 * 0.50 = 1
實例,並且允許最大健康百分比允許最多2 * 2.00 = 4
實例運行。
因此,我預計將取消注冊的任務實例中的一個被排空並脫機,以便可以使該任務的新修訂版的一個實例聯機。 然后,該過程將重復,使部署成功。
不幸的是,集群什么也沒做。 在events
日志中,它告訴我它不能放置新任務,即使我上面描述的過程允許它這樣做。
如何讓集群執行我期望的行為? 當我手動將另一個EC2實例注冊到集群然后在更新完成后將其拆除(我不希望這樣做)時,我才能夠這樣做。
我遇到了同樣的問題,其中任務被卡住並且沒有空間放置它們。 以下來自AWS doc的更新服務片段幫助我做出以下決定。
如果您的服務具有所需數量的四個任務且最大百分比值為200%,則調度程序可以在停止四個較舊任務之前啟動四個新任務(前提是執行此操作所需的群集資源可用)。 最大百分比的默認值為200%。
我們應該有可用的集群資源/容器實例來啟動新任務,以便它們可以啟動,舊的任務可以耗盡。
這些是我做的事情
在執行服務更新之前,請為群集添加20%的容量。 您可以使用ASG(自動擴展組)命令行,並從所需的容量中將20%添加到您的群集。 這樣,您將在部署期間獲得一些額外的實例。
一旦你有了實例,新任務將很快開始旋轉,舊任務將開始耗盡。
但這是否意味着我將有額外的容器實例?
是的,在部署期間,您將添加一些實例,但隨着較舊的任務耗盡,它們將會閑置。 刪除它們的方法是
創建一個MemoryReservationLow
警報(在您的情況下約為70%閾值),持續25分鍾(持續時間更長,以確保我們已經過度調試)。 一旦你沒有使用那些額外的服務器,預訂將變低,他們可以被刪除。
我之前見過這個。 如果端口映射正在嘗試將靜態主機端口映射到任務中的容器,則需要更多群集實例。
這也可能是因為沒有足夠的可用內存來滿足任務中容器請求的內存(軟或硬)限制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.