全部產品
Search
文件中心

Elastic Container Instance:使用探針對容器進行健全狀態檢查

更新時間:Aug 03, 2024

Liveness Probe和Readiness Probe是用於檢測容器狀態的機制,其中Liveness Probe用於檢測容器是否正常運行,Readiness Probe用於檢測容器是否已經就緒。本文介紹如何配置Liveness Probe和Readiness Probe對容器進行健全狀態檢查,以便ECI更好地監控和管理容器的運行狀態,確保服務的高可用性和穩定性。

功能說明

ECI支援通過存活探針和業務探針來檢查容器的狀態和運行情況。

探針

說明

應用情境

應用存活探針( Liveness Probe)

用於檢查容器是否正常運行。

  • 如果檢查成功,則表示容器正常運行。

  • 如果檢查失敗,系統會根據配置的容器重啟策略進行相應的處理。

  • 如果未配置該探針,則預設容器一直正常運行。

  • 當應用程式處於運行狀態但無法進行進一步操作時,Liveness Probe將捕獲到deadlock,重啟對應的容器,使得應用程式在存在bug的情況下依然能夠運行。

  • 長時間啟動並執行應用程式最終可能會轉換到broken狀態,此時除了重新啟動,無法恢複。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請求對應的協議類型,取值範圍:

  • HTTP

  • HTTPS

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請求對應的協議類型,取值範圍:

  • HTTP

  • HTTPS

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方式。

健全狀態檢查1

參數

描述

時間設定

  • 延遲時間:容器啟動多久後開始檢查。

  • 逾時時間:檢查的逾時等待時間,如果逾時,則視為檢查失敗。

檢查方式

根據需要選擇檢查方式。

  • 命令列指令碼:探針在容器內執行命令,並檢查命令退出的狀態代碼,如果狀態代碼為0,則表示檢查成功。

  • HTTP請求方式:探針向容器發送HTTP請求,如果返回狀態代碼符合以下要求:200≤狀態代碼<400,則表示檢查成功。

命令列指令碼

當檢查方式為命令列指令碼時,需要配置在容器內執行的命令列指令碼。

HTTP請求方式

當檢查方式為HTTP請求方式時,需要配置HTTP Get請求包含的路徑、連接埠和協議。

配置樣本

建立一台設定了Liveness Probe和Readiness Probe的ECI執行個體,然後類比服務異常,以查看探針的配置效果。

  1. 調用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
  2. Elastic Container Instance控制台查看ECI執行個體事件。

    ECI執行個體建立成功後,單擊執行個體ID可開啟執行個體詳情頁面。在事件頁簽下查看執行個體事件,可以看到容器正常啟動。

    健全狀態檢查2

  3. 串連容器。具體操作,請參見串連ECI執行個體

  4. 修改Nginx監聽連接埠,類比服務異常。

    1. 修改Nginx監聽連接埠。

      說明

      本樣本使用的Nginx鏡像環境中沒有安裝vim,執行vi命令前需執行apt-get updateapt-get install vim安裝vim。

      vi /etc/nginx/conf.d/default.conf

      將監聽連接埠從80改為8080,樣本如下:

      健全狀態檢查2.png

    2. 重啟Nginx。

      nginx -s reload
  5. 查看探針的生效情況。

    重啟Nginx幾秒後,容器會自動進行重啟。此時查看執行個體事件,可以看到在Liveness Probe和Readiness Probe檢查失敗後,容器進行了重啟。

    健全狀態檢查4