How can I get log rotation working inside a kubernetes container/pod?

Tyler Zale picture Tyler Zale · Apr 18, 2019 · Viewed 8.1k times · Source

Our setup:

We are using kubernetes in GCP. We have pods that write logs to a shared volume, with a sidecar container that sucks up our logs for our logging system. We cannot just use stdout instead for this process.

Some of these pods are long lived and are filling up disk space because of no log rotation.

Question: What is the easiest way to prevent the disk space from filling up here (without scheduling pod restarts)?

I have been attempting to install logrotate using: RUN apt-get install -y logrotate in our Dockerfile and placing a logrotate config file in /etc/logrotate.d/dynamicproxy but it doesnt seem to get run. /var/lib/logrotate/status never gets generated.

I feel like I am barking up the wrong tree or missing something integral to getting this working. Any help would be appreciated.

Answer

Vasili Angapov picture Vasili Angapov · Apr 19, 2019

In general, you should write logs to stdout and configure log collection tool like ELK stack. This is the best practice.

However, if you want to run logrotate as a separate process in your container - you may use Supervisor, which serves as a very simple init system and allows you to run as many parallel process in container as you want.

Simple example for using Supervisor for rotating Nginx logs can be found here: https://github.com/misho-kr/docker-appliances/tree/master/nginx-nodejs