从Pod(容器)中获取日志文件,然后将其杀死?

时间:2019-08-30 08:22:38

标签: kubernetes openshift kubernetes-helm openshift-origin kubernetes-pod

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

5 个答案:

答案 0 :(得分:0)

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

请记住,此解决方案当然不是最干净的解决方案。只是出于调试目的。

答案 1 :(得分:0)

转发到STDOUT和STDERR的日志怎么样?那将是最干净的解决方案(但是,它需要对代码进行一些更改)。 https://kubernetes.io/docs/reference/kubectl/cheatsheet/#interacting-with-running-pods

答案 2 :(得分:0)

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

stern <pod_name>

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

答案 3 :(得分:0)

您可以使用 for dict in json["services"].arrayValue { arrServices.append( Services( id: dict["id"].stringValue, name: dict["name"].stringValue, properties: dict["properties"].arrayValue.map { Properties( id: $0["id"].stringValue, name: $0["name"].stringValue ) } ) ) } 命令的-c CONTAINER标志来获得容器内容器的日志。

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

oc logs

如果只在出现故障的Pod中在空项目中运行它,那当然会很好。

答案 4 :(得分:0)

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

  • 天蓝色磁盘
  • 主机路径
  • gce永久磁盘 最简单的是hostpath,但不是首选。