本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用容器運ECS作狀態檢查確定 Amazon 任務健康
建立工作定義時,您可以為您的容器設定健全狀況檢查。Health 狀態檢查是在容器本機上執行,並驗證應用程式健康狀態和可用性的命令。
Amazon ECS 容器代理程式僅監控和報告任務定義中指定的運作狀態檢查。Amazon ECS 不會監控內嵌在容器映像中但未在容器定義中指定的 Docker 運作狀態檢查。容器定義中指定的運作狀態檢查參數,會覆寫任何存在於容器影像中的 Docker 運作狀態檢查。
在工作定義中定義健全狀況檢查時,容器會在容器內執行健全狀況檢查程序,然後評估結束代碼以判斷應用程式健康狀況。
健康狀態檢查由下列參數組成:
-
命令 — 容器執行的命令,以判斷其狀態是否正常。此字串陣列的開頭可以是
CMD
,如此能直接執行命令引數;或是CMD-SHELL
,藉以使用容器預設的 shell 來執行命令。 -
[間隔] — 每次健全狀況檢查之間的時間 (秒)。
-
逾時 — 等待健全狀況檢查成功之後,將其視為失敗之前的時間 (以秒為單位)。
-
重試 — 在容器被視為健康狀態不良之前,重試失敗的健康狀態檢查的次數。
-
開始期間 — 在失敗健全狀況檢查之前,提供容器啟動時間的選擇性寬限期計入重試次數上限。
如需有關如何在工作定義中指定健康狀態檢查的資訊,請參閱運作狀態檢查。
以下說明容器可能的健全狀況狀態值:
-
HEALTHY
- 容器運作狀態檢查已成功通過。 -
UNHEALTHY
- 容器運作狀態檢查失敗。 -
UNKNOWN
正在評估容器運作狀態檢查、未定義容器運作狀態檢查,或 Amazon ECS 沒有容器的健康狀態。
健康狀態檢查命令會在容器上執行。因此,您必須在容器映像中包含這些命令。
健康狀態檢查會透過容器的回送介面 (位於localhost
或127.0.0.1
) 連線至應用程式。的結束代碼0
表示成功,而非零結束代碼則表示失敗。
使用容器健全狀況檢查時,請考量下列事項
-
容器運作狀態檢查需要版本 1.17.0 或更高版本的 Amazon ECS 容器代理程式。
-
如果您使用的是 Linux 平台版本
1.1.0
或更高版本,或 Windows 平台版本或更高版本,則可支援 Fargate 工作的容器健康狀態檢查1.1.0
Amazon 如何ECS確定任務健康
在任務定義中是必要且具有健康狀態檢查命令的容器,是唯一會考慮判斷工作健康狀態的容器。
系統會依序評估下列規則:
-
如果一個重要容器的狀態為
UNHEALTHY
,則工作狀態為UNHEALTHY
。 -
如果他的狀態是一個基本容器
UNKNOWN
,那麼任務狀態是UNKNOWN
。 -
如果所有必要容器的狀態都是
HEALTHY
,則工作狀態為HEALTHY
。
請考慮下列具有 2 個基本容器的工作健康狀態範例。
容器 1 健康 | 容器 2 健康 | 任務健康 |
---|---|---|
UNHEALTHY |
UNKNOWN |
UNHEALTHY |
UNHEALTHY |
HEALTHY |
UNHEALTHY |
HEALTHY |
UNKNOWN |
UNKNOWN |
HEALTHY |
HEALTHY |
HEALTHY |
請考慮下列具有 3 個容器的工作健全狀況範例。
容器 1 健康 | 容器 2 健康 | 容器 3 健康 | 任務健康 |
---|---|---|---|
UNHEALTHY |
UNKNOWN |
UNKNOWN |
UNHEALTHY |
UNHEALTHY |
UNKNOWN |
HEALTHY |
UNHEALTHY |
UNHEALTHY |
HEALTHY |
HEALTHY |
UNHEALTHY |
HEALTHY |
UNKNOWN |
HEALTHY |
UNKNOWN |
HEALTHY |
UNKNOWN |
UNKNOWN |
UNKNOWN |
HEALTHY |
HEALTHY |
HEALTHY |
HEALTHY |
代理程式中斷連線對健全狀況檢查的影響
如果 Amazon ECS 容器代理程式與 Amazon ECS 服務中斷連線,這不會導致容器轉換為UNHEALTHY
狀態。這是為了確保容器在代理程式重新啟動或暫時無法使用期間保持執行。運作狀態檢查狀態是 Amazon ECS 代理程式的「最後一次聽到」回應,因此,如果在中斷連線HEALTHY
之前考慮容器,則該狀態將保留到代理程式重新連線並進行另一個健康狀態檢查為止。沒有對容器運作狀態檢查的狀態做出任何假設。