kubernetes:kubectl仅流式传输一定数量的日志

时间:2019-05-21 14:25:27

标签: logging kubernetes kubectl

我创建了一个可产生数百万条日志行的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)上运行相同的实验时,日志流被传输而没有任何问题。

1 个答案:

答案 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