Liveness Probe和Readiness Probe是用於檢測容器狀態的機制,其中Liveness Probe用於檢測容器是否正常運行,Readiness Probe用於檢測容器是否已經就緒。本文介紹如何配置Liveness Probe和Readiness Probe對容器進行健全狀態檢查,以便ECI更好地監控和管理容器的運行狀態,確保服務的高可用性和穩定性。
功能說明
ECI支援通過存活探針和業務探針來檢查容器的狀態和運行情況。
探針 | 說明 | 應用情境 |
應用存活探針( Liveness Probe) | 用於檢查容器是否正常運行。
|
|
應用業務探針(Readiness Probe) | 用於檢查容器是否已經準備就緒,可以為請求提供服務。
| 如果應用程式暫時無法對外部流量提供服務,例如應用程式需要在啟動期間載入大量資料或設定檔,此時,如果不想終止應用程式,也不想向其發送請求,可以通過Readiness Probe來檢測和緩解這種情況。 |
配置說明(OpenAPI)
調用CreateContainerGroup介面建立ECI執行個體時,您可以通過容器中的LivenessProbe和ReadinessProbe參數來設定應用存活探針和應用業務探針。相關參數說明如下表所示。更多資訊,請參見CreateContainerGroup。
LivenessProbe相關參數
設定LivenessProbe相關參數時,HttpGet、Exec和TcpSocket這三種檢查方式,只能選擇其中一種。
名稱 | 類型 | 樣本值 | 描述 |
Container.N.LivenessProbe.HttpGet.Path | string | /healthyz | 使用HTTP請求方式進行健全狀態檢查時,HTTP Get請求檢測的路徑。 |
Container.N.LivenessProbe.HttpGet.Port | integer | 8888 | 使用HTTP請求方式進行健全狀態檢查時,HTTP Get請求檢測的連接埠號碼。 |
Container.N.LivenessProbe.HttpGet.Scheme | string | HTTP | 使用HTTP請求方式進行健全狀態檢查時,HTTP Get請求對應的協議類型,取值範圍:
|
Container.N.LivenessProbe.Exec.Command.N | array | cat /tmp/healthy | 使用命令列方式進行健全狀態檢查時,在容器內執行的命令。 |
Container.N.LivenessProbe.TcpSocket.Port | integer | 8000 | 使用TCP Socket方式進行健全狀態檢查時,TCP Socket檢測的連接埠。 |
Container.N.LivenessProbe.InitialDelaySeconds | integer | 5 | 容器啟動多久後開始檢查。單位為秒。 |
Container.N.LivenessProbe.PeriodSeconds | integer | 1 | 檢查執行的周期,預設為10秒,最小為1秒。 |
Container.N.LivenessProbe.SuccessThreshold | integer | 1 | 從上次檢查失敗後重新認定檢查成功的檢查次數閾值(必須是連續成功),預設為1。當前必須為1。 |
Container.N.LivenessProbe.FailureThreshold | integer | 3 | 從上次檢查成功後認定檢查失敗的檢查次數閾值(必須是連續失敗),預設為3。 |
Container.N.LivenessProbe.TimeoutSeconds | integer | 1 | 檢查逾時的時間,預設為1秒,最小為1秒。 |
ReadinessProbe相關參數
設定ReadinessProbe相關參數時,HttpGet、Exec和TcpSocket這三種檢查方式,只能選擇其中一種。
名稱 | 類型 | 樣本值 | 描述 |
Container.N.ReadinessProbe.HttpGet.Path | string | /healthyz | 使用HTTP請求方式進行健全狀態檢查時,HTTP Get請求檢測的路徑。 |
Container.N.ReadinessProbe.HttpGet.Port | integer | 8888 | 使用HTTP請求方式進行健全狀態檢查時,HTTP Get請求檢測的連接埠號碼。 |
Container.N.ReadinessProbe.HttpGet.Scheme | string | HTTP | 使用HTTP請求方式進行健全狀態檢查時,HTTP Get請求對應的協議類型,取值範圍:
|
Container.N.ReadinessProbe.Exec.Command.N | array | cat /tmp/healthy | 使用命令列方式進行健全狀態檢查時,在容器內執行的命令。 |
Container.N.ReadinessProbe.TcpSocket.Port | integer | 8000 | 使用TCP Socket方式進行健全狀態檢查時,TCP Socket檢測的連接埠。 |
Container.N.ReadinessProbe.InitialDelaySeconds | integer | 5 | 容器啟動多久後開始檢查。單位為秒。 |
Container.N.ReadinessProbe.PeriodSeconds | integer | 1 | 檢查執行的周期,預設為10秒,最小為1秒。 |
Container.N.ReadinessProbe.SuccessThreshold | integer | 1 | 從上次檢查失敗後重新認定檢查成功的檢查次數閾值(必須是連續成功),預設為1。當前必須為1。 |
Container.N.ReadinessProbe.FailureThreshold | integer | 3 | 從上次檢查成功後認定檢查失敗的檢查次數閾值(必須是連續失敗),預設為3。 |
Container.N.ReadinessProbe.TimeoutSeconds | integer | 1 | 檢查逾時的時間,預設為1秒,最小為1秒。 |
配置說明(控制台)
通過Elastic Container Instance控制台建立ECI執行個體時,您可以在容器配置地區選取項目容器,展開該容器的進階配置,然後開啟監控檢查開關,並配置探針。樣本如下:
使用控制台配置時,僅支援命令列和HTTP請求兩種檢查方式,不支援TCP Socket方式。
參數 | 描述 |
時間設定 |
|
檢查方式 | 根據需要選擇檢查方式。
|
命令列指令碼 | 當檢查方式為命令列指令碼時,需要配置在容器內執行的命令列指令碼。 |
HTTP請求方式 | 當檢查方式為HTTP請求方式時,需要配置HTTP Get請求包含的路徑、連接埠和協議。 |
配置樣本
建立一台設定了Liveness Probe和Readiness Probe的ECI執行個體,然後類比服務異常,以查看探針的配置效果。
調用CreateContainerGroup介面建立一台ECI執行個體。
以下樣本採用TCP Socket方式進行健全狀態檢查:
ContainerGroupName=test-probe # 使用Nginx鏡像,同時自動建立和綁定一個EIP Container.1.Name=container-1 Container.1.Image=nginx AutoCreateEip=true # 配置應用存活探針,在容器運行5秒後,每3秒檢測一次80連接埠,成功閾值為1次,失敗閾值為3次,逾時時間為10秒 Container.1.LivenessProbe.TcpSocket.Port=80 Container.1.ReadinessProbe.InitialDelaySeconds=5 Container.1.LivenessProbe.PeriodSeconds=3 Container.1.LivenessProbe.SuccessThreshold=1 Container.1.LivenessProbe.FailureThreshold=3 Container.N.LivenessProbe.TimeoutSeconds=10 # 配置應用業務探針,在容器運行5秒後,每3秒檢測一次80連接埠,成功閾值為1次,失敗閾值為3次,逾時時間為10秒 Container.1.ReadinessProbe.TcpSocket.Port=80 Container.1.ReadinessProbe.InitialDelaySeconds=5 Container.1.ReadinessProbe.PeriodSeconds=3 Container.1.ReadinessProbe.SuccessThreshold=1 Container.1.ReadinessProbe.FailureThreshold=3 Container.1.ReadinessProbe.TimeoutSeconds=10
在Elastic Container Instance控制台查看ECI執行個體事件。
ECI執行個體建立成功後,單擊執行個體ID可開啟執行個體詳情頁面。在事件頁簽下查看執行個體事件,可以看到容器正常啟動。
串連容器。具體操作,請參見串連ECI執行個體。
修改Nginx監聽連接埠,類比服務異常。
修改Nginx監聽連接埠。
說明本樣本使用的Nginx鏡像環境中沒有安裝vim,執行vi命令前需執行
apt-get update
和apt-get install vim
安裝vim。vi /etc/nginx/conf.d/default.conf
將監聽連接埠從80改為8080,樣本如下:
重啟Nginx。
nginx -s reload
查看探針的生效情況。
重啟Nginx幾秒後,容器會自動進行重啟。此時查看執行個體事件,可以看到在Liveness Probe和Readiness Probe檢查失敗後,容器進行了重啟。