Kubernetes-如何在容器中获取pod日志

时间:2019-02-27 14:20:05

标签: docker kubernetes kubectl

我的吊舱中有两个容器,一个容器是一个应用程序,用于写入日志(stdout / stderr),第二个容器是用于读取应用程序容器的日志,并将其写入logs.txt文件。

我的问题是,如何告诉第二个容器读取应用容器的日志?

当我在主机上(使用k8s)时,我可以运行:

 $kubectl logs -f my_pod >> logs.txt

并获取pod的日志。

但是如何告诉一个容器读取同一容器内另一个容器的日志?

我对码头工人做了类似的事情: 我挂载了主机的docker的docker.sock,并做了$docker logs -f app_container >> logs.txt 但是我(据我所知)无法将kubectl安装到pod的容器中,以运行kubectl命令。

那么您认为我能做到吗?

2 个答案:

答案 0 :(得分:2)

您可以在两个容器上安装一个卷,在“ app”容器上的该卷上写入一个日志文件,然后从另一个容器中的该日志文件读取。

首选解决方案可能是使用某种logshipper或sidecar来从stdout刮取日志

(旁注:您可能永远不应该将docker.sock安装到容器中或尝试从容器中的一个容器运行kubectl到集群,因为本质上是让该容器对集群进行控制,这是安全性恕我直言。 如果出于某种原因仍然需要这样做,请确保集群安全性非常严格)

答案 1 :(得分:0)

您可以使用http请求从内部获取其他pod日志。这是docs

基本上,您可以使用curl进行以下请求:

GET /api/v1/namespaces/{namespace}/pods/{name}/log