如何對容器執行個體設為 DRAINING 時需要很長時間才停止的 Amazon ECS 任務進行疑難排解?

1 分的閱讀內容
0

我的 Amazon Elastic Container Service (Amazon ECS) 任務需要很長時間才會移至 STOPPED 狀態。或者,當容器執行個體設為 DRAINING 時,我的 Amazon ECS 任務停滯在 RUNNING 狀態。我該如何解決此問題?

簡短描述

將 ECS 執行個體設定為 DRAINING 時,Amazon ECS 會執行下列動作:

  • 防止排定新任務置放於容器執行個體上
  • 停止處於 RUNNING 狀態的容器執行個體上的任務

由於組態參數或任務發生問題,您的任務可能會停滯在 RUNNING 狀態,或需要更長的時間才會移至 STOPPED 狀態。若要對這些問題進行疑難排解,請考慮下列選項:

解決方法

確認您的 DeploymentConfiguration 參數已正確設定

  1. 開啟 Amazon ECS 主控台
  2. 在導覽窗格中,選擇叢集,然後選擇容器執行個體要耗盡的叢集。
  3. 選擇 ECS 執行個體標籤,然後在狀態區段中選擇 DRAINING
  4. 選擇您的容器執行個體,然後找出用於耗盡或需要長時間耗盡之任務的服務。
  5. 選擇服務標籤,選取服務,然後選擇部署
  6. 檢查 minimumHealthyPercentmaximumPercent 的值。
    **注意:**處於 RUNNING 狀態的容器執行個體上的服務任務會停止,並根據服務的部署組態參數 minimumHealthyPercent 和 maximumPercent 被取代。

確認取消註冊延遲值已正確設定

**重要:**下列步驟僅適用於使用 Application Load Balancer 或 Network Load Balancer 的服務。如果您的服務使用 Classic Load Balancer,請檢查連接耗盡值

  1. 開啟 Amazon ECS 主控台
  2. 在導覽窗格中,選擇叢集,然後選擇容器執行個體要耗盡的叢集。
  3. 選擇服務標籤,然後選取堆疊停滯在 RUNNING 狀態的服務。
  4. 選擇目標群組名稱
  5. 詳細資訊標籤上,向下捲動,然後選取取消註冊延遲核取方塊。

確認 ECS_CONTAINER_STOP_TIMEOUT 值已正確設定

  1. 使用 SSH 連接至您的容器執行個體
  2. 執行 docker inspect ecs-agent --format '{{json .Config.Env}}' 命令。
  3. 檢查 ECS_CONTAINER_STOP_TIMEOUT 是否有值。
    **注意:**ECS_CONTAINER_STOP_TIMEOUT 是 ECS 容器代理程式參數,用於定義 Amazon ECS 在結束容器之前等待的時間。在任務停止時,持續時間開始計算。如果您在步驟 2 中執行命令後,在輸出中看不到 ECS_CONTAINER_STOP_TIMEOUT 參數,則表示 Amazon ECS 正在使用預設值 30s。

尋找其他與任務相關的問題

  1. 使用 SSH 連接至您的容器執行個體
  2. 驗證 Docker 常駐程式和 Amazon ECS 容器代理程式是否正在為您的 Amazon Linux 1 AMIAmazon Linux 2 AMI 執行。
  3. 根據 logConfiguration 設定的日誌驅動程式檢查應用程式日誌。
    **注意:**例如,如果您的任務在使用 awslogs 日誌驅動程式,請檢查 Amazon CloudWatch Logs 中是否有問題。

AWS 官方
AWS 官方已更新 2 年前