k8s tomcat 进程 killed 访问 nginx 502 问题

2021-10-18 15:48:24 +08:00
 dunhanson

外部 nginx->ingress->service->pod

dockerfile 启动 catalina.sh 就不会生成 catalina.out 问题

所以第一版的 dockerfile 是这样的

第一版会存在可能 tomcat 进程挂了,但是容器没有挂导致流量会正常过来,导致用户访问返回 nginx 502 错误

sh /usr/local/tomcat/bin/startup.sh
tee /opt/health.sh <<-'EOF'
while true
do
 if test $( ps -aux | grep java | grep tomcat | wc -l ) -eq 0
 then
  ps -aux | grep catalina.out | grep -v grep | awk '{print$2}' | xargs kill -9
 fi
done
EOF
sh /opt/health.sh &
tail -f /usr/local/tomcat/logs/catalina.out

第二版做了改进,增加了一个脚本去进行健康检查(如果 tomcat 进程挂了就结束 tail 进程)

sh /usr/local/tomcat/bin/startup.sh
tee /opt/health.sh <<-'EOF'
while true
do
 if test $( ps -aux | grep java | grep tomcat | wc -l ) -eq 0
 then
  ps -aux | grep catalina.out | grep -v grep | awk '{print$2}' | xargs kill -9
 fi
done
EOF
sh /opt/health.sh &
tail -f /usr/local/tomcat/logs/catalina.out

第二版暂时没发现什么问题,不晓得还有没有其他更简便的方式?

2224 次点击
所在节点    Kubernetes
29 条回复
defunct9
2021-10-18 16:01:33 +08:00
chendy
2021-10-18 16:06:11 +08:00
@defunct9 +1 直接在前台运行 tomcat 就可以了
dunhanson
2021-10-18 16:07:17 +08:00
@defunct9 这样没有 catalina.out 日志文件
liuhan907
2021-10-18 16:17:08 +08:00
你都 k8s 了,直接挂一个探针不就行了?
dunhanson
2021-10-18 16:23:43 +08:00
@liuhan907 探针有加,不适用于这种场景,本身的探针是用来检查假死的情况
dunhanson
2021-10-18 16:25:16 +08:00
@liuhan907 或者说探针可以,但是只能添加一种,所以有局限性
gengchun
2021-10-18 16:37:38 +08:00
@dunhanson ?什么意思,直接加 readiness probes 不就好了吗?
davinci
2021-10-18 16:51:45 +08:00
完全可以把你的检测脚本做成一个自定义探针,让 kubelet 去执行
dier
2021-10-18 17:00:11 +08:00
#4 你要是多看一下官方关于“存活、就绪和启动”的探针配置说明就不会有这样的想法了
defunct9
2021-10-18 17:08:02 +08:00
@dunhanson 你的理解有误吧。容器就是一个不会掉下去的进程,你把 tomcat 扔到后台,还生成 catalina.out 日志文件。浪费感情啊,tomcat 跑前台,标准输出就是 catalina.out 的内容。符合实践啊。还再造个脚本探测,不若你 tomcat 加一个 ok.jsp ,从外部 probe 不是更好?
liuhan907
2021-10-18 17:39:47 +08:00
@dunhanson 我不能理解,你那个脚本不就是个蹩脚版的探针么。。
salmon5
2021-10-18 19:50:24 +08:00
/usr/local/tomcat/bin/catalina.sh run >> /usr/local/tomcat/logs/catalina.out 2>&1
liuxu
2021-10-18 20:00:32 +08:00
1 楼和 10 楼是正解,容器就是应该运行一个前端进程,而不是 daemon 方式

存活 k8s 有 livenessProbe 参数

你目前就是典型的常规物理机运维方式迁移到 k8s 的不适应阶段,不仅是运维方式,还有好些程序 /语言 runtime 的配置参数都应该调整,k8s 还是有很多和常规运维有差异的地方,我一直在想着专门为这个写一个专题
dunhanson
2021-10-18 21:21:54 +08:00
@gengchun 就是我启动探针和存活探针已经有写了,楼下的回复应该可以
dunhanson
2021-10-18 21:23:07 +08:00
@liuhan907 哈哈 是的,今天晚上上线还发现一个问题,没加 sleep 1s,导致负载有点高
dunhanson
2021-10-18 21:24:17 +08:00
@salmon5 就是按原来的方式启动 startup.sh ,会生成 catalina.out 文件,也会按日期进行切割
dunhanson
2021-10-18 21:25:04 +08:00
@liuxu 感觉 8 楼的方式比较可行
dunhanson
2021-10-18 21:25:45 +08:00
抱歉各位,下午有事,没能及时回复
salmon5
2021-10-18 21:51:32 +08:00
用 springboot 吧,tomcat war 包老掉牙了
liuxu
2021-10-18 21:52:33 +08:00
@dunhanson 8 楼的方式就是 livenessProbe

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/808560

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX