跳至內容

常見問題集: 卡在生命週期狀態的 Amazon ECS 任務

2 分的閱讀內容
0

我想知道為什麼我的 Amazon Elastic Container Service (Amazon ECS) 任務卡在某個特定的生命週期狀態。

**問:**為什麼我的 Amazon ECS 任務卡在「佈建中」狀態?

當 ECS 排程器在 Amazon Elastic Compute Cloud (Amazon EC2) 啟動類型中找不到適當的 ECS 執行個體時,使用該啟動類型的任務可能會停留在「佈建中」狀態。即使現有的容器執行個體上有空間可以執行任務,也可能發生這種情況。

處於「佈建中」狀態的任務會形成一個佇列。Amazon ECS 會將無法部署的任務 (因記憶體、連接埠、彈性網路介面、GPU 和 CPU 等資源限制) 加入該佇列。當額外資源變得可用時,這些任務就會轉換為「執行中」狀態。

如果您管理容量提供者的擴展,那麼當現有執行個體無法提供足夠資源時,任務不會立即失敗。相反地,這些任務會進入「佈建中」狀態。如果您沒有管理擴展,那麼無法找到容量的任務將會立即失敗。

當出現問題且使用 awsvpc 模式的任務無法佈建彈性網路介面時,它們可能會停留在「佈建中」狀態。當發生問題且無法佈建彈性網路介面時,AWS Fargate 任務也可能會停留在「佈建中」狀態。

**問:**當我的 Amazon ECS 任務使用容量提供者時,為什麼會從「佈建中」狀態轉換為「已停止」狀態?

ECS 可能因以下原因而卡在「佈建中」狀態:

  • 組態錯誤
  • 資源限制
  • 與容量提供者的規格不一致

若要對這些問題進行疑難排解,請採取以下動作:

  • 檢查與容量提供者關聯的 Auto Scaling 群組是否已達到其最大執行個體數量上限。如果已達上限,ECS 就無法佈建額外的任務。

  • 如果您使用的是 Amazon EC2 啟動類型,並搭配與 Auto Scaling 群組相關聯的啟動範本,那麼請檢查使用者資料。請確保您具有以下格式的正確叢集名稱:

    #!/bin/bash
    echo "ECS_CLUSTER=MyCluster" >> /etc/ecs/ecs.config
  • 請確認與 Auto Scaling 群組關聯的執行個體已附加正確信任關係的 ecsInstanceRole 政策。

  • 檢查 Amazon ECS 服務的事件。如果您看到以下錯誤,表示執行個體已啟動,但尚未設定附加的負載平衡器:
    目標位於未啟用負載平衡器的可用區域

  • 請確保任務的指定子網路與容量提供者管理的容器執行個體位於相同的可用區域。若您使用容量提供者策略並搭配 aws-vpc 網路模式啟動任務,這些任務必須位於相同的可用區域中。

  • 對於使用 EC2 Linux 執行個體上 awsvpc 網路模式的任務,彈性網路介面不會提供公有 IP 位址。若要存取網際網路,您必須在已設定使用 NAT 閘道的私有子網路中啟動任務。您若在公有子網路中啟動任務,將無法存取網際網路,並可能卡在「佈建中」狀態。

如需更多資訊,請參閱查看 Amazon ECS 服務事件訊息

**問:**為什麼我的 Amazon ECS 任務卡在「待處理」狀態?

當 Amazon ECS 正在等待容器代理程式進一步採取行動時,您的任務會進入「待處理」狀態。該任務會停留在此狀態,直到有資源可供該任務使用為止。

如需更多資訊,請參閱為什麼我的 Amazon ECS 任務卡在「待處理」狀態?

**問:**為什麼我的 Amazon ECS 任務卡在「啟用中」狀態?

當容器中的主要程序轉換為「執行中」狀態,且 Amazon ECS 正在執行額外步驟時,您的任務會進入「啟用中」狀態。例如,若任務使用服務探索,您必須為任務建立服務探索資源。

對於屬於使用多個 Elastic Load Balancing 目標群組的服務的任務,目標群組註冊會在此狀態下進行。當任務處於「啟用中」狀態時,Amazon ECS 會等待與目標群組註冊或服務探索資源相關的操作完成。

