【问题标题】:Where exactly do the logs of kubernetes pods come from (at the container level)?kubernetes pod 的日志究竟来自哪里(在容器级别)?
【发布时间】:2020-03-02 03:15:35
【问题描述】:

我希望将一些日志从使用 kubectl exec 运行的命令重定向到该 pod 的日志,以便可以使用 kubectl logs <pod-name>(或者实际上是 /var/log/containers/<pod-name>.log)读取它们。我可以在运行命令时看到我需要的日志作为输出,它们存储在正在运行的容器内的一个单独的日志目录中。

将输出(即>> logfile.log)重定向到我认为镜像kubectl logs <pod-name> 的文件不会更新该容器的日志,也不会重定向到标准输出。

当调用kubectl logs <pod-name> 时,我的理解是kubelet 从它的内部/var/log/containers/ 目录中获取它们。但是是什么决定了哪些日志存储在那里?日志存储在任何其他 docker 容器中的过程是否相同?

有没有办法检查/跟踪日志记录过程,或确定这些日志的来源?

【问题讨论】:

    标签: docker logging kubernetes containers kubectl


    【解决方案1】:

    来自 pod 中容器的 STDOUTSTDERR 的日志被捕获并存储在 /var/log/containers 中的文件中。这是运行kubectl log 时呈现的内容。

    为了了解为什么在运行kubectl log 时不显示 kubectl exec 运行的命令的输出,让我们通过一个示例来看看它是如何工作的:

    首先启动一个运行 ubuntu 且永远处于休眠状态的 pod:

    $> kubectl run test --image=ubuntu --restart=Never -- sleep infinity
    

    执行进去

    $> kubectl exec -it test bash
    

    从容器内部看到,正在捕获的是 PID 1 的 STDOUTSTDERR。当您在容器中执行 kubectl exec 时,会创建一个与 PID 1 并存的新进程:

    root@test:/# ps -auxf
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         7  0.0  0.0  18504  3400 pts/0    Ss   20:04   0:00 bash
    root        19  0.0  0.0  34396  2908 pts/0    R+   20:07   0:00  \_ ps -auxf
    root         1  0.0  0.0   4528   836 ?        Ss   20:03   0:00 sleep infinity
    

    重定向到STDOUT 不起作用,因为/dev/stdout 是访问它的进程的符号链接(/proc/self/fd/1 而不是/proc/1/fd/1)。

    root@test:/# ls -lrt /dev/stdout
    lrwxrwxrwx 1 root root 15 Nov  5 20:03 /dev/stdout -> /proc/self/fd/1
    

    为了查看使用 kubectl exec 运行的命令的日志,需要将日志重定向到 kubelet 捕获的流(STDOUT 和 pid 1 的 STDERR)。这可以通过将输出重定向到/proc/1/fd/1来完成。

    root@test:/# echo "Hello" > /proc/1/fd/1
    

    退出交互式 shell 并使用 kubectl logs 检查日志现在应该会显示输出

    $> kubectl logs test
    Hello
    

    【讨论】:

    • 谢谢!
    • 这个答案应该被接受,谢谢!
    猜你喜欢
    • 2018-06-03
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 2019-03-08
    • 2019-07-21
    • 2011-07-11
    相关资源
    最近更新 更多