五分鐘 k8s 實戰-應用探針

Probe.png

今天進入 kubernetes 的運維部分(並不是運維 kubernetes,而是運維應用),其實日常我們大部分使用 kubernetes 的功能就是以往運維的工作,現在雲原生將運維和研發關係變得更緊密了。

今天主要講解 Probe 探針相關的功能,探針最實用的功能就是可以控制應用優雅上線。

就緒探針

舉個例子,當我們的 service 關聯了多個 Pod 的時候,其中一個 Pod 正在重啓但還沒達到可以對外提供服務的狀態,這時候如果有流量進入。

那這個請求肯定就會出現異常,從而導致問題,所以我們需要一個和 kubernetes 溝通的渠道,告訴它什麼時候可以將流量放進來。
image.png
比如如圖所示的情況,紅色 Pod 在未就緒的時候就不會有流量。

使用就緒探針就可以達到類似的效果:

livenessProbe:  
  failureThreshold: 3  
  httpGet:  
    path: /ping  
    port: 8081  
    scheme: HTTP  
  periodSeconds: 3  
  successThreshold: 1  
  timeoutSeconds: 1

這個配置也很直接:

  • 配置一個 HTTP 的 ping 接口
  • 每三秒檢測一次
  • 失敗 3 次則認爲檢測失敗
  • 成功一次就認爲檢測成功

但沒有配置就緒探針時,一旦 Pod 的 Endpoint 加入到 service 中(Pod 進入 Running 狀態),請求就有可能被轉發過來,所以配置就緒探針是非常有必要的。

啓動探針

而啓動探針往往是和就緒探針搭配幹活的,如果我們一個 Pod 啓動時間過長,比如超過上面配置的失敗檢測次數,此時 Pod 就會被 kubernetes 重啓,這樣可能會進入無限重啓的循環。

所以啓動探針可以先檢測一次是否已經啓動,直到啓動成功後纔會做後續的檢測。

startupProbe:  
  failureThreshold: 30  
  httpGet:  
    path: /ping  
    port: 8081  
    scheme: HTTP  
  periodSeconds: 5  
  successThreshold: 1  
  timeoutSeconds: 1

我這裏兩個檢測接口是同一個,具體得根據自己是實際業務進行配置;
比如應用端口啓動之後並不代表業務已經就緒了,可能某些基礎數據還沒加載到內存中,這個時候就需要自己寫其他的接口來配置就緒探針了。

image.png

所有關於探針相關的日誌都可以在 Pod 的事件中查看,比如如果一個應用在啓動的過程中頻繁重啓,那就可以看看是不是某個探針檢測失敗了。

存活探針

存活探針往往是用於保證應用高可用的,雖然 kubernetes 可以在 Pod 退出後自動重啓,比如 Pod OOM;但應用假死他是檢測不出來的。

爲了保證這種情況下 Pod 也能被自動重啓,就可以配合存活探針使用:

livenessProbe:  
  failureThreshold: 3  
  httpGet:  
    path: /ping  
    port: 8081  
    scheme: HTTP  
  periodSeconds: 3  
  successThreshold: 1  
  timeoutSeconds: 1

一旦接口響應失敗,kubernetes 就會嘗試重啓。

image.png

總結

image.png

以上探針配置最好是可以在研效平臺可視化配置,這樣維護起來也比較簡單。

探針是維護應用健康的必要手段,強烈推薦大家都進行配置。

本文的所有源碼在這裏可以訪問:
https://github.com/crossoverJie/k8s-combat

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章