本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon ECS服務限流邏輯
Amazon ECS服務排程器包含邏輯,該邏輯會調節服務任務重複啟動失敗時啟動的頻率。
如果 服務的任務重複無法進入 RUNNING
狀態 (直接從 進入 PENDING
STOPPED
狀態),則後續重新啟動嘗試之間的時間會逐漸增加至最多 27 分鐘。此最長期間將來可能會有所變更。此行為可減少任務失敗對您的 Amazon ECS叢集資源或 Fargate 基礎設施成本造成的影響。如果您的服務啟動了限流邏輯,您會收到以下的服務事件訊息:
(service
service-name
) is unable to consistently start tasks successfully.
Amazon ECS永遠不會停止失敗的服務重試。除了增加重新啟動的時間間隔,它也不會嘗試對其進行任何修改。服務限流邏輯沒有任何可供使用者調校的參數。
如果您更新服務使用新的任務定義,您的服務就會立即回復到正常、非調節的狀態。如需詳細資訊,請參閱使用主控台更新 Amazon ECS服務。
以下是啟動此邏輯的一些常見原因。我們建議您採取手動動作來解決問題:
-
缺少用來託管任務的資源,例如叢集中的連接埠、記憶體或CPU單位。在這種情況下,您也會看到「資源不足服務事件訊息」。
-
Amazon ECS容器代理程式無法提取您的任務 Docker 映像。這可能是因為錯誤的容器映像名稱、映像、或標籤,或缺乏私有登錄檔身分驗證或許可。在這種情況下,您也會在「
CannotPullContainerError
停止的任務錯誤」中看到 。 -
您的容器執行個體磁碟空間不足以建立容器。在這種情況下,您也會在「
CannotCreateContainerError
停止的任務錯誤」中看到 。如需詳細資訊,請參閱對 Amazon API error (500): devmapper中的 Docker 進行故障診斷 ECS。
重要
到達 RUNNING
狀態之後停止的任務不會啟動限流邏輯或相關聯的服務事件訊息。例如,假設服務的 Elastic Load Balancing 運作狀態檢查失敗,導致任務標記為運作狀態不佳,而 Amazon 會ECS取消註冊並停止任務。這樣並不會觸發限流。即使任務的容器指令立即以非零結束代碼結束,任務仍已轉換為 RUNNING
狀態。因為指令錯誤而立即失敗的任務不會觸發限流或服務事件訊息。