本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
安全地停止在 EC2 執行個體上執行的 Amazon ECS 工作負載
受管執行個體排空有助於優雅終止 Amazon EC2 執行個體。該機制可讓工作負載安全地停止,再重新排程至未終止的執行個體。基礎結構維護與更新作業可順利執行,且無需擔心工作負載受到中斷。透過受管執行個體排空,您可以簡化需要替代 Amazon EC2 執行個體的基礎結構管理工作流程,同時確保應用程式的彈性與可用性。
Amazon ECS 受管執行個體耗盡適用於 Amazon EC2 Auto Scaling 群組執行個體替換。根據執行個體重新整理與執行個體生命週期上限,客戶可以確保容量符合最新的作業系統與安全性要求。
受管執行個體排空只能與 Amazon ECS 容量提供者搭配使用。您可以在使用 Amazon ECS 主控台或 SDK 建立或更新 Amazon EC2 Auto Scaling 群組容量提供者時 AWS CLI開啟受管執行個體耗盡。
Amazon ECS 受管執行個體排空會涵蓋下列事件。
-
Amazon EC2 Auto Scaling 群組執行個體重新整理 - 使用執行個體重新整理來執行輪流取代 Amazon EC2 Auto Scaling 群組中的 Amazon EC2 執行個體,而不是分批手動執行。當您需要替換大量執行個體時,此方法非常實用。執行個體重新整理透過 Amazon EC2 主控台或
StartInstanceRefreshAPI 啟動。如果使用受管終止保護,請務必在呼叫StartInstanceRefresh時為縮減保護選取Replace。 -
執行個體生命週期上限 - 您可以在取代 Amazon EC2 Auto Scaling 群組執行個體時定義生命週期上限。此設定有助於根據內部安全政策或合規要求來排程替代執行個體。
-
Amazon EC2 Auto Scaling 群組縮減 - 根據擴展政策和排程擴展動作,Amazon EC2 Auto Scaling 群組支援執行個體的自動擴展。透過使用 Amazon EC2 Auto Scaling 群組做為 Amazon ECS 容量提供者,您可以在其中沒有任務執行時縮減 Amazon EC2 Auto Scaling 群組執行個體。
-
Amazon EC2 Auto Scaling 群組運作狀態檢查 - Amazon EC2 Auto Scaling 群組支援許多運作狀態檢查,以管理運作狀態不佳執行個體的終止。
-
CloudFormation 堆疊更新 - 您可以在 CloudFormation 堆疊中新增
UpdatePolicy屬性,以在群組變更時執行滾動更新。 -
Spot 容量重新平衡 - Amazon EC2 Auto Scaling 群組嘗試主動取代根據 Amazon EC2 容量重新平衡通知具有較高中斷風險的 Spot 執行個體。啟動取代且運作狀態良好時,Amazon EC2 Auto Scaling 群組會終止舊執行個體。Amazon ECS 受管執行個體排空功能排空 Spot 執行個體的方式,與排空非 Spot 執行個體的方式相同。
-
Spot 中斷 – Spot 執行個體會在兩分鐘通知後終止。Amazon ECS 受管執行個體排空會讓執行個體進入排空狀態,以此作為回應。
具有受管執行個體耗盡的 Amazon EC2 Amazon EC2 Auto Scaling 生命週期關聯
Amazon EC2 Auto Scaling 群組生命週期掛鉤可讓客戶建立由執行個體生命週期中特定事件觸發的解決方案,並在發生特定事件時執行自訂動作。Amazon EC2 Auto Scaling 群組最多允許 50 個掛鉤。可以存在多個終止關聯並平行執行,Amazon EC2 Auto Scaling 群組會等待所有關聯完成,再終止執行個體。
除 Amazon ECS 受管勾點終止外,您也可以自行設定生命週期終止勾點。Lifecycle hook 具有 default action,因此建議將 continue 設定為預設值,確保 Amazon ECS 受管勾點等其他勾點不受自訂勾點任何錯誤的影響。
如果您已設定 Amazon EC2 Auto Scaling 群組終止生命週期關聯並啟用 Amazon ECS 受管執行個體耗盡,則會執行兩個生命週期關聯。不過,相對時間點無法保證。Lifecycle hook 具有 default action 設定,可指定逾時之時要採取的動作。如果失敗,建議在自訂勾點中使用 continue 作為預設結果。這可確保其他勾點,特別是 Amazon ECS 受管勾點不受自訂 lifecycle hook 中任何錯誤的影響。abandon 的替代結果會略過所有其他勾點,應避免此類狀況發生。如需 Amazon EC2 Auto Scaling 群組生命週期關聯的詳細資訊,請參閱《Amazon EC2 Amazon EC2 Auto Scaling 使用者指南》中的 Amazon EC2 Amazon EC2 Auto Scaling 生命週期關聯。 Amazon EC2 Amazon EC2 Auto Scaling
任務與受管執行個體排空
Amazon ECS 受管執行個體排空功能會使用在容器執行個體中找到的現有排空功能。容器執行個體排空功能會針對屬於 Amazon ECS 服務的副本任務執行替代與停止作業。處於 PENDING 或 RUNNING 狀態的獨立任務與 RunTask 調用的任務一樣,不會受到影響。您必須等待這些任務完成,或手動將其停止。容器執行個體會維持 DRAINING 狀態,直至所有任務停止或超過 48 小時為止。常駐程式任務是所有副本任務停止後最後停止的任務。
受管執行個體排空與受管終止保護
即使停用受管終止,受管執行個體排空仍可運作。如需有關受管終止保護的資訊,請參閱控制 Amazon ECS 終止的執行個體。
下表摘要說明受管終止與受管排空的不同組合的行為。
| 受管終止 | 受管排空 | 結果 |
|---|---|---|
|
已啟用 |
已啟用 | Amazon ECS 可保護正在執行任務的 Amazon EC2 執行個體,避免因縮減事件而終止。任何正在終止的執行個體,例如未設定終止保護、收到 Spot 中斷通知或受執行個體重新整理強制處理的執行個體,皆會優雅排空。 |
|
已停用 |
已啟用 | Amazon ECS 不會保護執行任務的 Amazon EC2 執行個體免受縮減影響。不過,任何正在終止的執行個體皆會優雅排空。 |
|
已啟用 |
已停用 | Amazon ECS 可保護正在執行任務的 Amazon EC2 執行個體,避免因縮減事件而終止。不過,如果發生 Spot 中斷、強制執行個體重新整理或執行個體未執行任何任務,執行個體仍會終止。Amazon ECS 不會對這些執行個體執行優雅排空,並會在其停止後啟動替代服務任務。 |
|
已停用 |
已停用 | Amazon EC2 執行個體可以隨時縮減或終止,即使正在執行 Amazon ECS 任務。Amazon ECS 會在這些執行個體停止後啟動替代服務任務。 |
受管執行個體排空與 Spot 執行個體排空
透過 Spot 執行個體排空功能,您可以在 Amazon ECS 代理程式上設定環境變數 ECS_ENABLE_SPOT_INSTANCE_DRAINING,這能讓 Amazon ECS 因應為期兩分鐘的 Spot 中斷通知時,將執行個體設為排空狀態。Amazon ECS 受管執行個體排空功能可促進 Amazon EC2 執行個體的優雅關閉,這些執行個體的終止可能源於多種原因,而非僅限於 Spot 中斷。例如,您可以使用 Amazon EC2 Amazon EC2 Auto Scaling 容量重新平衡,在較高的中斷風險下主動取代 Spot 執行個體,而受管執行個體耗盡則會正常關閉要取代的 Spot 執行個體。當您使用受管執行個體耗盡時,您不需要個別啟用 Spot 執行個體耗盡,因此ECS_ENABLE_SPOT_INSTANCE_DRAINING在 Amazon EC2 Auto Scaling 群組中,使用者資料是多餘的。如需有關 Spot 執行個體排空的詳細資訊,請參閱 Spot 執行個體。
受管執行個體排空如何與 EventBridge 搭配使用
Amazon ECS 受管執行個體排空事件會發布至 Amazon EventBridge,Amazon ECS 會在您帳戶的預設匯流排中建立 EventBridge 受管規則,用以支援受管執行個體排空。您可以篩選這些事件到其他 AWS 服務,例如 Lambda、Amazon SNS 和 Amazon SQS,以監控和疑難排解。
-
叫用生命週期掛鉤時,Amazon EC2 Amazon EC2 Auto Scaling 會將事件傳送至 EventBridge。
-
Spot 中斷通知會發布至 EventBridge。
-
Amazon ECS 會產生錯誤訊息,您可以透過 Amazon ECS 主控台與 API 擷取這些訊息。
-
EventBridge 內建重試機制,可作為暫時故障的緩解措施。
Amazon ECS 受管執行個體排空疑難排解
您可能需要針對受管執行個體排空的問題進行疑難排解。以下是您在使用時可能遇到的問題與解決方案範例。
使用自動擴展時,執行個體不會在超過執行個體生命週期上限後終止。
如果在使用 Auto Scaling 群組時,您的執行個體即使在達到並超過執行個體生命週期上限之後仍未終止,可能是因為執行個體受到縮減保護。您可以停用受管終止功能,同時允許受管排空功能處理執行個體回收。
Amazon ECS 受管執行個體的排空行為
Amazon ECS 受管執行個體會實作複雜的排空與終止程序,可確保工作負載優雅轉換,同時最佳化成本與維護系統運作狀態。終止系統為執行個體終止提供三種不同的決策路徑,每種都具有不同的時間特性與客戶影響設定檔。
終止決策路徑
所有終止路徑都會透過 POST_DEREGISTER lifecycle hook 匯聚至同一執行機制,該勾點會觸發 Node Manager 的 ReleaseNode API 以立即終止 Amazon EC2 執行個體。
- 客戶啟動的終止
-
在您需要從服務中立即移除容器執行個體時,提供執行個體移除的直接控制權。您可以在強制旗標設定為 true 的情況下調用 DeregisterContainerInstance API,表示即使有任何執行中的工作負載,仍需要立即終止。
- 系統啟動的閒置終止
-
透過智慧型閒置偵測實作成本最佳化,識別不再為工作負載提供服務的執行個體。Elastic Workload Service (EWS) 會實作複雜的閒置偵測演算法,可監控執行個體使用率,並針對在可設定期間保持閒置的執行個體啟動終止。
- 基礎結構重新整理終止
-
透過 Node Manager 的自然衰減政策實作主動基礎結構管理,其中執行個體會定期重新整理,確保在最新的平台版本上執行,同時維持安全狀態。節點管理員會實作存留時間 (TTL) 政策,為已達到最大營運生命週期的執行個體啟動優雅終止。
優雅排空與工作負載遷移
優雅排空系統會實作與 Amazon ECS 服務管理的複雜協調,確保服務受管任務正確遷移至已排程終止的執行個體之外。
服務任務排空協調
當執行個體轉換為排空狀態時,Amazon ECS 排程器會自動停止在該執行個體上置放新任務,同時為現有服務任務實作優雅關閉程序。服務任務排空包括與服務部署策略、運作狀態檢查需求和排空偏好設定的協調,確保最佳的遷移時間與成功率。
獨立任務處理
獨立任務需要不同的處理方式,因為此類任務無法受益於自動服務管理機制。系統會評估獨立任務特性,包括任務持續時間預估、完成機率分析與客戶影響評估。優雅完成策略允許獨立任務在延長的寬限期內自然完成,而強制終止可確保任務尚未自然完成時,基礎結構重新整理會在可接受的時間範圍內發生。
兩階段完成策略
終止系統會實作兩階段方法,可平衡工作負載持續性與基礎結構管理需求。
階段 1:優雅完成期間
在此階段,系統會實作優先考量工作負載持續性的優雅排空策略。服務任務會透過正常的 Amazon ECS 排程程序優雅排空,獨立任務會持續執行且可能自然完成,系統將監控所有任務透過自然完成流程進入已停止狀態。
階段 2:硬性截止日期強制執行
當優雅完成在可接受的時間範圍內未達成終止目標時,系統會實作硬性截止日期強制執行。硬性截止日期通常設定為排空啟動時間加 7 天,為優雅完成提供大量時間,同時維持營運需求。強制執行包括自動調用強制取消註冊程序並立即終止所有剩餘的任務,無論完成狀態如何。
跨服務協調與狀態管理
終止程序需要在叢集管理後端服務 (CMBS) 與節點管理員之間進行複雜的協調,確保容器執行個體取消註冊與 Amazon EC2 資源清理作業以適當的順序進行,同時保持一致性。
POST_DEREGISTER 勾點執行
POST_DEREGISTER lifecycle hook 代表全部三個終止決策路徑執行相同清理邏輯的匯聚點。當容器執行個體達到 DEREGISTERED 狀態時,POST_DEREGISTER 勾點會自動觸發節點管理員的 ReleaseNode API,以開始 Amazon EC2 資源清理作業。勾點實作包含各種故障情境的複雜錯誤處理,包括網路連線問題、Amazon EC2 服務可用性問題,以及系統元件之間的協調故障。
Amazon EC2 資源清理與釋放
Amazon EC2 執行個體終止程序實作與 AWS 服務的全方位協調,以確保基礎運算資源的配置正確。這包括防止資源洩漏的網路介面清理、具有完整稽核軌跡的資料庫記錄管理,以及各種失敗案例的適當錯誤處理與復原機制。