Kubernetes 在 CentOS 上的日志管理策略
一 总体架构与原则
- 采用“节点级采集 + 集中存储 + 统一检索分析”的架构:在每个节点以 DaemonSet 部署日志代理(如 Fluentd/Fluent Bit),从容器运行时与系统日志目录采集,统一发送到 Elasticsearch 或兼容的日志后端,并用 Kibana 做可视化;在 CentOS 上,容器化组件的日志通常写入节点的 /var/log 或通过 journald 管理,非容器化组件(如部分 Master 组件)也以 journald 为主。Kubernetes 本身不提供集群级日志持久化,需自建集中式方案。为降低侵入性,优先选择节点级代理;如需按应用拆分或读取容器内文件,再考虑 Sidecar。同时应统一日志格式(如 JSON)、为采集守护进程设置资源限制,并启用 RBAC 控制日志访问与审计。
二 采集与存储方案
- 节点级代理(推荐):在每个节点运行一个日志代理的 DaemonSet,从 /var/log/containers/、/var/lib/docker/containers/ 等路径采集容器日志,并注入 Kubernetes 元数据(namespace、pod、container 等)后发送到 Elasticsearch 或云日志服务;此方式对应用无侵入、扩展性好。
- Sidecar 模式:当应用将日志写入文件或需要特殊解析时,可在 Pod 内增加一个日志 Sidecar 读取文件并输出到 stdout/stderr,再由节点代理统一采集;适合少量、特殊需求的应用,避免为每个应用都运行独立代理导致资源开销上升。
- 系统组件与节点日志:对于 kubelet、容器运行时 等非容器化或系统级组件,使用 journald 记录,配合 systemd-journald 配置持久化与轮转;容器化组件与应用则遵循“日志写入 stdout/stderr”的惯例,便于采集与统一处理。
三 本地日志轮转与保留
四 检索分析与运维实践
- 检索分析与可视化:使用 EFK(Elasticsearch + Fluentd/Fluent Bit + Kibana)或托管日志服务集中存储与检索日志;在 Kibana 中创建索引模式、构建仪表盘,实现多租户、多环境的统一观测。
- 快速排障与临时查看:使用 kubectl logs 获取容器日志,常用命令包括:实时查看(kubectl logs -f)、查看上一个容器实例(kubectl logs --previous)、指定容器(kubectl logs -c );多 Pod 聚合可用 kubetail 或 Stern。
- 安全与治理:为日志系统启用 RBAC 最小权限;统一日志字段与结构(如 timestamp、level、msg、trace_id 等),便于解析与聚合;为日志代理设置 requests/limits,避免因突发流量导致节点资源紧张。