本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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 Agent 變更日誌
GitHub -
ecs-init
應用程式的原始程式碼,以及用來封裝代理程式的指令碼和組態,現在已成為代理程式儲存庫的一部分。如需舊版ecs-init
和 包裝,請參閱 上的 Amazon ecs-init 變更日誌GitHub -
Docker 文件中的 Docker 引擎版本備註
-
NVIDIA 文件中的驅動程式
NVIDIA文件
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.
,以及 Windows 執行個體的 timestamp
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
-
範例值:
crit
、error
、warn
、info
、debug
Linux 的預設值:
info
Windows 的預設值:
info
要記錄的細節層次。
ECS_LOGLEVEL_ON_INSTANCE
-
範例值:
none
、crit
、error
、warn
、info
、debug
Linux 上的預設值:如果
ECS_LOG_DRIVER
明確設定為非空白值,則為none
;否則會與ECS_LOGLEVEL
的值相同Windows 上的預設值:如果
ECS_LOG_DRIVER
明確設定為非空白值,則為none
;否則會與ECS_LOGLEVEL
的值相同可用於覆寫
ECS_LOGLEVEL
,並設定應該記錄在執行個體上日誌檔案中的詳細資訊層級,與記錄驅動程式中記錄的層級分開。如果明確設定記錄驅動程式,則執行個體日誌預設為關閉。可以使用此變數重新開啟。 ECS_LOG_DRIVER
-
範例值:
awslogs
、fluentd
、gelf
、json-file
、journald
、logentries
、syslog
、splunk
Linux 的預設值:
json-file
Windows 的預設值:不適用
決定代理程式容器使用的記錄驅動程式。
ECS_LOG_ROLLOVER_TYPE
-
範例值:
size
、hourly
Linux 的預設值:
hourly
Windows 的預設值:
hourly
決定容器代理程式日誌檔案是每小時輪換還是根據大小輪換。根據預設,代理日誌檔每小時輪換一次。
ECS_LOG_OUTPUT_FORMAT
-
範例值:
logfmt
、json
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"