kubernetes replicaSet 关闭策略

kubernetes replicaSet 关闭策略

Kubernetes 在副本集倒计时中使用 TERM 信号。
这对我的应用程序来说非常危险。
我使用 Tomcat 应用程序服务器,该应用程序服务器有自己的关闭机制来终止应用程序服务器。
当我向 jvm 发送操作系统(Linux)信号(9,15,...)时,JVM 不知道如何处理 jvm 内的线程,因此线程在成功完成之前被杀死。

Request -----> BackEnd API -----> [Process] -----> Response
                                      ^   
                   Send TERM (Signal) while thread doing Process

有没有办法改变kubernetes容器关闭机制?
我想要 kubernetes 使用:

catalina.sh stop

答案1

实现此目的的一种方法是使用 dumb-init。

构建容器时,dumb-init 通常是一个很好的做法,可以处理僵尸等问题。在您的情况下,它还允许重新映射信号。

在你的 Dockerfile 中,你会有类似的内容

CMD ["dumb-init", "--rewrite", "15:28", "/app/start.sh"]

查了一下kill -lSIGINT应该是号码15

然后,在您的启动脚本中,您可以捕获SIGWINCH( 28) 信号:

#!/bin/sh

trap "cd /app ; catalina.sh stop" SIGWINCH

[your startup script]
exec $JAVA_HOME/bin/java ...

编辑,我可以看到另一个答案被接受:当然,容器生命周期挂钩听起来不错。

一方面,它们已经存在大约一年了:可能无法使用,具体取决于您的集群版本。

然后,您会意识到它们仅在 API 驱动的终止上运行,这可能是一个问题。

答案2

Kubernetes 生命周期是解决此类问题的良好解决方案:
容器生命周期挂钩

相关内容