在停止旧Pod并重新启动新Pod时,请考虑升级Kubernetes部署。我们有运行tomcat的Pod,已连接到MySQL数据库。
tomcat一旦收到stop命令,它将开始停止应用程序。但是,仍然有一些任务正在运行,并且失去与数据库的连接会导致引发大量异常。没关系,因为应用程序不再执行任何操作。我的问题是,这会用致命错误“滥发”我们的日志,并且很难区分哪些异常是相关的,哪些是由应用程序停止引起的。
其中一种例外是:
java.lang.IllegalStateException:非法访问:此Web应用程序 实例已经停止。不能加载 [sun.reflect.NativeMethodAccessorImpl]。以下堆栈跟踪是 出于调试目的以及尝试终止 导致非法访问的线程。
是否有防止此类异常记录的方法?发送停止信号后是否可以立即停止记录?
答案 0 :(得分:0)
您应该使用流利的方式管理日志记录,然后使用exclude filter作为例外日志。无法使用kubernetes或容器引擎来过滤标准输出上显示的内容。
答案 1 :(得分:0)
kubernetes提供了Pod的生命周期回调来处理此类情况,您可以执行自定义脚本以使用PreStop
回调e.g
apiVersion: v1
kind: Pod
metadata:
name: lifecycle-demo
spec:
containers:
- name: lifecycle-demo-container
image: nginx
lifecycle:
preStop:
exec:
command: [" your custom command to delete log entries"]