Назад | Перейти на главную страницу

Как долго Kubernetes хранит логи pod stdout?

Я запускаю поды в кубернетах (1.17.0), которые записывают логи в стандартный вывод. Эти стручки будут расти еще долго. Я использую promtail для сбора логов и отправки в хранилище локи. Таким образом, я могу настроить хранение журналов, например, за последние 7 дней.

Однако я не совсем понимаю, как Kubernetes отслеживает эти журналы? Я знаю, что kubernetes удаляет журналы при выселении пода, но мои поды не будут выселены. Это означает, что kubernetes будет хранить все журналы, и даже SSD узла будет заполнен? Как я могу настроить кубернетес на удаление старых логов?

Глядя на Архитектура журналирования из официальной документации k8s есть несколько вариантов:

Первый ведение журнала на уровне узла:

Kubernetes в настоящее время не отвечает за ротацию журналов, но инструмент развертывания должен создать решение для решения этой проблемы. Например, в кластерах Kubernetes, развернутых kube-up.sh сценарий, есть logrotate инструмент настроен на работу каждый час. Вы также можете настроить среду выполнения контейнера для автоматической ротации журналов приложения, например, с помощью Docker log-opt. в kube-up.sh скрипт, последний подход используется для образа COS на GCP, а первый подход используется в любой другой среде. В обоих случаях по умолчанию выполняется ротация, когда размер файла журнала превышает 10 МБ.

Второй - это контейнер с коляской с агентом регистрации:

Контейнеры Sidecar также могут использоваться для ротации файлов журналов, которые не могут быть повернуты самим приложением. Примером этого подхода является небольшой контейнер, периодически запускающий logrotate. Однако рекомендуется использовать stdout и stderr напрямую, а политики ротации и хранения оставить для kubelet. Хороший пример логротатора можно найти Вот.

В качестве альтернативы вы всегда можете настроить политику хранения журналов на уровне докера, указав соответствующие флаги. Проверить докер документы для этого.