生產問題排查:springboot項目啟動時注冊nacos失敗或運行時從nacos閃退

文章目錄

  • 一、引出問題
  • 二、解決方案
    • 1、使用actuator健康檢查
    • 2、項目啟動時判斷nacos是否正常連接
    • 3、k8s設置探針

一、引出問題

生產項目是用k8s部署的,最近經常遇到啟動時注冊不到nacos(查找nacos的host地址找不到),或者運行的好好的,突然也連不上nacos了(同樣是查找nacos的host地址找不到)。

問題定位到,由于網絡或其他問題,導致pod之間的網絡出現了問題,導致根據服務名查找pod失敗。

解決方案:考慮到幾乎無法讓pod自行連接上nacos了,所以考慮應用加上actuator健康檢查,k8s加上探針,如果應用健康檢查不通過,就重啟pod。

二、解決方案

1、使用actuator健康檢查

引入actuator健康檢查,如果nacos注冊失敗,就重啟容器

因為k8s已經支持了健康檢查服務,每隔一段時間就會進行健康檢查。

這里用到了spring-boot-starter-actuator

啟動健康檢查之后,訪問/actuator/health,會提示UP,如果nacos宕機或者網絡連接不上,會提示DOWN,并且返回碼是503:
在這里插入圖片描述
如果nacos正常的話,status是UP,并且返回碼是200:
在這里插入圖片描述

2、項目啟動時判斷nacos是否正常連接

項目啟動時,如果nacos連接不上,就會在main方法拋出異常:
在這里插入圖片描述
根源就是調用nacos -server端的api時發生的異常,但是如果捕捉這個異常,就會對業務代碼侵入性較強。

好在如果發生了這個異常,就會中斷springboot項目的啟動,用健康檢查就非常的合適,此時健康檢查的接口都調用不到。

3、k8s設置探針

參考文檔:https://www.cnblogs.com/shenyuanhaojie/p/16439958.html

官方文檔:https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/

目前的k8s健康檢查,http請求只能根據響應碼來判斷,如果想通過json體來判斷,恐怕需要自定義一個接口了(或者用正則進行解析)。
但是springboot自帶的actuator,是可以根據服務的健康狀態返回不同的響應碼的。

以下是大模型 給的結果,沒驗證過:
在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
所以,要加上restartPolicy配置:

在Kubernetes(簡稱K8s)中,Pod的重啟策略定義了當容器失敗時kubelet如何處理。有三種主要的重啟策略:

Always
這是默認的重啟策略。如果設置了為“Always”,那么無論容器停止運行的原因是什么(無論是正常退出還是異常終止),kubelet都會自動重啟該容器。這意味著只要Pod尚存在,即使容器連續出錯,kubelet也會不斷地嘗試重啟容器。

OnFailure:
如果設置為“OnFailure”,則只有當容器以非0狀態退出碼結束時,kubelet才會嘗試重啟該容器。若容器正常退出(即退出碼為0),kubelet將不會進行重啟操作。

Never:
當設置為“Never”時,kubelet將不會對任何原因導致停止運行的容器進行重啟。一旦容器停止,它將保持停止狀態,直到手動干預或關聯的控制器采取行動。

OnCrash(崩潰時重啟)
該策略主要用于DaemonSet中的Pod。只有在節點重啟或Pod崩潰后,才會觸發Pod的重啟。

綜上所述,每個Pod中的所有容器共享相同的重啟策略,由Pod的spec.restartPolicy字段指定。需要注意的是,當Pod被控制器(如Deployment、StatefulSet等)管理時,即使Pod未明確指定重啟策略,控制器也會根據自身邏輯控制Pod副本的重啟行為。

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/22107.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/22107.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/22107.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

有文字轉語音真人發聲嗎?這5個配音工具堪比真人配音

青春是一首永不老去的歌,它鐫刻在生命的唱片上,永不退色。 每當我們聽到那些熟悉的旋律,心中總會涌起一股暖流,仿佛回到了那個充滿活力和夢想的年代。借助現代科技的力量,我們可以通過文字轉語音軟件,讓這…

.NET集成DeveloperSharp實現圖片的裁剪、縮放、與加水印

🏆作者:科技、互聯網行業優質創作者 🏆專注領域:.Net技術、軟件架構、人工智能、數字化轉型、DeveloperSharp、微服務、工業互聯網、智能制造 🏆歡迎關注我(Net數字智慧化基地),里面…

Apache Doris 基礎 -- 數據表設計(表索引)

1、索引概述 索引用于幫助快速過濾或搜索數據。目前,Doris支持兩種類型的索引:內置智能索引和用戶創建的二級索引。 內置智能索引 排序鍵和前綴索引:Apache Doris基于排序鍵以有序的方式存儲數據。它為每1024行數據創建一個前綴索引。索引中的鍵是當前1024行組的…

github搭建個人博客

準備工作 windows安裝nodejs windows安裝git windows安裝hexo 擁有gitee個人賬戶 配置信息 通過gitee創建博客倉庫 登錄gitee平臺,進入主界面,右側加號,新建倉庫,注意:倉庫名稱和gitee用戶名稱一致 生成/添加 SSH 公…

初級網絡工程師之入門到入獄(一)

本文是我在學習過程中記錄學習的點點滴滴,目的是為了學完之后鞏固一下順便也和大家分享一下,日后忘記了也可以方便快速的復習。 網絡工程師從入門到入獄 前言一、交換機二、路由器三、DHCP(動態主機配置協議)四、路由器配置 DHCP自…

