kubernetes kubelet 记录到文件和 logrotate

kubernetes kubelet 记录到文件和 logrotate

kubelet 有一个选项可以将日志文件存储在 log-dir 中(https://github.com/kubernetes/kubernetes/issues/21248)。

我使用选项启动 kubelet --logtostderr=false --log-dir=/var/log/kubelet(我已经创建了目录/var/log/kubelet),并且确实看到了以 格式kubelet.(hostname).root.log.(date)生成的日志文件/var/log/kubelet

就我而言,我看到三个如下所示的文件:

kubelet.hostname.root.log.ERROR.20180301-152321.161945
kubelet.hostname.root.log.INFO.20180301-152320.161945
kubelet.hostname.root.log.WARNING.20180301-152320.161945

此外,还会为每个 ERROR、INFO 和 WARNING 日志文件创建一个指向最新日志文件的符号链接:

kubelet.ERROR -> kubelet.hostname.root.log.ERROR.20180301-152321.161945
kubelet.INFO -> kubelet.hostname.root.log.INFO.20180301-152320.161945
kubelet.WARNING -> kubelet.hostname.root.log.WARNING.20180301-152320.161945

我的问题是如何轮换和删除超过 5 天的日志文件?这些文件似乎是由生成的glog,但似乎虽然glog轮换了日志文件,但它不支持删除旧日志文件(https://github.com/google/glog/issues/36)。

我知道 logrotate,但是文件应该有一个固定的文件名才能通过 logrotate 进行轮换。

有没有办法让 kubelet 记录文件并进行适当的日志轮换和删除旧文件?

答案1

Kubernetes 不提供内置日志轮换,但许多工具都提供此功能。

根据官方日志架构

节点级日志记录的一个重要考虑因素是实现日志轮换,以便日志不会占用节点上的所有可用存储空间。Kubernetes 不负责轮换日志,而是由部署工具设置解决方案来解决这个问题。例如,在通过脚本部署的 Kubernetes 集群中kube-up.sh,有一个 日志旋转配置为每小时运行一次的工具。您还可以设置容器运行时来自动轮换应用程序的日志。

例如,您可以kube-up.sh 在相应的 GCP 中找到有关如何设置 COS 镜像日志记录的 详细信息配置帮助脚本

相关内容