【问题标题】:Kubernetes - How to get pod logs within containerKubernetes - 如何在容器中获取 pod 日志
【发布时间】:2019-07-21 07:08:12
【问题描述】:

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

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

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

 $kubectl logs -f my_pod >> logs.txt

并获取 pod 的日志。

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

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

那么你认为我能做到吗?

【问题讨论】:

    标签: docker kubernetes kubectl


    【解决方案1】:

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

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

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

    【讨论】:

    • 我无法触摸应用容器(使其写入日志文件)。我可以访问 k8s yaml(用于部署)、主机和 sidecar 容器。我可以让应用程序容器写入文件而不接触它吗?
    • @aronot 您可以将 stdout + stderr 重定向到文件。您可以覆盖主应用程序部署的命令/参数。见askubuntu.com/questions/625224/how-to-redirect-stderr-to-a-file
    【解决方案2】:

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

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

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

    【讨论】:

    猜你喜欢
    • 2017-12-24
    • 2019-09-09
    • 1970-01-01
    • 2019-01-20
    • 2020-11-22
    • 2016-07-09
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多