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/releases

重要

可靠指標的最低 Docker 版本是 Docker 版本 v20.10.13 及更新版本,該版本隨附於 Amazon ECS 最佳化 AMI 20220607 及更新版本中。

Amazon ECS 代理程式版本 1.20.0 和更新版本已不支援 1.9.0 之前的 Docker 版本。

生命週期

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

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

重要

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

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

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

重要

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

Amazon ECS 最佳化 AMI

Amazon ECS 最佳化 AMI 的 Linux 變體使用 Amazon Linux 2 AMI 作為其基礎。透過查詢 Systems Manager 參數存放區 API,可以擷取每個變體的 Amazon Linux 2 來源 AMI 名稱。如需詳細資訊,請參閱 擷取 Amazon EC 最佳化的 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"