**問:**為什麼我使用服務探索的任務卡在「啟用中」狀態?

請檢查 AWS CloudTrail 事件歷史記錄中與服務探索服務相關的 API 呼叫,例如下列呼叫:

  • CreatePrivateDnsNamespace
  • CreateService
  • RegisterInstance
  • UpdateInstanceCustomHealthStatus

上述的 API 動作定義於 AmazonECSServiceRolePolicy AWS 受管政策中。如果 API 呼叫失敗並顯示 錯誤碼,例如 ServiceNotFoundInternalFailure,請確保您已遵循 服務探索注意事項

**問:**為什麼使用 Elastic Load Balancing 目標群組的任務會卡在「啟用中」狀態?

當 Amazon ECS 花較長時間來判斷容器運作狀態時,任務可能會卡在「啟用中」狀態。若要計算總耗時,請將參數 HealthCheckIntervalSecondsHealthyThresholdCount 相乘。若要加快運作狀態檢查程序,可減少檢查次數與檢查間隔。請檢查 CloudTrail 事件,查看對應的 Elastic Load Balancing RegisterTargets API 呼叫是否有任何錯誤或失敗報告。

**問:**為什麼我的 Amazon ECS 任務在應該已經進入「已停止」狀態,卻卡在「執行中」狀態?

應用程式的問題或任務設定錯誤可能導致任務持續處於「執行中」狀態。

若要對這些問題進行疑難排解,請採取以下動作:

  • 檢查 應用程式日誌,尋找任何錯誤或有關容器無法結束的原因資訊。當必要容器結束後,任務將轉換為「已停止」狀態。
  • 如果該任務屬於 Amazon ECS 服務,請確認您的 DeploymentConfiguration 參數設定正確。
  • 如果該任務屬於使用負載平衡器的 Amazon ECS 服務,請確認 deregistration delay 參數設定正確。
  • 請檢查 ECS_CONTAINER_STOP_TIMEOUT 值是否正確設定。
  • 啟用您任務的 Amazon ECS exec。然後,使用 ECS exec 登入容器,以對應用程式問題進行疑難排解。

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

**問:**為什麼我的 Amazon ECS 任務卡在「停用」狀態?

在「停用」狀態時,Amazon ECS 會在停止任務之前執行額外步驟。例如,對於屬於使用多個 Elastic Load Balancing 目標群組的服務的任務,目標群組註冊會在此狀態下進行。

以下原因可能導致任務卡在「停用」狀態:

  • 您在任務取消註冊目標群組之前,就刪除了與 Elastic Load Balancing 目標群組相關的資源。
  • 建立 Amazon ECS 服務時指定為參數的的自訂 角色 不具備所需的 Elastic Load Balancing 權限。
  • 任務仍在執行時,您就刪除了自訂角色。

請確認您在服務定義中指定的目標群組與 AWS Identity and Access Management (IAM) 角色存在。同時請確保服務定義包含所需的信任政策與 Elastic Load Balancing 權限。

若要最佳化任務從「停用」狀態轉換所需的時間,請調整 deregistration_delay.timeout_secondsderegistration_delay.timeout_seconds 參數。如需更多資訊,請參閱負載平衡器連接耗盡

**問:**為什麼我的 Amazon ECS 任務卡在「取消佈建中」狀態?

Amazon ECS 在任務停止後,但尚未轉換為「已停止」狀態之前執行額外步驟。例如,對於使用 awsvpc 網路模式的任務,Amazon ECS 會卸除並刪除彈性網路介面。

以下原因可能導致任務卡在「取消佈建中」狀態:

  • 您在任務終止之前刪除了與服務關聯的服務連結角色。服務預先定義了服務連結角色,並包含該服務代表您呼叫其他 AWS 服務所需的擁有權限。請執行以下命令來檢查是否有服務連結角色與您的服務相關聯:

    $aws ecs describe-services --cluster CLUSTER-NAME --services SERVICE-NAME
  • 您在任務從目標群組取消註冊之前刪除了目標群組。

AWS 官方已更新 2 年前