為什麼我的 Amazon ECS 服務中正在執行的任務計數會發生變化?

2 分的閱讀內容
0

我的 Amazon Elastic Container Service (Amazon ECS) 服務中正在執行任務計數已增加或減少。

簡短描述

由於多種原因,您的 Amazon ECS 服務中正在執行的任務計數可能會增加或減少。一些常見的原因如下:

  • 您的 Amazon ECS 任務未通過運作狀態檢查。
  • AWS CloudFormation 或 AWS Cloud Development Kit (AWS CDK) 更新了 ECS 服務中所需的計數。
  • 您手動更新了 ECS 服務所需的計數。
  • Amazon ECS 服務自動擴展根據擴展政策更新了任務數目。
  • 您使用 RegisterScalableTarget API 更新了應用程式自動擴展中的最小或最大計數。
  • ECS 服務的部署組態修改了部署期間執行的任務計數。

解決方案

您的 ECS 任務未通過運作狀態檢查

CloudFormation 或 AWS CDK 更新了 ECS 服務中所需的計數

如果使用 CloudFormation 或 CDK 建立 ECS 服務且未指定 DesiredCount 欄位,則所需計數將設為預設值 1。但是,當透過 CloudFormation 或 CDK 更新服務且未指定 DesiredCount 欄位時,會將目前部署中的現有所需計數用於新部署。

若要解決此問題,請檢閱 AWS CloudTrail 事件,以檢查 UpdateService API 呼叫是否由 CloudFormation 發出。您同樣可以檢查 Event record (事件記錄) 區段中的 userAgent 欄位是否指定以下內容來驗證這一點:

"userAgent": "cloudformation.amazonaws.com"

若要解決此問題,請在更新期間從 CloudFormation 或 CDK 程式碼中移除 desiredCount 參數。

您手動更新了 ECS 服務所需的計數

如果您使用 UpdateService API、Amazon ECS 主控台或 AWS Command Line Interface (AWS CLI) 手動更新 ECS 服務,請再次更新服務以將所需的計數變更為適當的值。如需詳細資訊,請參閲 Updating a service (更新服務) 和 update-service

若要解決此問題,請檢閱 CloudTrail events (CloudTrail 事件),以 UpdateService API 呼叫是否從 Amazon ECS 主控台或 AWS CLI 發出。您可以在 CloudTrail 記錄的 userAgent 欄位中檢視此資訊。

範例:

"userAgent": "console.amazonaws.com"

Amazon ECS 服務自動擴展根據擴展政策更新了任務數目

Amazon ECS 服務自動擴展可能會根據擴展政策增加或減少所需的計數。檢閱服務並檢查是否有任何最近的擴展活動。

若要檢視擴展活動,請執行以下操作:

  1. 開啟 Amazon ECS 主控台
  2. 在導覽窗格中,選擇 Clusters (叢集)。
  3. 選擇您要檢查的叢集。
  4. 選擇 Services (服務) 索引標籤。
  5. 選擇您要檢查的服務。
  6. 選擇 Events (事件) 索引標籤。

如果存在擴展事件,則可以在 Message (訊息) 欄中檢視資訊性訊息,如下所示:

Successfully set desired count to 1. Change successfully fulfilled by ecs. Cause: monitor alarm TargetTracking-service/service-autoscaling/sample-webapp-AlarmLow-fcd80aef-5161-4890-aeb4-35dde11ff42c in state ALARM triggered policy TargetTrackingPolicy.

如果任務因擴展活動而停止,請檢閱target tracking (目標追蹤) 或 step scaling (階段式擴展) 政策。然後,根據應用程式的要求更新所需的計數。

若要檢視應用程式自動擴展組態,請執行以下操作:

  1. 開啟 Amazon ECS 主控台
  2. 在導覽窗格中,選擇 Clusters (叢集)。
  3. 選擇您要檢查的叢集。
  4. 選擇 Services (服務) 索引標籤。
  5. 選擇您要檢查的服務。
  6. 選擇 Auto Scaling (自動擴展) 索引標籤。
    **注意:**如果您使用新的 Amazon ECS 主控台,請選擇 Configuration and tasks (組態和任務),然後在 Service configuration (服務組態) 下檢視相關資訊。

您使用 RegisterScalableTarget API 更新了應用程式自動擴展中的最小和最大計數。

如果您使用 RegisterScalableTarget API 來更新可擴展目標,則檢查 API 中指定的 MinCapacity 屬性值。如果您指定了新的最小值,則應用程式自動擴展會將此值用作任務可縮減規模的新最小值。

**注意:**應用程式自動擴展不會將所需計數縮減規模至小於指定的最小值。

ECS 服務的部署組態修改了部署期間正在執行的任務計數

檢閱 CloudTrail 事件,以檢查最近是否呼叫 UpdateService API。透過檢查 UpdateService API 中的 deploymentConfigration 請求參數,可以檢視 ECS 服務的部署組態。

-或-

透過執行以下操作,在 Amazon ECS 主控台中檢閱 ECS 服務的部署組態:

  1. 開啟 Amazon ECS 主控台
  2. 在導覽窗格中,選擇 Clusters (叢集)。
  3. 選擇您要檢查的叢集。
  4. 選擇 Services (服務) 索引標籤。
  5. 選擇您要檢查的服務。
  6. 選擇 Deployments (部署) 索引標籤。

部署組態參數可控制部署期間執行的任務數,以及停止和啟動任務的順序。如果部署組態設定不正確,則部署期間執行的任務數將會減少。因此,最佳實務是將 minimumHealthyPercent 參數的值設定為高於 0%。

minimumHealthyPercent 參數表示以下任一項的下限,以服務所需任務數百分比表示:

  • 部署期間應為服務執行的任務數
  • 容器執行個體耗盡時應執行的任務數。

此參數的值將向上舍入。例如,如果 minimumHealthyPercent 為 50%,且所需任務數為四,則排程器可在啟動兩個新任務之前停止兩個現有任務。如果 minimumHealthyPercent 為 75%,且所需任務數為二,則排程器無法停止任何任務,因為結果值也是二。

maximumPercent 參數表示以下任一項的上限,以服務所需任務數百分比表示:

  • 部署期間應為服務執行的任務數
  • 容器執行個體耗盡時應執行的任務數。

此參數的值將向下舍入。例如,如果 maximumPercent 為 200%,且所需任務數為四,則排程器可以在停止四個現有任務之前啟動四個新任務。如果 maximumPercent 為 125%,且所需任務數為三,則排程器無法啟動任何任務,因為結果值也是三。

如需詳細資訊,請參閲輪流更新


相關資訊

服務自動擴展

如何解決 Amazon ECS 中的「[AWS 服務] 無法放置任務,因為沒有容器執行個體滿足其所有要求」錯誤?

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