pod的端口拒绝连接:Liveness probe failed:dial tcp ,connect:connection refused
昨天在生产环境上发版,发现pod一直起不来,一直到崩溃循环结束:
倒数第三行第四行。
这个本质上是健康检查不通过导致的,意思其实是,pod启动起来,运行给定的镜像,但是在设定的超时时间过后,K8S去检查pod是否健康的时候,发现18015这个端口不通,拒绝连接。K8S判定pod存在问题。
这里为啥是拒绝连接,而不是pod直接死亡呢,是谁拒绝的呢。后面我咨询了下开发,开发表示,这里的健康检查是检查了pod里面的一个关键线程是否成功启动并占用该端口。虽然这个线程没有成功启动,但是主进程并没有结束,那么pod自然不会死亡,如果这个时候将deployment中定义的健康检查给去掉,会发现该pod会一直运行,只不过业务不正常罢了。
解决问题的正确操作是检查代码,打印详细日志进行分析,或者直接回滚版本。
但是我这里发现回滚版本也不行,也不能通过健康检查,后面才发现是业务所依赖的某个外部kafka系统失联,导致kafka初始化失败,进而导致关键线程失败。所以问题根因在于外部kafka以及代码逻辑。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?