docker - 使用 journald 日志记录驱动程序破坏 kubernetes pod 日志记录
问题描述
看起来 journald pod 日志记录('kubectl logs' 命令)不适用于 kubernetes v1.18.x。有没有办法让它与 v1.18.x 一起工作?我已经设置了一个多节点集群,将 docker 日志驱动程序作为“journald”(使用 /etc/docker/daemon.json)并使用带有拉取方法的 systemd-journal-gatewayd 来聚合历史日志。但是,我对能够使用 'kubectl logs' 或 'kubectl logs -l 'app=label' --prefix -f' (对于集群范围的日志)来跟踪当前日志非常感兴趣。
# kubectl version
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.3", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.3", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
# docker version
Client:
Version: 18.03.1-ce
API version: 1.37
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:20:16 2018
OS/Arch: linux/amd64
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version: 18.03.1-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:23:58 2018
OS/Arch: linux/amd64
Experimental: false
# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
运行“kubectl logs”会出现以下错误:
# kubectl logs <pod-name>
failed to try resolving symlinks in path "/var/log/pods/default_<pod-name>_xxxx/<container-name>/0.log": lstat /var/log/pods/default_<pod-name>_xxxx/<container-name>/0.log: no such file or directory
解决方案
更改日志记录驱动程序后,日志的位置已更改为主机的日志。到目前为止,docker 可以检索日志,但您必须让 kubelet 知道更改。
你可以通过传递--log-dir=/var/log
给 kubelet 来做到这一点。添加标志后,您已运行systemctl daemon-reload
并重新启动 kubelet。它必须在所有节点上完成。
推荐阅读
- apache - 用于 Web 服务器身份验证的自定义前端(替代 Apache)
- php - 在数组php中拆分段落
- xamarin.ios - 如何为 xamarin.ios 创建 nuget 包
- html - 很难修复具有动态内容的 div 的高度
- java - 尝试将表单连接到控制器时出现 Spring MVC Thymeleaf 错误
- powershell - 什么是 List`1 对象?
- javascript - 无法在 PHP 中读取/传递 JS 值到服务器
- reactjs - react-snap 有时只抓取一个页面
- swift4 - Xcode 10 麻烦:如何将应用程序的构建放入存档面板中,然后将其加载到 App Store Connect 站点上?
- python - 类成员也在 python 中创建实例成员