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

kubernetes: kubectl only streams a certain amount of logs

我创建了一个产生数百万行日志的 pod。

但是 kubectl logs -f <pod_name> 在某些时候停止并且输出冻结。[​​=17=]

这是我的实验:

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) 上进行相同的实验时,日志流式传输没有任何问题。

Kubernetes 本身不提供日志记录,而是使用容器引擎提供的功能。如果您 运行 在普通 docker 安装中没有 kubernetes,则 docker 的默认配置是使用 json-file 驱动程序并为每个容器保留 10 MB 的日志。 参见 https://docs.docker.com/config/containers/logging/json-file/ 如果您需要大量日志,请考虑使用中央日志记录基础架构并配置日志转发。 (docker 也支持多个日志记录后端,请参阅 https://docs.docker.com/config/containers/logging/configure/#supported-logging-drivers

有一个错误报告,日志轮换会中断 kubectl 日志的流式传输 --follow: https://github.com/kubernetes/kubernetes/issues/28369