Amazon ECS Linux 容器代理程式 - Amazon Elastic Container Service

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

Amazon ECS Linux 容器代理程式

Amazon ECS代理程式是在每個向叢集註冊的容器執行個體上執行的程序。它有助於容器執行個體與 Amazon 之間的通訊ECS。

每個 Amazon ECS容器代理程式版本都支援不同的功能集,並提供與先前版本不同的錯誤修正。如果可能,我們一律建議使用最新版本的 Amazon ECS容器代理程式。若要將您的容器代理更新到最新版本,請參閱「更新 Amazon ECS容器代理程式」。

若要查看每個代理程式版本中包含哪些功能和增強功能,請參閱 https://github.com/aws/amazon-ecs-agent/ 版本

重要

可靠指標的最低 Docker 版本為 Docker 版本v20.10.13和更新版本,包含在 Amazon ECS最佳化AMI20220607和更新版本中。

Amazon ECS代理程式版本1.20.0和更新版本已取代對 Docker 版本早於 的支援1.9.0

生命週期

當 Amazon ECS容器代理程式向叢集註冊 Amazon EC2執行個體時,Amazon EC2執行個體會將其狀態報告為 ,ACTIVE其代理程式連線狀態報告為 TRUE。這個容器執行個體可以接受執行任務請求。

如果您停止 (非終止) 容器執行個體,狀態會維持在 ACTIVE,但代理程式連線狀態會在幾分鐘內轉換成 FALSE。容器執行個體上執行的所有任務都會停止。如果您再次啟動容器執行個體,容器代理程式會重新連線至 Amazon ECS服務,而且您可以再次在執行個體上執行任務。

重要

如果您停止並啟動容器執行個體,或重新啟動該執行個體,Amazon ECS容器代理程式的某些較舊版本會再次註冊執行個體,而不會取消註冊原始容器執行個體 ID。在此情況下,Amazon ECS會列出叢集中比實際多的容器執行個體。(如果您具有相同 Amazon 執行個體 ID IDs的重複容器EC2執行個體,您可以安全地取消註冊列為 且客服人員連線狀態ACTIVE為 的複本FALSE。) 此問題已在目前版本的 Amazon ECS容器代理程式中修正。如需有關更新至目前版本的詳細資訊,請參閱「更新 Amazon ECS容器代理程式」。

如果您將容器執行個體的狀態變更為 DRAINING,新的任務就不會放置在容器執行個體中。如果可能,容器執行個體上執行的所有服務任務都會移除,以便您可以執行系統更新。如需詳細資訊,請參閱排放 Amazon ECS容器執行個體

如果您取消註冊或終止容器執行個體,則容器執行個體狀態會立即變更為 INACTIVE,且在您列出容器執行個體時將不再回報該容器執行個體。不過,終止後的一小時內您仍然可以描述容器執行個體。一小時之後,即無法再進行執行個體描述。

重要

您可以手動耗盡執行個體,或者建置 Auto Scaling 群組 lifecycle hook 以將執行個體狀態設定為 DRAINING。如需 EC2 Auto Scaling 生命週期掛鉤的詳細資訊,請參閱 Amazon Auto Scaling 生命週期掛鉤。

Amazon ECS最佳化 AMI

Amazon ECS最佳化的 Linux 變體AMI會使用 Amazon Linux 2 AMI作為其基礎。您可以查詢 Systems Manager 參數存放區 來擷取每個變體的 Amazon Linux 2 來源AMI名稱API。如需詳細資訊,請參閱擷取 Amazon ECS最佳化 Linux AMI中繼資料。當您從最新的 Amazon ECS最佳化 Amazon Linux 2 啟動我們的容器執行個體時AMI,會收到目前的容器代理程式版本。若要使用最新的 Amazon ECS最佳化 Amazon Linux 2 啟動容器執行個體AMI,請參閱 啟動 Amazon ECS Linux 容器執行個體

其他資訊

下列頁面提供變更的其他資訊:

Amazon ECS容器代理程式日誌組態參數

Amazon ECS容器代理程式會將日誌存放在您的容器執行個體上。

針對 1.36.0 版和更新版本的容器代理程式,根據預設,紀錄會位在 Linux 執行個體的 /var/log/ecs/ecs-agent.log,以及 Windows 執行個體的 C:\ProgramData\Amazon\ECS\log\ecs-agent.log

針對 1.35.0 版和更舊版本的容器代理程式,根據預設,紀錄會位在 Linux 執行個體的 /var/log/ecs/ecs-agent.log.timestamp,以及 Windows 執行個體的 C:\ProgramData\Amazon\ECS\log\ecs-agent.log.timestamp

根據預設,代理程式紀錄會每小時輪換一次,最多儲存 24 個日誌。

下列是容器代理程式組態變數,可用來變更預設的代理程式紀錄行為。如需詳細資訊,請參閱Amazon ECS容器代理程式組態

ECS_LOGFILE

範例值:/ecs-agent.log

Linux 的預設值:Null

Windows 的預設值:Null

