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
我的 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