我的 Amazon Elastic Container Service (Amazon ECS) 任務需要很長時間才會移至 STOPPED 狀態。或者,當容器執行個體設為 DRAINING 時,我的 Amazon ECS 任務停滯在 RUNNING 狀態。我該如何解決此問題?
簡短描述
將 ECS 執行個體設定為 DRAINING 時,Amazon ECS 會執行下列動作:
- 防止排定新任務置放於容器執行個體上
- 停止處於 RUNNING 狀態的容器執行個體上的任務
由於組態參數或任務發生問題,您的任務可能會停滯在 RUNNING 狀態,或需要更長的時間才會移至 STOPPED 狀態。若要對這些問題進行疑難排解,請考慮下列選項:
解決方法
確認您的 DeploymentConfiguration 參數已正確設定
- 開啟 Amazon ECS 主控台。
- 在導覽窗格中,選擇叢集,然後選擇容器執行個體要耗盡的叢集。
- 選擇 ECS 執行個體標籤,然後在狀態區段中選擇 DRAINING。
- 選擇您的容器執行個體,然後找出用於耗盡或需要長時間耗盡之任務的服務。
- 選擇服務標籤,選取服務,然後選擇部署。
- 檢查 minimumHealthyPercent 和 maximumPercent 的值。
**注意:**處於 RUNNING 狀態的容器執行個體上的服務任務會停止,並根據服務的部署組態參數 minimumHealthyPercent 和 maximumPercent 被取代。
確認取消註冊延遲值已正確設定
**重要:**下列步驟僅適用於使用 Application Load Balancer 或 Network Load Balancer 的服務。如果您的服務使用 Classic Load Balancer,請檢查連接耗盡值。
- 開啟 Amazon ECS 主控台。
- 在導覽窗格中,選擇叢集,然後選擇容器執行個體要耗盡的叢集。
- 選擇服務標籤,然後選取堆疊停滯在 RUNNING 狀態的服務。
- 選擇目標群組名稱。
- 在詳細資訊標籤上,向下捲動,然後選取取消註冊延遲核取方塊。
確認 ECS_CONTAINER_STOP_TIMEOUT 值已正確設定
- 使用 SSH 連接至您的容器執行個體。
- 執行 docker inspect ecs-agent --format '{{json .Config.Env}}' 命令。
- 檢查 ECS_CONTAINER_STOP_TIMEOUT 是否有值。
**注意:**ECS_CONTAINER_STOP_TIMEOUT 是 ECS 容器代理程式參數,用於定義 Amazon ECS 在結束容器之前等待的時間。在任務停止時,持續時間開始計算。如果您在步驟 2 中執行命令後,在輸出中看不到 ECS_CONTAINER_STOP_TIMEOUT 參數,則表示 Amazon ECS 正在使用預設值 30s。
尋找其他與任務相關的問題
- 使用 SSH 連接至您的容器執行個體。
- 驗證 Docker 常駐程式和 Amazon ECS 容器代理程式是否正在為您的 Amazon Linux 1 AMI 或 Amazon Linux 2 AMI 執行。
- 根據 logConfiguration 設定的日誌驅動程式檢查應用程式日誌。
**注意:**例如,如果您的任務在使用 awslogs 日誌驅動程式,請檢查 Amazon CloudWatch Logs 中是否有問題。