然而,所有的日志都将转到 /var/log/messages,这使得 centos 系统日志难以阅读。有没有办法让 kubeadm/kubernetes 改为登录到 /var/log/kubernetes?
不,不完全是,但您可以重新配置 Docker 以使用不同的方式登录。
这可能取决于您正在运行的 Docker 版本,但在我的 CentOS 7 VM(几周前)中,我正在运行 Docker 版本 1.13.1,通过 yum 安装。
在查看docs 的1.13 版本和最新的stable Docker 版本时,他们说的或多或少是一样的:
如果不指定日志驱动程序,则默认为 json-file。
我通过yum 安装的 Docker 版本在启动 Docker 时加载的环境文件 (/etc/sysconfig/docker) 中有以下行:
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false'
您可以看到日志记录驱动程序配置为journald,这应该是您在/var/log/messages 中看到来自容器的日志的原因。您可以检查配置了哪些日志记录驱动器:
docker info | grep 'Logging Driver'
日志记录驱动程序决定所有日志的发送位置,在 Docker 中表示来自容器的 stderr 和 stdout。 Docker 支持几个不同的logging drivers,如果你选择配置例如json-file 如果您想从操作系统的角度重新定位日志记录(“更改”日志路径),这可能是最佳选择。每个 Docker 容器都会有自己的日志写入/var/log/pods/<ID>/<NAME>/<LOGFILE>,实际上日志文件是指向/var/lib/docker/containers/<ID>/<ID>-json.log 的符号链接。
如果您确实配置了json-file,则删除--log-driver=journald 标志,而是在文档中提到的/etc/docker/daemon.json 文件中配置它。使用json-file,您可以配置日志轮换和日志文件大小等内容,更多选项请咨询docs。
当通过daemon.json 文件进行配置时,这将成为全局设置,您始终可以使用docker run ... --log-driver 覆盖用于特定容器的日志记录驱动程序。
这些日志记录更改适用于在 Docker 中运行的所有内容,例如移动日志记录。 kubelet 在您的主机上与 Docker 一起运行,您可以查看可配置的 options。默认kubelet stderr 日志通过journald 记录并以/var/log/messages 结束,要更改此行为可以添加--log-dir 选项并指向另一个位置。
最后,我认为最好考虑一下日志传送并调查其他日志驱动程序是否适合您的环境。