由于使用 systemd 作为 cgroup 驱动程序而导致日志泛滥
在 kubelet 和 docker 中使用 systemd
cgroups 驱动程序时,将出现消息泛滥。
症状
-
日志消息泛滥,具有以下状态:
systemd[1]: libcontainer-29519-systemd-test-default-dependencies.scope: Scope has no PIDs. Refusing. systemd[1]: libcontainer-29519-systemd-test-default-dependencies.scope: Scope has no PIDs. Refusing. systemd[1]: Created slice libcontainer_29519_systemd_test_default.slice. kubelet[6547]: W1209 03:04:49.649981 6547 container.go:422] Failed to get RecentStats("/libcontainer_29519_systemd_test_default.slice") while determining the next housekeeping: unable to find data in memory cache systemd[1]: Removed slice libcontainer_29519_systemd_test_default.slice. systemd[1]: libcontainer-29554-systemd-test-default-dependencies.scope: Scope has no PIDs. Refusing. systemd[1]: libcontainer-29554-systemd-test-default-dependencies.scope: Scope has no PIDs. Refusing. systemd[1]: Created slice libcontainer_29554_systemd_test_default.slice. systemd[1]: Removed slice libcontainer_29554_systemd_test_default.slice. systemd[1]: libcontainer-29561-systemd-test-default-dependencies.scope: Scope has no PIDs. Refusing. systemd[1]: libcontainer-29561-systemd-test-default-dependencies.scope: Scope has no PIDs. Refusing. systemd[1]: Created slice libcontainer_29561_systemd_test_default.slice. kubelet[6547]: W1209 03:04:50.591527 6547 container.go:523] Failed to update stats for container "/libcontainer_29561_systemd_test_default.slice": open /sys/fs/cgroup/memory/libcontainer_29561_systemd_test_default.slice/memory.use_hierarchy: no such file or directory, continuing to push stats
原因
-
从社区的讨论看,此问题是由 runc 为检查 systemd 功能而创建了空的 cgroup 所导致的。
-
有关更多详细信息,请参阅:
https://github.com/opencontainers/runc/blob/master/libcontainer/cgroups/systemd/apply_systemd.go#L123
解决问题
由于此问题不影响容器指标,因此仅需配置 rsyslog 来忽略此类泛滥的日志。
rsyslog 的配置文件位于 /etc/rsyslog.conf
或 /etc/rsyslog.d/*.conf
文件中。
要忽略先前的错误消息:
应该在消息收集命令之前添加 :rawmsg, contains, "libcontainer" ~
,例如,
*.info;mail.none;authpriv.none;cron.none /var/log/messages
。
然后,重新启动 rsyslog 服务,可以忽略此消息泛滥问题。