日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
一個小需求,自動重啟k8s集群中日志不刷新的POD

一個小需求,自動重啟K8S集群中日志不刷新的POD

作者:DevOps筆記 2020-09-02 13:51:12
云計算 日常工作中,所有項目都不是完美的,筆者就經(jīng)常遇到這種情況,pod狀態(tài)是running,但是程序卻沒有響應(yīng)。發(fā)生這種情況的原因有很多種,有可能是因為k8s健康檢查的原因,比如使用ps檢查進(jìn)程;或者是程序內(nèi)部死循環(huán),但是不退出;再或者網(wǎng)絡(luò)閃斷,程序無法重連等等。

k8s

需求

日常工作中,所有項目都不是完美的,筆者就經(jīng)常遇到這種情況,pod狀態(tài)是running,但是程序卻沒有響應(yīng)。發(fā)生這種情況的原因有很多種,有可能是因為k8s健康檢查的原因,比如使用ps檢查進(jìn)程;或者是程序內(nèi)部死循環(huán),但是不退出;再或者網(wǎng)絡(luò)閃斷,程序無法重連等等。

無論什么原因,都會有解決辦法,但是優(yōu)化需要時間,在未完全解決之前,問題不能不解決,于是想到了一個臨時方案,因為筆者公司項目日志是直接打印在stdout的,發(fā)生了程序無響應(yīng)的情況,比較簡單的一個辦法是判斷日志輸出的時間?;诖耍梢院唵螌懸粋€小腳本,發(fā)現(xiàn)日志長時間不輸出的時候,重啟pod。

思路

使用kubectl logs命令查看最后一條日志輸出的時間戳,與服務(wù)器時間對比,差值大于閾值,則重啟相應(yīng)POD。當(dāng)然,這只是一個簡單的思路,并不適用于大部分場景,但是適合筆者公司,因為核心項目請求量很大,但凡是超過1分鐘日志不刷新,基本可以斷定100%出現(xiàn)問題了。

此思路其實也是拋磚引玉,希望能給大家一些靈感,如果有什么更好的辦法,也可以與筆者溝通交流。

簡單實現(xiàn)

shell比較簡單,直接與服務(wù)器交互也比較友好,就是用shell來寫吧。

  
 
 
 
  1. #!/bin/sh 
  2. # 獲取當(dāng)前UTC時間utc_now=`date -u` 
  3. # 將時間轉(zhuǎn)換為timestamptimestamp_now=`date -d "$utc_now" +%s` 
  4. function restart_pod() { 
  5.     for i in `kubectl get pod -n iot|grep PODNAME|awk '{print $1}'`;do 
  6.         for time in `kubectl logs  --tail=1 --timestamps $i -n iot | awk '{print $1}'`;do 
  7.             timestamp_pod=`date -d "$time" +%s` 
  8.             delay=$(($timestamp_now-$timestamp_pod))            echo $i:$delay            if [ "$delay" -ge "30" ];then 
  9.                 echo "Pod $i 30S內(nèi)沒有最新日志產(chǎn)生,重啟pod!" 
  10.                 echo $i                kubectl delete pod $i -n iot --force --grace-period=0 
  11.                 curlwxFunc "Pod $i 30S內(nèi)沒有最新日志產(chǎn)生,重啟pod!(生產(chǎn)環(huán)境)" 
  12.             fi        done    done}function curlwxFunc() { 
  13.     JSON='{ 
  14.             "msgtype": "text", 
  15.             "text": { 
  16.                 "content": "'$1'" 
  17.             } 
  18.         }' 
  19.     curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx' \ 
  20.     -H 'Content-Type:application/json' \ 
  21.     -d "${JSON}" 
  22. }restart_pod 

腳本很簡單,先查詢pod,然后看pod最后一條日志時間,與服務(wù)器時間對比,延遲超過30s就重啟pod,并且調(diào)用企業(yè)微信接口發(fā)一條通知。

后記

此方法也是治標(biāo)不治本,治標(biāo)還需要從源頭解決,不過需要時間,再沒有解決之前,先用這個小腳本抗一抗吧。也歡迎大家拍磚。


分享題目:一個小需求,自動重啟k8s集群中日志不刷新的POD
網(wǎng)站地址:http://m.5511xx.com/article/dhojeoe.html