代理日誌應寫入其中的位置。如果您透過 執行代理程式ecs-init,這是使用 Amazon ECS最佳化 時的預設方法AMI,容器內路徑為 /log,並將該路徑ecs-init掛載到主機/var/log/ecs/上。

ECS_LOGLEVEL

範例值:criterrorwarninfodebug

Linux 的預設值:info

Windows 的預設值:info

要記錄的細節層次。

ECS_LOGLEVEL_ON_INSTANCE

範例值:nonecriterrorwarninfodebug

Linux 上的預設值:如果 ECS_LOG_DRIVER 明確設定為非空白值,則為 none;否則會與 ECS_LOGLEVEL 的值相同

Windows 上的預設值:如果 ECS_LOG_DRIVER 明確設定為非空白值,則為 none;否則會與 ECS_LOGLEVEL 的值相同

可用於覆寫 ECS_LOGLEVEL,並設定應該記錄在執行個體上日誌檔案中的詳細資訊層級,與記錄驅動程式中記錄的層級分開。如果明確設定記錄驅動程式,則執行個體日誌預設為關閉。可以使用此變數重新開啟。

ECS_LOG_DRIVER

範例值:awslogsfluentdgelfjson-filejournaldlogentriessyslogsplunk

Linux 的預設值:json-file

Windows 的預設值:不適用

決定代理程式容器使用的記錄驅動程式。

ECS_LOG_ROLLOVER_TYPE

範例值:sizehourly

Linux 的預設值:hourly

Windows 的預設值:hourly

決定容器代理程式日誌檔案是每小時輪換還是根據大小輪換。根據預設,代理日誌檔每小時輪換一次。

ECS_LOG_OUTPUT_FORMAT

範例值:logfmtjson

Linux 的預設值:logfmt

Windows 的預設值:logfmt

決定日誌輸出格式。使用 json 格式時,日誌中的每行都是結構化JSON映射。

ECS_LOG_MAX_FILE_SIZE_MB

範例值:10

Linux 的預設值:10

Windows 的預設值:10

ECS_LOG_ROLLOVER_TYPE變數設定為 時size,此變數會決定日誌檔案輪換前的大小上限 (以 MB 為單位)。如果累積類型設為 hourly,則此變數將遭忽略。

ECS_LOG_MAX_ROLL_COUNT

範例值:24

Linux 的預設值:24

Windows 的預設值:24

決定要保留的輪換日誌檔數目。達到此限制後,就會刪除較舊的日誌檔案。

針對 1.36.0 和更新版本的容器代理程式,可參考以下使用 logfmt 格式時的範例日誌檔。

level=info time=2019-12-12T23:43:29Z msg="Loading configuration" module=agent.go level=info time=2019-12-12T23:43:29Z msg="Image excluded from cleanup: amazon/amazon-ecs-agent:latest" module=parse.go level=info time=2019-12-12T23:43:29Z msg="Image excluded from cleanup: amazon/amazon-ecs-pause:0.1.0" module=parse.go level=info time=2019-12-12T23:43:29Z msg="Amazon ECS agent Version: 1.36.0, Commit: ca640387" module=agent.go level=info time=2019-12-12T23:43:29Z msg="Creating root ecs cgroup: /ecs" module=init_linux.go level=info time=2019-12-12T23:43:29Z msg="Creating cgroup /ecs" module=cgroup_controller_linux.go level=info time=2019-12-12T23:43:29Z msg="Loading state!" module=statemanager.go level=info time=2019-12-12T23:43:29Z msg="Event stream ContainerChange start listening..." module=eventstream.go level=info time=2019-12-12T23:43:29Z msg="Restored cluster 'auto-robc'" module=agent.go level=info time=2019-12-12T23:43:29Z msg="Restored from checkpoint file. I am running as 'arn:aws:ecs:us-west-2:0123456789:container-instance/auto-robc/3330a8a91d15464ea30662d5840164cd' in cluster 'auto-robc'" module=agent.go

以下是使用 JSON 格式時的範例日誌檔案。

{"time": "2019-11-07T22:52:02Z", "level": "info", "msg": "Starting Amazon Elastic Container Service Agent", "module": "engine.go"}

針對 1.35.0 和更舊版本的容器代理程式,以下是日誌檔的範例。

2016-08-15T15:54:41Z [INFO] Starting Agent: Amazon ECS Agent - v1.12.0 (895f3c1) 2016-08-15T15:54:41Z [INFO] Loading configuration 2016-08-15T15:54:41Z [WARN] Invalid value for task cleanup duration, will be overridden to 3h0m0s, parsed value 0, minimum threshold 1m0s 2016-08-15T15:54:41Z [INFO] Checkpointing is enabled. Attempting to load state 2016-08-15T15:54:41Z [INFO] Loading state! module="statemanager" 2016-08-15T15:54:41Z [INFO] Detected Docker versions [1.17 1.18 1.19 1.20 1.21 1.22] 2016-08-15T15:54:41Z [INFO] Registering Instance with ECS 2016-08-15T15:54:41Z [INFO] Registered! module="api client"