Я запускаю поды в кубернетах (1.17.0), которые записывают логи в стандартный вывод. Эти стручки будут расти еще долго. Я использую promtail для сбора логов и отправки в хранилище локи. Таким образом, я могу настроить хранение журналов, например, за последние 7 дней.
Однако я не совсем понимаю, как Kubernetes отслеживает эти журналы? Я знаю, что kubernetes удаляет журналы при выселении пода, но мои поды не будут выселены. Это означает, что kubernetes будет хранить все журналы, и даже SSD узла будет заполнен? Как я могу настроить кубернетес на удаление старых логов?
Глядя на Архитектура журналирования из официальной документации k8s есть несколько вариантов:
Первый ведение журнала на уровне узла:
Kubernetes в настоящее время не отвечает за ротацию журналов, но инструмент развертывания должен создать решение для решения этой проблемы. Например, в кластерах Kubernetes, развернутых
kube-up.sh
сценарий, естьlogrotate
инструмент настроен на работу каждый час. Вы также можете настроить среду выполнения контейнера для автоматической ротации журналов приложения, например, с помощью Dockerlog-opt
. вkube-up.sh
скрипт, последний подход используется для образа COS на GCP, а первый подход используется в любой другой среде. В обоих случаях по умолчанию выполняется ротация, когда размер файла журнала превышает 10 МБ.
Второй - это контейнер с коляской с агентом регистрации:
Контейнеры Sidecar также могут использоваться для ротации файлов журналов, которые не могут быть повернуты самим приложением. Примером этого подхода является небольшой контейнер, периодически запускающий logrotate. Однако рекомендуется использовать stdout и stderr напрямую, а политики ротации и хранения оставить для kubelet. Хороший пример логротатора можно найти Вот.
В качестве альтернативы вы всегда можете настроить политику хранения журналов на уровне докера, указав соответствующие флаги. Проверить докер документы для этого.