【golang】go語言讀取Excel表格中的數據

導入庫基本用法封裝 在Go語言中,可以使用第三方庫來讀取Excel文件。 常用的庫是github.com/tealeg/xlsx,提供了處理Excel文件的功能。 導入庫 首先,安裝"github.com/tealeg/xlsx"庫。可以通過以下命令在終端中安裝: g…

Transformer系列:Greedy Search貪婪搜索解碼流程原理解析

解碼器預測流程簡述 Encoder-Decoder這類框架需要在解碼器中分別拿到前文已經翻譯的輸入,以及編碼器的輸出這兩個輸入,一起預測出下一個翻譯的單詞。在訓練階段,一個句子通過右移一位的方式轉化為從第二個詞到最后一個詞的逐位預測任務&…

Springboot vue elementui 前后端分離 事故災害案例管理系統

源碼鏈接 系統演示:https://pan.baidu.com/s/1hZQ25cpI-B4keFsZdlzimg?pwdgw48

【Golang】go語言寫入數據并保存Excel表格

導入包創建文件添加表格添加行添加單元格保存文件封裝 導入包 首先,安裝github.com/tealeg/xlsx庫。可以通過以下命令在終端中安裝: go get github.com/tealeg/xlsx創建文件 指定好文件的名字 fileName : "D:\\a.xlsx"再判斷文件是否存在&…

Java集合概述

分類 分為兩大類:Collection接口類和Map接口類 這兩個接口都繼承自一個共同的接口:Iterable接口,意為可迭代的 Iterable接口當中有一個Iterator迭代器接口對象,作為接口的變量(public static final修飾)…

Win10字體模糊?記好這5個方法,解決問題很簡單!

“我的電腦是win10的,不知道是什么原因,電腦字體總是很模糊,大家有什么方法可以解決這個問題嗎?” 在數字時代的浪潮中,Win10以其出色的性能和豐富的功能贏得了廣大用戶的青睞。然而,就像任何一款操作系統一…

廣東電網突破2億千瓦,華火新能源電燃灶引領綠色烹飪“灶”未來

近日,廣東電網統調裝機容量歷史性突破2億千瓦,標志著廣東省在電力發展上邁出了堅實的步伐。這一重大成就不僅彰顯了廣東在能源領域的強勁實力,也為華火新能源電燃灶等綠色技術的普及應用提供了有力的支撐。 廣東電網統調裝機容量的突破&#…

用ffmpeg對視頻添加語音、背景音樂和字幕的方法

先看代碼: ffmpeg.exe ^ -i "D:/test/video.mp4" ^ -i "D:/test/voice.mp3" ^ -i "D:/test/music.mp3" ^ -i "D:/test/voice.srt" ^ -filter_complex "[1:a]volume1.0,asetptsPTS-STARTPTS[a_voice];[2:a]volume0.5,…

【 0 基礎 Docker 極速入門】鏡像、容器、常用命令總結

Docker Images(鏡像)生命周期 Docker 是一個用于創建、部署和運行應用容器的平臺。為了更好地理解 Docker 的生命周期,以下是相關概念的介紹,并說明它們如何相互關聯: Docker: Docker 是一個開源平臺&#…

重生奇跡mu五大王國

勇者大陸王國 奇跡大陸的戰士,他們因為非常重視劍,而且穿著黑色的衣服,所以叫他們魔劍士。古代勇者大陸王國的魔劍士們都是用鎧甲偽裝自己的。但是這些個聯合國統一成一個帝國之后,勇者大陸王國漸漸成為一個小城市。千年之后的現…

數據持久化第七課-URL重寫與Ajax

數據持久化第七課-URL重寫與Ajax 一.預習筆記 1.URL重寫(對網頁地址進行保護) 首先編寫module,實現對網絡地址的處理 其次就是module的配置 最后驗證url重寫技術 2.Ajax數據交互 編寫后端響應數據 處理跨域的配置問題 運行項目得到后端響應數據的地址 編寫前端ajax進行數據請…

程序人生 - 前端拿到后端數據,不能直接用還要再處理,合理嗎?

前言 從后端拿到的 list 是散的,需要前端遍歷 list 根據 item 的某些屬性把同類型的 item 合并到一個 list 中,這樣合理嗎?我覺得這個不是應該在后端完成的嗎? 這種撕扯,讓我想起很久之前的一個笑話。我有個朋友之前…

EXCEL上傳得時候特殊情況

比如excel里面不全是我們需要的,還有一些需要處理EXCEL中的日期,去掉‘-’等 DATA:begin_row TYPE i VALUE 2,begin_col TYPE i VALUE 1,end_row TYPE i VALUE 9999,end_col TYPE i VALUE 90,filename TYPE rlgrap-filename,gt_excel TYPE zalsme…

AI產品經理系列-如何使用kimi快速撰寫用戶故事(含提示詞)

在AI時代,可能人人都可成為產品經理。 之前我們聊過如何使用kimi協助完成產品需求文檔,如何寫競品分析報告,這一篇我們聊聊用戶故事,如何使用kimi協助撰寫產品需求文檔中的用戶故事。 在此之前我們先了解下什么是用戶故事&#…

深入理解Django Serializer及其在Go語言中的實現20240604

深入理解Django Serializer及其在Go語言中的實現 在現代Web開發中,前后端分離已成為主流架構模式。作為開發者,我們經常需要處理數據的序列化和反序列化,以便在前后端之間傳遞數據。在Django中,Serializer是一個強大的工具&#…