Ротация журналов, занимающих место на диске в модуле Google Cloud Kubernetes

У нас есть модуль в кластере Google Cloud Platform Kubernetes, записывающий JsonFormatted в StdOut. Это взято Stackdriver из коробки. Однако мы видим, что использование диска модулем только растет и растет, и мы не можем понять, как установить максимальный размер в развертывании для ротации журналов.

Документация по Google Cloud и Kubernetes неясна по этому поводу.

Это только последний час:

Потребление памяти в поде


person chrisva    schedule 06.06.2018    source источник
comment
@chisva Только что столкнулся с той же проблемой. Один двоичный файл в образе с нуля, без ведения журнала файловой системы, только стандартный вывод. Вы поняли это? Дисковая диаграмма когда-нибудь прыгала назад или выравнивалась?   -  person Tom Clift    schedule 28.06.2018


Ответы (1)


Вы уверены, что из-за журналов использование диска модуля является высоким? Если приложение записывает журналы в стандартный вывод, оно не использует дисковое пространство внутри модуля. Все журналы обычно хранятся в файле журнала в файловой системе узла и могут управляться процессом узла logrotate.

Возможно, приложение использует дисковое пространство модуля для чего-то другого, например для временных файлов или отладочной информации?

Вот часть документации, связанная с ротацией журналов:

Ведение журнала на уровне узла:

Все, что контейнерное приложение записывает в stdout и stderr, обрабатывается и куда-то перенаправляется механизмом контейнера. Например, контейнерный движок Docker перенаправляет эти два потока в драйвер ведения журналов, который настроен в Kubernetes для записи в файл в формате json.

Важным аспектом ведения журналов на уровне узла является ротация журналов, чтобы журналы не занимали все доступное хранилище на узле.

В настоящее время Kubernetes не отвечает за ротацию журналов, а инструмент развертывания должен настроить решение для решения этой проблемы. Например, в кластерах Kubernetes, развернутых скриптом kube-up.sh, есть инструмент logrotate, настроенный на запуск каждый час.

Вы также можете настроить среду выполнения контейнера для автоматической ротации журналов приложения, например. с помощью log-opt.

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

Например, подробную информацию о том, как kube-up.sh настраивает ведение журнала для образа COS на GCP, можно найти в соответствующем скрипт.

Вот часть скрипта, связанная с logrotate:

# Installs logrotate configuration files
function setup-logrotate() {
  mkdir -p /etc/logrotate.d/
  # Configure log rotation for all logs in /var/log, which is where k8s services
  # are configured to write their log files. Whenever logrotate is ran, this
  # config will:
  # * rotate the log file if its size is > 100Mb OR if one day has elapsed
  # * save rotated logs into a gzipped timestamped backup
  # * log file timestamp (controlled by 'dateformat') includes seconds too. This
  #   ensures that logrotate can generate unique logfiles during each rotation
  #   (otherwise it skips rotation if 'maxsize' is reached multiple times in a
  #   day).
  # * keep only 5 old (rotated) logs, and will discard older logs.
  cat > /etc/logrotate.d/allvarlogs <<EOF
/var/log/*.log {
    rotate ${LOGROTATE_FILES_MAX_COUNT:-5}
    copytruncate
    missingok
    notifempty
    compress
    maxsize ${LOGROTATE_MAX_SIZE:-100M}
    daily
    dateext
    dateformat -%Y%m%d-%s
    create 0644 root root
}
EOF

}
person VASャ    schedule 06.06.2018
comment
Это представляется не совсем правильным. Ротация журнала выполняется с помощью параметров Docker max-size и max-file. См. github.com/kubernetes/kubernetes/pull/40634. - person Code; 11.03.2020
comment
я могу подтвердить, что приведенное выше верно для образа рабочего узла GKE и COS - person Leo Y; 15.04.2020
comment
@chrisva Это отвечает на ваш вопрос? - person Wytrzymały Wiktor; 03.02.2021