Amazon ECS服務 - Amazon Elastic Container Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon ECS服務

您可以使用 Amazon ECS服務,在 Amazon ECS叢集中同時執行和維護指定數量的任務定義執行個體。如果其中一個任務失敗或停止,Amazon ECS服務排程器會啟動任務定義的另一個執行個體來取代它。這有助於維持服務中所需的任務數量。

您也可以在負載平衡器後方選擇性地執行您的服務。負載平衡器可將流量分散到與服務關聯的任務。

我們建議將服務排程器用於長時間執行的無狀態服務及應用程式。服務排程器可確保系統遵循您指定的排程策略,並在任務失敗時重新排程任務。例如,若基本的基礎設施發生故障,服務排程器會重新排程任務。您可以利用任務置放策略和限制條件來自訂排程器如何放置和終止任務。若服務中的任務停止,排程器會啟動新任務進行取代。此流程會根據您服務使用的排程策略持續進行,直至服務執行的任務達到您所需的數量為止。服務的排程策略也叫做 service type (服務類型)。

在容器運作狀態檢查或負載平衡器目標群組運作狀態檢查失敗後,服務排程器也會取代判定為狀況不佳的任務。此取代取決於 maximumPercentdesiredCount 服務定義參數。如果任務標記為運作狀態不佳,服務排程器會先啟動替代任務。然後,會發生以下情況。

  • 如果替換任務的運作狀態為 HEALTHY,則服務排程器會停止運作狀態不佳的任務

  • 如果替代任務的運作狀態為 UNHEALTHY,排程器會停止運作狀態不佳的替代任務或現有運作狀態不佳的任務,以使任務總計數等於 desiredCount

如果 maximumPercent 參數限制排程器先啟動替代任務,排程器會隨機停止運作狀態不佳的任務,以釋放容量,然後啟動替代任務。開始和停止程序會繼續進行,直到所有運作狀態不佳的任務都會取代為運作狀態良好的 一旦已取代了所有運作狀態不佳的任務,而且只執行運作狀態良好的任務,如果任務總數超過 desiredCount,則運作良好的任務會隨機停止,直到任務總計數等於 desiredCount 為止。如需有關 maximumPercentdesiredCount 的詳細資訊,請參閱服務定義參數

服務排程器包含的邏輯,可在任務重複啟動失敗的情況下,針對任務重新啟動的頻率進行調節。如果任務在未進入 RUNNING 的狀態下停止,服務排程器會減少啟動嘗試並傳送出服務事件訊息。此行為可以讓您在問題解決前,避免失敗的任務占用不必要的資源。在服務更新之後,服務排程器就會恢復正常的排程行為。如需詳細資訊,請參閱 Amazon ECS服務限流邏輯檢視 Amazon ECS服務事件訊息

現已推出兩個服務排程器策略概念:

  • REPLICA - 複本排程策略會置放並在整個叢集中維持所需的任務數量。根據預設,服務排程器會將任務分散至各個可用區域。您可以使用任務置放策略和限制條件,來自訂任務置放決策。如需詳細資訊,請參閱複本策略

  • DAEMON - 常駐程式排程策略會在每個符合您於叢集中所指定所有任務置放限制條件的作用中容器執行個體上,準確地部署一個任務。使用這項策略時,不需指定所需的任務數量、任務置放策略或使用 Service Auto Scaling 政策。如需詳細資訊,請參閱Daemon 策略

    注意

    Fargate 任務不支援 DAEMON 排程策略。

Daemon 策略

常駐程式排程策略會在每個活動容器執行個體上準確部署一個任務,其可滿足叢集中所有指定的任務置放限制條件。服務排程器會評估執行任務的任務置放限制,並停止不符合置放限制的任務。使用此策略時,您不需要指定所需的任務數量、任務置放策略,或使用 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_DEPLOYEXTERNAL 部署控制器類型的任務,不支援常駐程式排程策略。

當服務排程器停止執行中的任務時,會嘗試維護叢集中之可用區域間的平衡。排程器使用以下邏輯:

  • 如已定義置放策略,請使用該策略選取要終止的任務。例如,如果服務已定義可用區域分佈策略,則會選取能讓剩餘任務完美分佈的任務。

  • 如未定義任何置放策略,請使用下列邏輯維護叢集中之可用區域的平衡:

    • 排序有效的容器執行個體。優先考慮在此服務的個別可用區域中,擁有最多執行中任務數量的執行個體。例如,如果區域 A 有一項執行中的服務任務,而區域 B 和 C 各有兩項執行中的服務任務,則最適合終止的即為區域 B 或 C 中的容器執行個體。

    • 根據先前的步驟,停止最佳可用區域中容器執行個體上的任務。偏好此服務執行中任務數量最多的容器執行個體。

複本策略

複本排程策略會在叢集中放置並維持所需的任務數量。

對於在 Fargate 上執行任務的服務,當服務排程器啟動新任務或停止執行任務時,服務排程器會盡力嘗試在可用區域之間維持平衡。您無須指定任務置放策略或限制條件。

當您建立在EC2執行個體上執行任務的服務時,您可以選擇性地指定任務置放策略和限制條件,以自訂任務置放決策。如果未指定任務置放策略或限制,預設情況下,服務排程器會將任務分散到可用區域。服務排程器使用以下邏輯:

  • 決定叢集中的哪些容器執行個體可以支援服務的任務定義 (例如必要的 CPU、記憶體、連接埠和容器執行個體屬性)。

  • 決定哪些容器執行個體可滿足針對服務所定義的任何置放限制。

  • 當您擁有依賴常駐程式服務的複本服務 (例如,在任務可以使用記錄之前需要執行的常駐日誌路由器任務) 時,請建立任務置放限制,以確保常駐程式服務任務在複本服務任務之前放置在EC2執行個體上。如需詳細資訊,請參閱Amazon ECS任務置放限制範例

  • 如已定義置放策略,請使用該策略從剩餘的待選項目中選取執行個體。

  • 如未定義任何置放策略,請使用下列邏輯平衡您叢集中可用區域的任務:

    • 排序有效的容器執行個體。優先考慮在此服務的個別可用區域中,執行中任務數量最少的執行個體。例如,如果區域 A 有一項執行中的服務任務,而區域 B 和 C 都沒有,則最適合置放的即為區域 B 或 C 中的有效容器執行個體。

    • 根據先前的步驟,將新的服務任務置放在最佳可用區域的有效容器執行個體。偏好此服務執行中任務數量最少的容器執行個體。