使用探針對容器進行健康檢查
Liveness Probe和Readiness Probe是用于檢測容器狀態(tài)的機制,其中Liveness Probe用于檢測容器是否正常運行,Readiness Probe用于檢測容器是否已經(jīng)就緒。本文介紹如何配置Liveness Probe和Readiness Probe對容器進行健康檢查,以便ECI更好地監(jiān)控和管理容器的運行狀態(tài),確保服務(wù)的高可用性和穩(wěn)定性。
功能說明
ECI支持通過存活探針和業(yè)務(wù)探針來檢查容器的狀態(tài)和運行情況。
探針 | 說明 | 應(yīng)用場景 |
應(yīng)用存活探針( Liveness Probe) | 用于檢查容器是否正常運行。
|
|
應(yīng)用業(yè)務(wù)探針(Readiness Probe) | 用于檢查容器是否已經(jīng)準備就緒,可以為請求提供服務(wù)。
| 如果應(yīng)用程序暫時無法對外部流量提供服務(wù),例如應(yīng)用程序需要在啟動期間加載大量數(shù)據(jù)或配置文件,此時,如果不想終止應(yīng)用程序,也不想向其發(fā)送請求,可以通過Readiness Probe來檢測和緩解這種情況。 |
配置說明(OpenAPI)
調(diào)用CreateContainerGroup接口創(chuàng)建ECI實例時,您可以通過容器中的LivenessProbe和ReadinessProbe參數(shù)來設(shè)置應(yīng)用存活探針和應(yīng)用業(yè)務(wù)探針。相關(guān)參數(shù)說明如下表所示。更多信息,請參見CreateContainerGroup。
LivenessProbe相關(guān)參數(shù)
設(shè)置LivenessProbe相關(guān)參數(shù)時,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請求對應(yīng)的協(xié)議類型,取值范圍:
|
Container.N.LivenessProbe.Exec.Command.N | array | cat /tmp/healthy | 使用命令行方式進行健康檢查時,在容器內(nèi)執(zhí)行的命令。 |
Container.N.LivenessProbe.TcpSocket.Port | integer | 8000 | 使用TCP Socket方式進行健康檢查時,TCP Socket檢測的端口。 |
Container.N.LivenessProbe.InitialDelaySeconds | integer | 5 | 容器啟動多久后開始檢查。單位為秒。 |
Container.N.LivenessProbe.PeriodSeconds | integer | 1 | 檢查執(zhí)行的周期,默認為10秒,最小為1秒。 |
Container.N.LivenessProbe.SuccessThreshold | integer | 1 | 從上次檢查失敗后重新認定檢查成功的檢查次數(shù)閾值(必須是連續(xù)成功),默認為1。當前必須為1。 |
Container.N.LivenessProbe.FailureThreshold | integer | 3 | 從上次檢查成功后認定檢查失敗的檢查次數(shù)閾值(必須是連續(xù)失敗),默認為3。 |
Container.N.LivenessProbe.TimeoutSeconds | integer | 1 | 檢查超時的時間,默認為1秒,最小為1秒。 |
ReadinessProbe相關(guān)參數(shù)
設(shè)置ReadinessProbe相關(guān)參數(shù)時,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請求對應(yīng)的協(xié)議類型,取值范圍:
|
Container.N.ReadinessProbe.Exec.Command.N | array | cat /tmp/healthy | 使用命令行方式進行健康檢查時,在容器內(nèi)執(zhí)行的命令。 |
Container.N.ReadinessProbe.TcpSocket.Port | integer | 8000 | 使用TCP Socket方式進行健康檢查時,TCP Socket檢測的端口。 |
Container.N.ReadinessProbe.InitialDelaySeconds | integer | 5 | 容器啟動多久后開始檢查。單位為秒。 |
Container.N.ReadinessProbe.PeriodSeconds | integer | 1 | 檢查執(zhí)行的周期,默認為10秒,最小為1秒。 |
Container.N.ReadinessProbe.SuccessThreshold | integer | 1 | 從上次檢查失敗后重新認定檢查成功的檢查次數(shù)閾值(必須是連續(xù)成功),默認為1。當前必須為1。 |
Container.N.ReadinessProbe.FailureThreshold | integer | 3 | 從上次檢查成功后認定檢查失敗的檢查次數(shù)閾值(必須是連續(xù)失敗),默認為3。 |
Container.N.ReadinessProbe.TimeoutSeconds | integer | 1 | 檢查超時的時間,默認為1秒,最小為1秒。 |
配置說明(控制臺)
通過彈性容器實例控制臺創(chuàng)建ECI實例時,您可以在容器配置區(qū)域選擇容器,展開該容器的高級配置,然后打開監(jiān)控檢查開關(guān),并配置探針。示例如下:
使用控制臺配置時,僅支持命令行和HTTP請求兩種檢查方式,不支持TCP Socket方式。
參數(shù) | 描述 |
時間設(shè)置 |
|
檢查方式 | 根據(jù)需要選擇檢查方式。
|
命令行腳本 | 當檢查方式為命令行腳本時,需要配置在容器內(nèi)執(zhí)行的命令行腳本。 |
HTTP請求方式 | 當檢查方式為HTTP請求方式時,需要配置HTTP Get請求包含的路徑、端口和協(xié)議。 |
配置示例
創(chuàng)建一臺設(shè)置了Liveness Probe和Readiness Probe的ECI實例,然后模擬服務(wù)異常,以查看探針的配置效果。
調(diào)用CreateContainerGroup接口創(chuàng)建一臺ECI實例。
以下示例采用TCP Socket方式進行健康檢查:
ContainerGroupName=test-probe # 使用Nginx鏡像,同時自動創(chuàng)建和綁定一個EIP Container.1.Name=container-1 Container.1.Image=nginx AutoCreateEip=true # 配置應(yīng)用存活探針,在容器運行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 # 配置應(yīng)用業(yè)務(wù)探針,在容器運行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
在彈性容器實例控制臺查看ECI實例事件。
ECI實例創(chuàng)建成功后,單擊實例ID可打開實例詳情頁面。在事件頁簽下查看實例事件,可以看到容器正常啟動。
連接容器。具體操作,請參見連接ECI實例。
修改Nginx監(jiān)聽端口,模擬服務(wù)異常。
修改Nginx監(jiān)聽端口。
說明本示例使用的Nginx鏡像環(huán)境中沒有安裝vim,執(zhí)行vi命令前需執(zhí)行
apt-get update
和apt-get install vim
安裝vim。vi /etc/nginx/conf.d/default.conf
將監(jiān)聽端口從80改為8080,示例如下:
重啟Nginx。
nginx -s reload
查看探針的生效情況。
重啟Nginx幾秒后,容器會自動進行重啟。此時查看實例事件,可以看到在Liveness Probe和Readiness Probe檢查失敗后,容器進行了重啟。