

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

# 排空 Amazon ECS 容器執行個體
<a name="container-instance-draining"></a>

有時候您可能需要從叢集中移除容器執行個體，以便執行系統更新或叢集容量規模縮減等作業。Amazon ECS 可讓您將容器執行個體轉換為 `DRAINING` 狀態。這稱為*容器執行個體耗盡*。將容器執行個體設定為 `DRAINING` 時，Amazon ECS 會避免在容器執行個體中放置新的任務排程。

## 服務的耗盡行為
<a name="draining-service-behavior"></a>

會立即停止屬於 `PENDING` 狀態之服務的任何任務。如果叢集中有可用的容器執行個體容量，服務排程器將會啟動取代任務。如果容器執行個體容量不足，則會傳送服務事件訊息，指出該問題。

在容器執行個體上處於 `RUNNING` 狀態的服務的任務會轉換為 `STOPPED` 狀態。服務排程器會嘗試根據服務的部署類型和部署組態參數 (`minimumHealthyPercent` 和 `maximumPercent`) 來取代任務。如需詳細資訊，請參閱[Amazon ECS 服務](ecs_services.md)及[Amazon ECS 服務定義參數](service_definition_parameters.md)。
+ 如果 `minimumHealthyPercent` 低於 100%，則排程器在任務取代期間可以暫時忽略 `desiredCount`。例如，`desiredCount` 為四項任務，下限 50% 允許排程器先停止兩項現有的任務，再開始兩項新的任務。如果下限為 100%，則直到替代任務視為正常運作前，服務排程器都無法移除現有的任務。如果未使用負載平衡器的服務任務為 `RUNNING` 狀態，則視為運作良好。如果使用負載平衡器的服務任務為 `RUNNING` 狀態，且負載平衡器回報託管所在的容器執行個體運作良好，任務即視為運作良好。
**重要**  
如果您使用 Spot 執行個體且 `minimumHealthyPercent` 大於或等於 100%，則在 Spot 執行個體終止之前，服務將沒有足夠的時間取代任務。
+ `maximumPercent` 參數代表任務取代期間的執行任務數量上限，這允許您定義替代批次大小。例如，如果 `desiredCount` 為四項任務，可先啟動四項新任務再停止四項要耗盡任務的上限為 200% (前提是有執行此作業所需的可用叢集資源)。如果上限為 100%，則在要耗盡的任務停止之前，皆無法啟動替代任務。
**重要**  
如果 `minimumHealthyPercent` 和 `maximumPercent` 兩者皆為 100%，則服務無法刪除現有任務，也無法啟動替換任務。這可以防止容器執行個體成功耗盡，並避免進行新部署。

## 獨立任務的耗盡行為
<a name="draining-standalone-behavior"></a>

處於 `PENDING` 或 `RUNNING` 狀態的任何獨立任務不會受到影響；您必須等待其自行停止或手動停止。容器執行個體將維持 `DRAINING` 狀態。

## Amazon ECS 受管執行個體的排空行為
<a name="managed-instances-draining-behavior"></a>

Amazon ECS 受管執行個體終止可確保正常的工作負載轉換，同時最佳化成本和維護系統運作狀態。終止系統為執行個體終止提供三種不同的決策路徑，每種都具有不同的時間特性與客戶影響設定檔。

客戶啟動的終止  
在您需要從服務中立即移除容器執行個體時，提供執行個體移除的直接控制權。執行 `deregister-container-instance`時，`force`請求參數會設為 true。這表示即使有任何執行中的工作負載，仍需要立即終止。

系統啟動的閒置終止  
Amazon ECS 受管執行個體透過終止未執行任何任務的閒置 Amazon ECS 容器執行個體，持續監控並主動最佳化成本。ECS 使用啟發式延遲，讓容器執行個體有機會在終止之前取得新啟動的任務。這可以使用 `scaleInAfter` Amazon ECS 受管執行個體容量提供者組態參數來自訂。

基礎結構重新整理終止  
Amazon ECS 受管執行個體會自動管理和更新受管容器執行個體上的軟體，以確保安全性和合規性，同時維持工作負載可用性。如需詳細資訊，請參閱 [Amazon ECS 受管執行個體中的修補](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/managed-instances-patching.html)。

終止系統會實作兩階段方法，可平衡工作負載持續性與基礎結構管理需求。

**階段 1：優雅完成期間**  
在此階段，系統會實作優先考量工作負載持續性的優雅排空策略。服務任務會透過正常的 Amazon ECS 排程程序優雅排空。獨立任務可能會自然完成，因此會持續執行。系統會監控所有任務，透過自然完成程序達到停止狀態。

**階段 2：硬性截止日期強制執行**  
當優雅完成在可接受的時間範圍內未達成終止目標時，系統會實作硬性截止日期強制執行。硬性截止日期通常設定為排空啟動時間加 7 天，為優雅完成提供大量時間，同時維持營運需求。強制執行包括自動強制取消註冊程序，並立即終止所有剩餘的任務，無論完成狀態如何。

當執行個體上執行的所有任務轉換為 `STOPPED` 狀態時，容器執行個體完成耗盡。容器執行個體會保持在 `DRAINING` 狀態，直到再次啟動或刪除為止。您可以確認容器執行個體上的任務狀態，方法是搭配使用 [ListTasks](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ListTasks.html) 操作與 `containerInstance` 參數以取得執行個體上的任務清單，然後搭配使用 [DescribeTasks](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_DescribeTasks.html) 操作與每個任務的 Amazon Resource Name (ARN) 或 ID 以驗證任務狀態。

當您準備好讓容器執行個體重新開始託管任務時，您可以將容器執行個體的狀態從 `DRAINING` 變更為 `ACTIVE`。然後，Amazon ECS 服務排程器將再次考慮容器執行個體以進行任務置放。

## 程序
<a name="drain-instances"></a>

透過運用新的 AWS 管理主控台，可使用下列步驟將容器執行個體設定為耗盡。

您也可以使用 [UpdateContainerInstancesState](https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_UpdateContainerInstancesState.html) API 動作或 [update-container-instances-state](https://docs.aws.amazon.com/cli/latest/reference/ecs/update-container-instances-state.html) 命令將容器執行個體的狀態變更成 `DRAINING`。

**AWS 管理主控台**

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 在導覽窗格中，選擇**叢集**。

1. 在 **Clusters** (叢集) 頁面上，選擇託管您執行個體的叢集。

1. 在 **Cluster : *name*** (叢集：名稱) 頁面上，選擇 **Infrastructure** (基礎基礎設施) 索引標籤。然後，在 **Container instances** (容器執行個體)下，選取您要耗盡之每個容器執行個體的核取方塊。

1. 依序選擇**動作**、**耗盡**。