生产问题排查: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.mzph.cn/bicheng/22107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

有文字转语音真人发声吗?这5个配音工具堪比真人配音

青春是一首永不老去的歌,它镌刻在生命的唱片上,永不退色。 每当我们听到那些熟悉的旋律,心中总会涌起一股暖流,仿佛回到了那个充满活力和梦想的年代。借助现代科技的力量,我们可以通过文字转语音软件,让这…

.NET集成DeveloperSharp实现图片的裁剪、缩放、与加水印

🏆作者:科技、互联网行业优质创作者 🏆专注领域:.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造 🏆欢迎关注我(Net数字智慧化基地),里面…

Apache Doris 基础 -- 数据表设计(表索引)

1、索引概述 索引用于帮助快速过滤或搜索数据。目前,Doris支持两种类型的索引:内置智能索引和用户创建的二级索引。 内置智能索引 排序键和前缀索引:Apache Doris基于排序键以有序的方式存储数据。它为每1024行数据创建一个前缀索引。索引中的键是当前1024行组的…

初级网络工程师之入门到入狱(一)

本文是我在学习过程中记录学习的点点滴滴,目的是为了学完之后巩固一下顺便也和大家分享一下,日后忘记了也可以方便快速的复习。 网络工程师从入门到入狱 前言一、交换机二、路由器三、DHCP(动态主机配置协议)四、路由器配置 DHCP自…

Transformer系列:Greedy Search贪婪搜索解码流程原理解析

解码器预测流程简述 Encoder-Decoder这类框架需要在解码器中分别拿到前文已经翻译的输入,以及编码器的输出这两个输入,一起预测出下一个翻译的单词。在训练阶段,一个句子通过右移一位的方式转化为从第二个词到最后一个词的逐位预测任务&…

Springboot vue elementui 前后端分离 事故灾害案例管理系统

源码链接 系统演示:https://pan.baidu.com/s/1hZQ25cpI-B4keFsZdlzimg?pwdgw48

Java集合概述

分类 分为两大类:Collection接口类和Map接口类 这两个接口都继承自一个共同的接口:Iterable接口,意为可迭代的 Iterable接口当中有一个Iterator迭代器接口对象,作为接口的变量(public static final修饰)…

Win10字体模糊?记好这5个方法,解决问题很简单!

“我的电脑是win10的,不知道是什么原因,电脑字体总是很模糊,大家有什么方法可以解决这个问题吗?” 在数字时代的浪潮中,Win10以其出色的性能和丰富的功能赢得了广大用户的青睐。然而,就像任何一款操作系统一…

广东电网突破2亿千瓦,华火新能源电燃灶引领绿色烹饪“灶”未来

近日,广东电网统调装机容量历史性突破2亿千瓦,标志着广东省在电力发展上迈出了坚实的步伐。这一重大成就不仅彰显了广东在能源领域的强劲实力,也为华火新能源电燃灶等绿色技术的普及应用提供了有力的支撑。 广东电网统调装机容量的突破&#…

【 0 基础 Docker 极速入门】镜像、容器、常用命令总结

Docker Images(镜像)生命周期 Docker 是一个用于创建、部署和运行应用容器的平台。为了更好地理解 Docker 的生命周期,以下是相关概念的介绍,并说明它们如何相互关联: Docker: Docker 是一个开源平台&#…

重生奇迹mu五大王国

勇者大陆王国 奇迹大陆的战士,他们因为非常重视剑,而且穿着黑色的衣服,所以叫他们魔剑士。古代勇者大陆王国的魔剑士们都是用铠甲伪装自己的。但是这些个联合国统一成一个帝国之后,勇者大陆王国渐渐成为一个小城市。千年之后的现…

数据持久化第七课-URL重写与Ajax

数据持久化第七课-URL重写与Ajax 一.预习笔记 1.URL重写(对网页地址进行保护) 首先编写module,实现对网络地址的处理 其次就是module的配置 最后验证url重写技术 2.Ajax数据交互 编写后端响应数据 处理跨域的配置问题 运行项目得到后端响应数据的地址 编写前端ajax进行数据请…

AI产品经理系列-如何使用kimi快速撰写用户故事(含提示词)

在AI时代,可能人人都可成为产品经理。 之前我们聊过如何使用kimi协助完成产品需求文档,如何写竞品分析报告,这一篇我们聊聊用户故事,如何使用kimi协助撰写产品需求文档中的用户故事。 在此之前我们先了解下什么是用户故事&#…

车牌号码智能监测识别摄像机

车牌号码智能监测识别摄像机是一项革命性的技术,为交通管理和安全提供了全新的解决方案。这种摄像机利用先进的人工智能和图像识别技术,能够实时监测道路上的车辆,并准确识别车辆的车牌号码,为交通管理和安全提供了强有力的支持。…

java 工作排序(Job Sequencing Problem)

给定一个作业数组,其中每个作业都有一个截止期限,如果作业在截止期限之前完成,则可获得相关利润。此外,每个作业都占用一个单位时间,因此任何作业的最小可能截止期限都是 1。如果一次只能安排一项作业,则最…

解决使用Python检查本地网络中运行的Web服务器的问题

如果我们要检查本地网络中运行的 Web 服务器,可以使用 Python 的 socket 模块来进行网络连接测试。以下是一个简单的示例代码,演示如何检查本地网络中运行的 Web 服务器: 1、问题背景 在学习如何使用 Python 时,一位用户希望编写…

从零开始:腾讯云轻量应用服务器上部署MaxKB项目(基于LLM大语言模型的知识库问答系统)

使用腾讯云轻量应用服务器部署和使用MaxKB项目 前言 一, MaxKB介绍 MaxKB是基于LLM大语言模型的知识库问答系统,旨在成为企业的最强大脑。它支持开箱即用,无缝嵌入到第三方业务系统,并提供多模型支持,包括主流大模型…

我们如何收到卫星信号?(导航电文,载波与测距码)

卫星信号 在介绍所有卫星信号之前,首先要明确一些概念: 所有的卫星信号,都是一段电磁波,用户接收的,也是一段电磁波。 但是我们认知中的电磁波,就是一段波,就像我们打出去的交一样&#xff0c…

【UML用户指南】-03-UML的14种图

目录 1、结构图 1、类图(class diagram) 2、对象图(object diagram) 3、构件图 (component diagram) 4、组合结构图 5、包图(package diagram) 6、部署图(deploym…

零基础入门学习Python第二阶04SQL详解03

MySQL 新特性 JSON类型 很多开发者在使用关系型数据库做数据持久化的时候,常常感到结构化的存储缺乏灵活性,因为必须事先设计好所有的列以及对应的数据类型。在业务发展和变化的过程中,如果需要修改表结构,这绝对是比较麻烦和难…