防止Kubernetes Pod停止记录

时间:2018-08-24 15:04:52

标签: kubernetes google-kubernetes-engine stackdriver google-cloud-stackdriver

在停止旧Pod并重新启动新Pod时,请考虑升级Kubernetes部署。我们有运行tomcat的Pod,已连接到MySQL数据库。

tomcat一旦收到stop命令,它将开始停止应用程序。但是,仍然有一些任务正在运行,并且失去与数据库的连接会导致引发大量异常。没关系,因为应用程序不再执行任何操作。我的问题是,这会用致命错误“滥发”我们的日志,并且很难区分哪些异常是相关的,哪些是由应用程序停止引起的。

其中一种例外是:

  

java.lang.IllegalStateException:非法访问:此Web应用程序   实例已经停止。不能加载   [sun.reflect.NativeMethodAccessorImpl]。以下堆栈跟踪是   出于调试目的以及尝试终止   导致非法访问的线程。

是否有防止此类异常记录的方法?发送停止信号后是否可以立即停止记录?

2 个答案:

答案 0 :(得分:0)

您应该使用流利的方式管理日志记录,然后使用exclude filter作为例外日志。无法使用kubernetes或容器引擎来过滤标准输出上显示的内容。

答案 1 :(得分:0)

kubernetes提供了Pod的生命周期回调来处理此类情况,您可以执行自定义脚本以使用PreStop回调e.g

关闭pod时删除日志。
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"]