我問:「程序有『亞健康狀態』嗎?」html
一個正常的人,應該這樣回答:「什麼?程序,亞健康。。。?你神經病吧?我只據說過人,有亞健康狀態。」node
實際上,‘程序’是有『亞健康狀態』的,這和人有『溼氣』道理同樣。git
『亞健康狀態』是指,程序處於【正常】和【非正常】之間,老司機都知道,shell
最明顯的表現就是:程序表面輸入/輸出正常,但卡頓,或後臺在瘋狂報錯。數據庫
細探緣由,其實是千奇百怪的。這裏不作展開。後端
既然程序有亞健康狀態,那麼容器內運行的程序,也應該有亞健康狀態,也很合理。這就是標題說的『容器亞健康狀態』問題。api
http://www.javashuo.com/article/p-shppgctb-nv.html網絡
上述『容器亞健康狀態』問題,在博客園特例中,我總結以下:架構
最開始,後端數據庫有問題了,致使頁面pod報錯。後端數據庫修復後,頁面表現有時很快,有時卡頓,估計某個pod有問題,沒恢復過來。但因爲pod不少,沒法立馬找出問題pod。猜想cpu100%,可是容器探活正常。或探活有些慢但能經過。負載均衡
老司機都知道,細探緣由,其實是千奇百怪的。
又由於部分容器正常,因此你必須收集全部容器的log。這些『亞健康狀態容器』,也是能經過容器探活的,有時候咱們並不具有詳細探究的條件。這就好像醫生知道從海鮮市場裏出來的不少病人肺有問題了,用常規的藥後也治很差。而你急着解決,手頭上尚未【基因測序】這些個超級手段。
假設100個容器裏頭,有1個『亞健康狀態容器』,這個容器仍是『無症狀』或『症狀不明顯,能過探活』這種,這個問題是不容易解決的。
K8s 1.15版本,提供了滾動重啓的命令。但我趕腳相對而言不輕量。
須要說明的是:
定時重啓能緩解和部分解決這種問題,不能解決全部問題。要想解決全部問題,還得靠壓測,和看日誌,還有調試。
K4t是我業餘時間開發的,容器編排系統。
博客園的問題,提醒了我。我看了k8s的解決方案後,琢磨出了這個問題更好的方案:
即『殺死容器老奶奶』功能,或者叫『最老容器_定時重啓間隔』參數。
這個值默認是7天,最小是1分鐘。值綁定在應用上。
這個參數假設生存時間越長的容器副本,越會出問題。而新run的容器副本,假設沒問題。
也就是說超過這個閾值(1分鐘---7天),就會優雅的重啓1個容器副本。即先不給容器喂流量,超過n分鐘後,再讓容器下崗,繼而重啓容器副本。
若遇到上述『容器亞健康』問題。則調小這個值便可。等過一段時間,容器都優雅重啓了後,再調整回來便可。固然了,個人k4t是有辦法查看,每一個容器的啓動時間的。
注意:
l 定時重啓並不能解決全部問題。要想解決全部問題,還得靠壓測,和看日誌,還有調試。
l 此參數不能理解成『單個容器最大生存時間』。設你的應用有10個容器副本,第一個容器會在7天后重啓,第10個容器在70天才會重啓。
這個參數,看起來跟滾動重啓相似嗎?
K8s有這功能嗎???
k4t即:《kaiiit生產級別的容器編排系統》
https://gitee.com/chuanjiao10/k4t
預計2021年6月發佈alphi1版
中文名:《海賊帝·優秀的怕被沽溝暗殺·黑毛腿》
中文別名:《ps1倚天劍》
這是一套基於《卡死你3000》打造的,全功能,容器集羣的自動化部署、擴容以及運維的平臺。(國產k8s)。它採用開放式架構,具備網絡簡單穩定,使用簡單,腳本操控靈活的特色。
powershell傳教士 業餘時間 做品
羣名稱:k4t官方1羣 羣 號:722528388
問:完美版的k4t項目,由哪幾部分組件構成?
答:
1 master端。 正在開發中,預計2021年6月前發佈alphi1版。
2 node端。已經開發完成,並部分開源免費成爲雛形版。
3 動態負載均衡api網關。(外部)
提供反向代理,和負載均衡功能。用於給一組容器應用,造成統一的ip。
目前基於我編寫的envoy後端增刪腳本。
https://gitee.com/chuanjiao10/envoy_powershell
你也可diy,改爲本身喜歡的。
4 動態dns。(外部)
是非必要組件。K4t集羣,能夠只用負載均衡器api-getway。
用於給一組容器應用,造成統一的服務名字。
目前基於未激活的無圖win2019。固然有圖版win2019也行。你也可diy,改爲本身喜歡的。例如:dnsmasq
「容器固然有亞健康狀態了,容器996也有可能會疲勞呀!這和人有‘溼氣’道理是同樣的」我喃喃道。
K4t的這個參數,讓容器告別996,也有輪流上下班時間了。哈哈,這參數堪稱『大力丸』。有病能治病(好比內存泄漏),無病能防病(好比內存泄漏)。實乃居家旅行、以及運維編排、必備之好手段也!
謝謝觀看。