【k8s】python日志在容器内不显示

现象

构建python服务镜像。在使用k8s pod部署时,kubectl logs不显示日志,而过段时间kubectl logs又能够看到日志。

其中,容器内通过

python main.py

启动python服务所有的日志使用print打印。

在使用docker run 启动容器时,docker logs 能够查看日志

根因结论

在k8s启动的pod会触发python print的buffer,导致print不能直接输出到控制台。只有当buffer满了才会输出到控制台

快速解决

参考链接 修改dockerfile,将最后 

python main.py

改为

python -u main.py

根因分析

k8s pod底层继承于docker的deamon机制,即将pid为1的主程序以及其子程序的标准控制台输出追踪,并存储至/var/lib/docker/containers/<容器id>/<容器id>-json.log。

在使用docker logs/kubectl logs进行日志获取

参考链接 

因此在部署python的容器服务时,docker logs/kubectl logs获取不到的主要原因是print的标准控制台输出,产生了buffer,导致控制台输出不及时。解决该缓存问题或者禁止buffer即可

posted @ 2022-04-26 00:41  周周周文阳  阅读(1324)  评论(0编辑  收藏  举报