如何在kubernetes容器/吊舱内进行原木旋转?

如何在kubernetes容器/吊舱内进行原木旋转?,kubernetes,google-cloud-platform,logrotate,Kubernetes,Google Cloud Platform,Logrotate,我们的设置: 我们在GCP中使用kubernetes。 我们有将日志写入共享卷的吊舱,还有一个侧车容器,它可以为我们的日志系统吸收日志。 我们不能仅仅使用stdout来代替这个过程 其中一些豆荚寿命很长,并且由于没有日志旋转而填满了磁盘空间 问题: 防止磁盘空间在此被填满的最简单方法是什么(不安排pod重启) 我一直试图在Dockerfile中使用:RUN apt get install-y logrotate安装logrotate,并在/etc/logrotate.d/dynamicproxy

我们的设置:

我们在GCP中使用kubernetes。 我们有将日志写入共享卷的吊舱,还有一个侧车容器,它可以为我们的日志系统吸收日志。 我们不能仅仅使用stdout来代替这个过程

其中一些豆荚寿命很长,并且由于没有日志旋转而填满了磁盘空间

问题: 防止磁盘空间在此被填满的最简单方法是什么(不安排pod重启)

我一直试图在Dockerfile中使用:
RUN apt get install-y logrotate
安装logrotate,并在
/etc/logrotate.d/dynamicproxy
中放置一个logrotate配置文件,但它似乎没有运行<代码>/var/lib/logrotate/status从未生成


我觉得我找错了方向,或者错过了使这项工作发挥作用的关键因素。任何帮助都将不胜感激。

如果您写入文件系统,则创建日志的应用程序应负责轮换。如果您使用logback或log4j运行java应用程序,那么只需进行简单的配置更改。对于其他语言/框架,它通常是类似的

如果这不是一个选项,您可以使用一个专门的工具来处理旋转和管道输出到它。一个例子是


作为最后手段,您可以研究登录到命名管道(FIFO)而不是真正的文件,并让其他进程处理数据的检索和写入,包括旋转。

通常,您应该将日志写入标准输出,并配置日志收集工具,如ELK stack。这是最好的做法

然而,如果您想在容器中作为一个单独的进程运行logrotate,您可以使用Supervisor,它是一个非常简单的初始化系统,允许您在容器中运行任意数量的并行进程


使用Supervisor旋转Nginx日志的简单示例可以在这里找到:

我们最终编写了自己的守护程序,以正确地从节点而不是容器级别收集日志。然后,我们停止从容器写入共享卷,并仅登录到stdout

我们用fluentd来记录周围的日志