k8s叢集自動化維護POD
日常工作中,所有專案都不是完美的,筆者就經常遇到這種情況,pod狀態是running,但是程式卻沒有響應。發生這種情況的原因有很多種,有可能是因為k8s健康檢查的原因,比如使用ps檢查程式;或者是程式內部死迴圈,但是不退出;再或者網路閃斷,程式無法重連等等。 |
日常工作中,所有專案都不是完美的,筆者就經常遇到這種情況,pod狀態是running,但是程式卻沒有響應。發生這種情況的原因有很多種,有可能是因為k8s健康檢查的原因,比如使用ps檢查程式;或者是程式內部死迴圈,但是不退出;再或者網路閃斷,程式無法重連等等。
無論什麼原因,都會有解決辦法,但是最佳化需要時間,在未完全解決之前,問題不能不解決,於是想到了一個臨時方案,因為筆者公司專案日誌是直接列印在stdout的,發生了程式無響應的情況,比較簡單的一個辦法是判斷日誌輸出的時間。基於此,可以簡單寫一個小 ,發現日誌長時間不輸出的時候,重啟pod。
使用kubectl logs 檢視最後一條日誌輸出的時間戳,與伺服器時間對比,差值大於閾值,則重啟相應POD。當然,這只是一個簡單的思路,並不適用於大部分場景,但是適合筆者公司,因為核心專案請求量很大,但凡是超過1分鐘日誌不重新整理,基本可以斷定100%出現問題了。
此思路其實也是拋磚引玉,希望能給大家一些靈感,如果有什麼更好的辦法,也可以與筆者溝通交流。
比較簡單,直接與伺服器互動也比較友好,就是用shell來寫吧。
#!/bin/sh # 獲取當前UTC時間utc_now=`date -u` # 將時間轉換為timestamptimestamp_now=`date -d "$utc_now" +%s` function restart_pod() { for i in `kubectl get pod -n iot|grep PODNAME|awk '{print $1}'`;do for time in `kubectl logs --tail=1 --timestamps $i -n iot | awk '{print $1}'`;do timestamp_pod=`date -d "$time" +%s` delay=$(($timestamp_now-$timestamp_pod)) echo $i:$delay if [ "$delay" -ge "30" ];then echo "Pod $i 30S內沒有最新日誌產生,重啟pod!" echo $i kubectl delete pod $i -n iot --force --grace-period=0 curlwxFunc "Pod $i 30S內沒有最新日誌產生,重啟pod!(生產環境)" fi done done}function curlwxFunc() { JSON='{ "msgtype": "text", "text": { "content": "'$1'" } }' curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx' \ -H 'Content-Type:application/json' \ -d "${JSON}" }restart_pod
很簡單,先查詢pod,然後看pod最後一條日誌時間,與伺服器時間對比,延遲超過30s就重啟pod,並且呼叫企業微信介面發一條通知。
此方法也是治標不治本,治標還需要從源頭解決,不過需要時間,再沒有解決之前,先用這個小指令碼抗一抗吧。也歡迎大家拍磚。
原文地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2721177/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Captial One如何實現Artifactory HA叢集的自動化維護APT
- rac叢集日常維護命令
- vivo大規模Kubernetes叢集自動化運維實踐運維
- vivo大規模 Kubernetes 叢集自動化運維實踐運維
- [自動化]基於kolla的自動化部署ceph叢集
- k8s 自動伸縮 pod(HPA)K8S
- 用Ansible 自動化搭建本地Kubernetes叢集
- Centos7.9 使用 Kubeadm 自動化部署 K8S 叢集(一個指令碼)CentOSK8S指令碼
- 使用開源元件構建自動運維Kafka叢集 - Slack元件運維Kafka
- 叢集自動化工具--Ansible
- Oracle叢集技術 | 叢集的自啟動系列(一)Oracle
- K8S叢集pod容器與宿主機時鐘不一致K8S
- 深度 | 螞蟻金服自動化運維大規模 Kubernetes 叢集的實踐之路運維
- CapitalOne - Artifactory高可用叢集的自動化部署實踐API
- 如何利用python對HTTP代理進行自動化維護?PythonHTTP
- win10 自動維護如何關掉_win10自動維護怎麼關閉Win10
- 基於 Nebula Operator 的 K8s 自動化部署運維K8S運維
- ORACLE 11G 維護視窗和自動維護任務Oracle
- Hadoop叢集初始化啟動Hadoop
- IT運維之自動化運維運維
- kafkaer:基於模板的 Kafka 主題/叢集/ACL 管理自動化Kafka
- 刪除k8s叢集K8S
- k8s 叢集升級K8S
- python管理k8s叢集PythonK8S
- Ansible部署K8s叢集K8S
- 多k8s叢集管理K8S
- kubeadm部署K8S叢集K8S
- k8s之叢集管理K8S
- iOS 元件化開發(四):fastlane實現pod自動化iOS元件化AST
- 達夢資料庫主備實時叢集搭建和維護資料庫
- docker筆記20-初始化k8s叢集Docker筆記K8S
- 使用虛擬機器初始化 K8S 叢集虛擬機K8S
- 用 edgeadm 一鍵安裝邊緣 K8s 叢集和原生 K8s 叢集K8S
- 在 Laravel 中自動維護 slug 欄位Laravel
- 教你如何搭建K8S叢集。K8S
- k8s——搭建叢集環境K8S
- k8s叢集搭建--kubeadm方式K8S
- Kubeadm方式搭建K8S叢集K8S