Amazon ECS EC2 容器執行個體 - Amazon Elastic Container Service

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

Amazon ECS EC2 容器執行個體

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

注意

在 Linux 容器執行個體上,代理程式容器會掛載最上層目錄,例如 /lib/lib64/proc。這對於 Amazon EBS 磁碟區、awsvpc網路模式、Amazon ECS Service Connect 和 FireLens Amazon ECS 等 ECS 功能是必要的。

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

Amazon ECS 容器代理程式包含amazon-ecs-pause映像。Amazon ECS 會將此映像用於使用awsvpc網路模式的任務。

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

重要

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

Amazon ECS 代理程式版本 1.20.0 和更新版本已不支援 18.01.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

Docker 支援

Amazon ECS 支援在 Amazon Linux 上發佈的最後兩個主要版本的 Docker。目前,這包括 Docker 20.10.x 和 Docker 25.x。

您可以在 GitHub 的 Amazon ECS 代理程式規格檔案中找到 Amazon ECS 所需的最低 Docker 版本。

使用 Amazon ECS 最佳化 AMI 時,會預先安裝 Docker 並設定為使用 Amazon ECS 容器代理程式。AMI 包含經過 Amazon ECS 測試和支援的 Docker 版本。

注意

雖然 Amazon ECS 支援多個 Docker 版本,但我們建議您使用 Amazon ECS 最佳化 AMI 隨附的 Docker 版本,以獲得最佳的相容性和支援。

Amazon ECS 最佳化 AMI

Amazon ECS 最佳化 AMI 的 Linux 變體使用 Amazon Linux 2 AMI 作為其基礎。透過查詢 Systems Manager 參數存放區 API,可以擷取每個變體的 Amazon Linux 2 來源 AMI 名稱。如需詳細資訊,請參閱擷取 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 容器代理程式組態或 GitHub 上的 Amazon ECS Agent README

針對 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"