Kubernetes CKA課程筆記 63
考量到以下狀況,在Pod剛建立的時候
其中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是否正常,並重啟
- 簡單的原理就是做一個小程式可能每5秒Ping到Container一次等等方式
- 來確認Container內的app是否有回應
- 要做到確認總共有以下三種方式:
- exec probe(探查)
- TCP probe
- http probe
也就是Liveness Probe針對的是Pod運行過程中(i.e. Container已經啟動後)
裡面的Container狀態的持續性檢查
那麼在來延伸的問題是:啟動當下的檢查呢?
針對Pod雖然正常啟動
但是裡面Container是否正常啟動的問題的檢查則是 — Readiness Probe
Readiness Probe:
- 讓K8s知道該Container已經完成啟動,並做好運行準備
- 若沒有Readiness Probe機制,K8s無從得知這個Container是否完成啟動
- 實際上Probe方式跟Liveness Probe同樣都是以下三招:
- exec probe(探查)
- TCP probe
- http probe
唯一差異只是Readiness Probe是在Container內的應用程式啟動時執行探查
而Liveness Probe是在已經運行過程中持續地執行探查
以下實際演練簡單範例如何撰寫Liveness Probe & Readiness Probe設置
首先建立一個Pod的Configuration File:
貼上基本運行Pod內容如下:
首先針對啟動檢查,建立Readiness Probe
考慮到上面有三種方式,我們先選用其中一種=>TCP probe
撰寫如下:
當上面的啟動偵測已經確保Container或說裡面的應用程式完成啟動
接著就是運行正常的週期性偵測接手,所以再填寫以下規則:
以上就建立完成,下面就是執行建立
並且要很快速的確認狀態變化:
課程到這邊結束就移除這個Pod: