本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon ECS 服務
您可以利用 Amazon ECS 服務在 Amazon ECS 叢集中同時執行並維持指定數目的任務定義執行個體。如果您有任務產生故障或停止,Amazon ECS 服務排程器就會根據您的任務定義啟動另一個執行個體來取而代之。這有助於維持服務中所需的任務數量。
您也可以在負載平衡器後方選擇性地執行您的服務。負載平衡器可將流量分散到與服務關聯的任務。
我們建議將服務排程器用於長時間執行的無狀態服務及應用程式。服務排程器可確保系統遵循您指定的排程策略,並在任務失敗時重新排程任務。例如,若基本的基礎設施發生故障,服務排程器會重新排程任務。您可以利用任務置放策略和限制條件來自訂排程器如何放置和終止任務。若服務中的任務停止,排程器會啟動新任務進行取代。此流程會根據您服務使用的排程策略持續進行,直至服務執行的任務達到您所需的數量為止。服務的排程策略也叫做 service type (服務類型)。
在容器運作狀態檢查或負載平衡器目標群組運作狀態檢查失敗後,服務排程器也會取代判定為狀況不佳的任務。此取代取決於 maximumPercent
和 desiredCount
服務定義參數。如果任務標記為運作狀態不佳,服務排程器會先啟動替代任務。然後,會發生以下情況。
如果取代任務的運作狀態為
HEALTHY
,服務排程器會停止運作狀態不佳的任務如果替代任務的運作狀態為
UNHEALTHY
,排程器會停止運作狀態不佳的替代任務或現有運作狀態不佳的任務,以使任務總計數等於desiredCount
。
如果 maximumPercent
參數限制排程器先啟動替代任務,排程器會隨機停止運作狀態不佳的任務,以釋放容量,然後啟動替代任務。開始和停止程序會繼續進行,直到所有運作狀態不佳的任務都會取代為運作狀態良好的 一旦已取代了所有運作狀態不佳的任務,而且只執行運作狀態良好的任務,如果任務總數超過 desiredCount
,則運作良好的任務會隨機停止,直到任務總計數等於 desiredCount
為止。如需有關 maximumPercent
和 desiredCount
的詳細資訊,請參閱服務定義參數。
服務排程器包含的邏輯,可在任務重複啟動失敗的情況下,針對任務重新啟動的頻率進行調節。如果任務在未進入 RUNNING
的狀態下停止,服務排程器會減少啟動嘗試並傳送出服務事件訊息。此行為可以讓您在問題解決前,避免失敗的任務占用不必要的資源。在服務更新之後,服務排程器就會恢復正常的排程行為。如需詳細資訊,請參閱 Amazon ECS 服務調節邏輯 和 檢視 Amazon ECS 服務事件訊息。
現已推出兩個服務排程器策略概念:
協助程式策略
常駐程式排程策略會在每個活動容器執行個體上準確部署一個任務,其可滿足叢集中所有指定的任務置放限制條件。服務排程器會評估執行任務的任務置放限制,並停止不符合置放限制的任務。當您使用此策略時,您不需要指定所需的任務數量、任務置放策略,或使用 Service Auto Scaling 政策。
Amazon ECS 會為常駐程式任務保留容器執行個體運算資源,包括 CPU、記憶體和網路介面。當您在具有其他複本服務的叢集上啟動常駐程式服務時,Amazon ECS 會將常駐程式任務設為最優先。這表示協助程式任務是在執行個體上啟動的第一個任務,以及在停止所有複本任務之後停止的最後一個任務。此策略可確保資源不會被擱置的複本任務使用,且可供常駐程式任務使用。
常駐程式服務排程器不會將任何任務置放於具有 DRAINING
狀態的執行個體上。如果容器執行個體轉換為 DRAINING
狀態,常駐程式會停止運作。新的容器執行個體加入叢集時,服務排程器也會加以監控,並將常駐程式任務新增到這些執行個體。
當您指定部署組態時, maximumPercent
參數的值必須是 100
(以百分比表示),如果未設定,則此值是預設值。minimumHealthyPercent
參數的預設值為 0
(以百分比表示)。
當您變更常駐程式服務的置放限制條件時,您必須重新啟動服務。Amazon ECS 會為常駐程式任務動態更新合格執行個體上保留的資源。對於現有執行個體,排程器會嘗試將任務放置在執行個體上。
當任務定義中的任務大小或容器資源保留改變時,會啟動一個新的部署。更新服務或設定任務定義的不同修訂時,也會開始新的部署。Amazon ECS 會為常駐程式挑選更新的 CPU 和記憶體保留,然後為常駐程式任務封鎖容量。
若上述任一情境的資源不足,將發生下列情況:
-
任務置放失敗。
-
會產生 CloudWatch 事件。
-
Amazon ECS 透過等待資源轉為可用以繼續嘗試與排程執行個體上的任務。
-
Amazon ECS 會釋放任何不再符合置放限制標準的預留執行個體,並且停止對應的常駐程式任務。
常駐程式排程策略可被用於下列情況:
-
執行應用程式容器
-
執行支援容器以記錄、監控和追蹤任務
使用 Fargate 啟動類型或 CODE_DEPLOY
或 EXTERNAL
部署控制器類型的任務,不支援常駐程式排程策略。
當服務排程器停止執行中的任務時,會嘗試維護叢集中之可用區域間的平衡。排程器使用以下邏輯:
-
如已定義置放策略,請使用該策略選取要終止的任務。例如,如果服務已定義可用區域分佈策略,則會選取能讓剩餘任務完美分佈的任務。
-
如未定義任何置放策略,請使用下列邏輯維護叢集中之可用區域的平衡:
-
排序有效的容器執行個體。優先考慮在此服務的個別可用區域中,擁有最多執行中任務數量的執行個體。例如,如果區域 A 有一項執行中的服務任務,而區域 B 和 C 各有兩項執行中的服務任務,則最適合終止的即為區域 B 或 C 中的容器執行個體。
-
根據先前的步驟,停止最佳可用區域中容器執行個體上的任務。偏好此服務執行中任務數量最多的容器執行個體。
-
複本策略
複本排程策略會在叢集中放置並維持所需的任務數量。
對於在 Fargate 上執行任務的服務,當服務排程器啟動新任務或停止執行任務時,服務排程器會盡力嘗試在可用區域之間維持平衡。您無須指定任務置放策略或限制條件。
當您在 EC2 執行個體上建立執行任務的服務時,您可以選擇性地指定任務置放策略和限制條件,以自訂任務置放決策。如果未指定任務置放策略或限制,預設情況下,服務排程器會將任務分散到可用區域。服務排程器使用以下邏輯:
-
決定您叢集中的哪些容器執行個體可支援服務的任務定義 (例如,必要的 CPU、記憶體、連接埠和容器執行個體屬性)。
-
決定哪些容器執行個體可滿足針對服務所定義的任何置放限制。
-
當您有取決於常駐程式服務的複本服務時 (例如,必須先執行常駐程式日誌路由器任務,才能使用記錄),請建立任務置放限制,以確保常駐程式服務任務在複本服務任務之前置放在 EC2 執行個體上。如需詳細資訊,請參閱Amazon ECS 任務置放限制範例。
-
如已定義置放策略,請使用該策略從剩餘的待選項目中選取執行個體。
-
如未定義任何置放策略,請使用下列邏輯平衡您叢集中可用區域的任務:
-
排序有效的容器執行個體。優先考慮在此服務的個別可用區域中,執行中任務數量最少的執行個體。例如,如果區域 A 有一項執行中的服務任務,而區域 B 和 C 都沒有,則最適合置放的即為區域 B 或 C 中的有效容器執行個體。
-
根據先前的步驟,將新的服務任務置放在最佳可用區域的有效容器執行個體。偏好此服務執行中任務數量最少的容器執行個體。
-
我們建議您在使用 REPLICA
策略時,使用服務修復功能,因為它有助於確保服務的高可用性。