无法将 Kubernetes pod 中的“stderr”或“stdout”写入 pod 日志

无法将 Kubernetes pod 中的“stderr”或“stdout”写入 pod 日志

我正在尝试调试为什么我的应用程序日志没有被 Promtail 拾取并导入 Loki。

为了排除我的 PHP 应用程序日志记录的复杂性是罪魁祸首,我只是尝试stderr从 pod 的 shell 向流中打印一条消息,以供接收kubectl logs counter。为了进一步降低复杂性,我使用php:fpm-alpine以下配置使用图像启动了一个全新的 pod:

apiVersion: v1
kind: Pod
metadata:
  name: counter
spec:
  containers:
    - name: count
      image: php:fpm-alpine

一旦 pod 准备就绪,我通过运行来访问 shell kubectl exec -it counter -- /bin/ash,然后运行i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done。我可以在 pod 的 shell 中看到以下输出:

0: Sun May 24 13:51:09 UTC 2020
1: Sun May 24 13:51:10 UTC 2020
2: Sun May 24 13:51:11 UTC 2020
3: Sun May 24 13:51:12 UTC 2020
4: Sun May 24 13:51:13 UTC 2020

etc...

但是当我运行kubectl logs counter返回的数据是:

[24-May-2020 13:36:20] NOTICE: fpm is running, pid 1
[24-May-2020 13:36:20] NOTICE: ready to handle connections

我似乎无法让i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done命令的输出显示在 pod 日志中。

答案1

这似乎是由于该图像启用catch_workers_output = yes

将来,尝试在本地运行相同的映像将是一个很好的故障排除机制,看看你是否可以为自己创建一个最小的复制品:也就是说,可以任何该容器下运行的 php 脚本是否会将输出发送到容器的 stderr?

相关内容