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

Kubernetes - How to get pod logs within container

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

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

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

 $kubectl logs -f my_pod >> logs.txt

并获取 pod 的日志。

但是我如何让一个容器读取同一 pod 中另一个容器的日志?

我对 dockers 做了类似的事情: 我挂载了主机docker的docker.sock,做了$docker logs -f app_container >> logs.txt 但我不能(据我所知)将 kubectl 挂载到 pod 中的容器,以 运行 kubectl 命令。

那你觉得我该怎么做?

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

首选的解决方案可能是使用某种 logshipper 或 sidecar 从标准输出中抓取日志

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

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

基本上你可以使用curl做如下请求:

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