kubernetes 将 pod stdout 日志存储多长时间?

kubernetes 将 pod stdout 日志存储多长时间?

我在 kubernetes (1.17.0) 中运行将日志写入 stdout 的 pod。这些 pod 将运行很长时间。我使用 promtail 收集日志并发送到 loki 存储。因此我可以配置存储日志,例如过去 7 天的日志。

但是,我不清楚 kubernetes 如何跟踪这些日志?我知道 kubernetes 在 pod 被驱逐时会删除日志,但我的 pod 不会被驱逐。这意味着 kubernetes 将存储所有日志,最终节点的 SSD 将被填满?如何配置 kubernetes 以删除旧日志?

答案1

看看日志架构从官方的 k8s 文档中可以找到一些选项:

第一个是节点级别的日志记录

Kubernetes 目前不负责轮换日志,而是由部署工具来解决这个问题。例如,在通过脚本部署的 Kubernetes 集群中kube-up.sh,有一个logrotate配置为每小时运行一次的工具。您还可以设置容器运行时来自动轮换应用程序的日志,例如使用 Docker 的log-opt。在脚本中kube-up.sh,后一种方法用于 GCP 上的 COS 映像,前一种方法用于任何其他环境。在这两种情况下,默认情况下,轮换都配置为在日志文件超过 10MB 时进行。

第二个是带有日志代理的 sidecar 容器

Sidecar 容器还可用于轮换应用程序本身无法轮换的日志文件。这种方法的一个例子是定期运行 logrotate 的小型容器。但是,建议直接使用 stdout 和 stderr,并将轮换和保留策略留给 kubelet。可以找到 logrotator 的一个很好的例子这里

或者,你始终可以通过指定适当的标志在 docker 级别设置日志保留策略。查看 docker文档为了那个原因。

相关内容