天天看點

dubbo 協定的 K8s pod 存活探針配置

某項目采用微服務架構,dubbo 架構,K8s 方式部署。

其中 HTTP 協定由網關應用統一處理,大部分應用僅提供 dubbo 協定。

應用某個執行個體(pod)狀态異常時,嘗試自動重新開機恢複。

K8s 提供了3種存活探針(livenessProbe),以實作 pod 狀态異常時重新開機。

HTTPGetAction 首先排除了,因為上文我們說了,HTTP 通路由網關統一處理,應用本身沒有 HTTP 協定。

然後是 TCPSocketAction,該探針僅能确認 dubbo 端口是否為監聽狀态,無法實作應用狀态的的撥測。

最後是 ExecAction,該探針執行指令傳回0判斷 pod 存活,非0則根據pod定義的重新開機政策進行後續操作。

dubbo 架構從2.0.5 版本開始,支援通過 telnet 指令互動,我們可以使用 status 指令擷取應用本身即應用依賴的底層服務(注冊中心、資料庫等)的撥測結果。

我們隻需要編寫一個簡單的 shell 腳本,抓取 dubbo 的 status 指令結果,如果是 OK 或 WARN 則傳回0,否則傳回1,就可以使用 ExecAction 了。

pod yaml檔案中關于存活探針的部分如下所示

按 dubbo 官方文檔的說法,telnet 中執行 status 傳回的結果應該和 status -l 中 summary 的結果一緻,實際測試并非如此,建議使用 status -l 

頻繁執行 status -l 可能會有性能上的隐患,參考 https://www.jianshu.com/p/f6376c148f2c

dubbo 官方提供了與 pod 探針對齊的方法(參見下文),但是在我們這個應用中因為網關和其他一些原因限制了 HTTP 協定,是以使用了上文這種替代方案。

每個項目/團隊都會有一些自己的特殊需求,本文隻是提供一種思路,如果有更好的解決方案,歡迎在評論區提出讨論(●ˇ∀ˇ●)

容器探針

https://kubernetes.io/zh/docs/concepts/workloads/pods/pod-lifecycle/#container-probes

Dubbo 與 pod 探針對齊

https://dubbo.apache.org/zh/docs/references/lifecycle/brief/

Dubbo Telnet 指令

https://dubbo.apache.org/zh/docs/v3.0/references/telnet/#status

本文來自部落格園,作者:潘大慶,轉載請注明原文連結:https://www.cnblogs.com/pandaqing/p/15635437.html

繼續閱讀