Kubernetes CKA課程筆記 63

Health Checks with Liveness and Readiness Probes

ZONGRU Li
Nov 22, 2021

考量到以下狀況,在Pod剛建立的時候

其中Pod裡面的Container(鯨魚)起不來(我沒有劃掉整個Pod!!)

我劃掉的是鯨魚=Container,不是整個Pod

但是Pod看起來仍會是Running狀態

並且就目前已知,當Pod crashes,K8s將會把Pod重建

但是如上圖狀況,Container crashes(或狀態異常),K8s並不會知道

而開發者發現時,必須手動執行重啟等復原措施

如上狀況,K8s也提供機制偵測Container層級的狀態,及其重啟等措施

Pod仍然顯示正常且Running(運作中)的狀態下

如何讓K8s知道其實Pod裡面的Container可能已經有問題,甚至已經Crashes

以致使K8s協助我們執行重啟等作業

要解決這個問題,讓K8s知道Container狀況,就需要 — Liveness Probe

Liveness Probe:

  • 只要是先定義好Liveness Probe,
  • K8s就能夠判斷是否裡面app是否正常,並重啟
  • 簡單的原理就是做一個小程式可能每5PingContainer一次等等方式
  • 來確認Container內的app是否有回應
  • 要做到確認總共有以下三種方式:
  1. exec probe(探查)
  2. TCP probe
  3. http probe

也就是Liveness Probe針對的是Pod運行過程中(i.e. Container已經啟動後)

裡面的Container狀態的持續性檢查

那麼在來延伸的問題是:啟動當下的檢查呢?

針對Pod雖然正常啟動

但是裡面Container是否正常啟動的問題的檢查則是 — Readiness Probe

Readiness Probe:

  • K8s知道該Container已經完成啟動,並做好運行準備
  • 若沒有Readiness Probe機制,K8s無從得知這個Container是否完成啟動
  • 實際上Probe方式跟Liveness Probe同樣都是以下三招:
  1. exec probe(探查)
  2. TCP probe
  3. http probe

唯一差異只是Readiness Probe是在Container內的應用程式啟動時執行探查

Liveness Probe是在已經運行過程中持續地執行探查

以下實際演練簡單範例如何撰寫Liveness Probe & Readiness Probe設置

首先建立一個PodConfiguration File:

貼上基本運行Pod內容如下:

開通PORT:80

首先針對啟動檢查,建立Readiness Probe

考慮到上面有三種方式,我們先選用其中一種=>TCP probe

撰寫如下:

當上面的啟動偵測已經確保Container或說裡面的應用程式完成啟動

接著就是運行正常的週期性偵測接手,所以再填寫以下規則:

儲存!

以上就建立完成,下面就是執行建立

並且要很快速的確認狀態變化:

課程到這邊結束就移除這個Pod:

參考課程(reference)

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet