我创建了一个可产生数百万条日志行的pod。
但是kubectl logs -f <pod_name>
有时会停止并且输出冻结。
这是我的实验:
kubectl logs --follow=true test-logs-job-13263-t5dbx | tee file1
kubectl logs --follow=true test-logs-job-13263-t5dbx | tee file2
kubectl logs --follow=true test-logs-job-13263-t5dbx | tee file3
我停止在屏幕上接收任何输入后,上述每个过程都被中断(Ctrl+C
。
所以:
$ wc -l file*
106701 file1
106698 file2
106698 file3
320097 total
还值得一提的是,每个文件都包含不同的日志,即在实际执行kubectl logs -f
命令时流式传输的实际日志。
是否存在将要流式传输的最大日志数量限制为上述数量的设置? (〜10700)
我的集群在GKE上很重要。
编辑:出于某种原因,这似乎仅在GKE上发生。当我在另一个k8s群集(katakoda
)上运行相同的实验时,日志流被传输而没有任何问题。
答案 0 :(得分:1)
Kubernetes本身不提供日志记录,而是使用容器引擎提供的内容。如果在普通Docker安装上没有kubernetes的情况下运行,则docker的默认配置是使用json文件驱动程序,并在每个容器中保留10 mb的日志。 参见https://docs.docker.com/config/containers/logging/json-file/ 如果您需要大量日志,请考虑使用中央日志记录基础结构并配置日志转发。 (码头工人也支持此功能,并且有多个日志记录后端,请参见https://docs.docker.com/config/containers/logging/configure/#supported-logging-drivers)
有一个错误报告,日志轮换可能会中断kubectl日志的流传输--follow:https://github.com/kubernetes/kubernetes/issues/28369