我的吊舱中有两个容器,一个容器是一个应用程序,用于写入日志(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命令。
那么您认为我能做到吗?
答案 0 :(得分:2)
您可以在两个容器上安装一个卷,在“ app”容器上的该卷上写入一个日志文件,然后从另一个容器中的该日志文件读取。
首选解决方案可能是使用某种logshipper或sidecar来从stdout刮取日志
(旁注:您可能永远不应该将docker.sock安装到容器中或尝试从容器中的一个容器运行kubectl到集群,因为本质上是让该容器对集群进行控制,这是安全性恕我直言。 如果出于某种原因仍然需要这样做,请确保集群安全性非常严格)
答案 1 :(得分:0)
您可以使用http请求从内部获取其他pod日志。这是docs
基本上,您可以使用curl
进行以下请求:
GET /api/v1/namespaces/{namespace}/pods/{name}/log