Kubernetes 在它被杀死之前从Pod(容器)获取日志文件?

Kubernetes 在它被杀死之前从Pod(容器)获取日志文件?,kubernetes,openshift,kubernetes-helm,openshift-origin,kubernetes-pod,Kubernetes,Openshift,Kubernetes Helm,Openshift Origin,Kubernetes Pod,我在一个吊舱里有两个容器,一个是DB,一个是应用程序。当我的应用程序容器启动但尚未准备好接受流量时,此时容器会生成一些日志文件,我希望这些日志文件用于进一步的应用程序调查。由于容器未通过准备就绪探测器,并且启动失败,pod将被杀死,因此日志文件也将被删除,因此如何在pod被杀死之前获取这些日志文件???最快的解决方案可能是只将类型为hostPath的卷装载到您的pod上。然后,将此卷绑定到日志目录。 请参阅文档 请记住,这个解决方案肯定不是最干净的。它只是为了调试目的。如何将日志转发到STDOU

我在一个吊舱里有两个容器,一个是DB,一个是应用程序。当我的应用程序容器启动但尚未准备好接受流量时,此时容器会生成一些日志文件,我希望这些日志文件用于进一步的应用程序调查。由于容器未通过准备就绪探测器,并且启动失败,pod将被杀死,因此日志文件也将被删除,因此如何在pod被杀死之前获取这些日志文件???

最快的解决方案可能是只将类型为hostPath的卷装载到您的pod上。然后,将此卷绑定到日志目录。
请参阅文档


请记住,这个解决方案肯定不是最干净的。它只是为了调试目的。

如何将日志转发到STDOUT和STDERR?这将是最干净的解决方案(但是,它需要对代码进行一些更改)。

一种一次性解决方案是在启动应用程序容器之前,在单独的终端中安装并运行以下命令:

stern <pod_name>
船尾

然后,您可以通过管道将输出传输到本地存储器进行进一步分析

您可以使用
oc logs
命令的
-c container
标志获取pod内容器的日志

如果您知道pod中容器的名称,可以使用如下命令获取该容器的日志

{1..100}中i的
;do oc获取pods-o name | grep-v“deploy”| xargs-i oc logs-p{}-c CONTAINER_name;完成


当然,如果您只在一个空项目中运行这个程序,并使用失败的pod,这会很好。

创建一个持久卷并将其装载到容器的日志目录中。即使pod被杀死,您也会得到日志。可用于此任务的卷类型很少有-

  • azure磁盘
  • 主机路径
  • 永久磁盘 最简单的是hostpath,但不是首选
您应该研究如何使用
oc debug
并运行一个实例,在该实例中您可以访问交互式shell。然后,您可以手动运行原始启动命令并观察发生了什么,如果需要,可以使用一个单独的终端来
ocrsh
进入调试盒,跟踪任何基于文件系统的日志。使用文件系统日志是不好的做法,应该发送到stdout/stderr,以便平台能够捕获它们;但是,只需使用
kubectl日志
,您就可以重新尝试升级部署,并在准备就绪检查期间检查日志。