CentOS 上 Kubernetes 日志管理方案
一 架构与采集方式
- 日志来源与路径:在 Kubernetes 中,容器日志默认写入节点的 /var/log/pods/ 目录,并通过符号链接到 /var/log/containers/*.log;kubectl logs 本质上读取这些主机文件。节点与系统组件日志位于 /var/log/(如 kubelet、kube-proxy)。基于这一机制,通常采用节点级代理统一采集与转发。
- 采集方式对比与选型建议:
- Node 日志代理(推荐):在每个节点以 DaemonSet 部署 Fluentd/Fluent Bit/Filebeat,监听 /var/log/containers/*.log,自动附加 Pod/Namespace/标签 等元数据,集中发送到 Elasticsearch/Loki/Kafka 等后端。优点是与应用解耦、易维护、可扩展;适合大多数生产环境。
- Sidecar 模式:在 Pod 内新增日志容器共享日志卷,适合对特定业务做细粒度处理(如多行堆栈解析、特殊脱敏)。缺点是资源占用随实例数线性增长,维护复杂度高。
- Runtime 接口采集:通过 CRI 日志 API 直接获取容器流,适合平台化/服务网格等深度定制场景,实现复杂、对性能敏感的需求。
二 方案选型与适用场景
- EFK(Elasticsearch + Fluentd/Fluent Bit + Kibana):适合需要全文检索、复杂聚合分析与可视化的企业级场景;Fluentd/Fluent Bit 负责采集与处理,Elasticsearch 负责存储与索引,Kibana 提供查询与仪表盘。
- Loki + Promtail + Grafana:更轻量、低成本,以标签索引为主,与 Prometheus/Grafana 生态无缝联动,适合大规模集群与成本敏感的团队;Promtail 以 DaemonSet 采集 /var/log/containers/*.log 并注入 K8s 元数据。
- Filebeat + Elasticsearch + Kibana:在资源较紧张或小型集群中替代 Fluentd,Filebeat 作为轻量采集器,常配合 DaemonSet 使用,简化部署与运维。
三 快速落地步骤
- Loki + Fluent Bit(轻量方案,推荐上手)
- 添加 Helm 仓库并安装 Loki 与 Grafana(示例为 loki-stack,包含 Promtail):
helm repo add grafana https://grafana.github.io/helm-charts
helm install loki grafana/loki-stack
- 安装 Fluent Bit(DaemonSet),配置后端为 Loki,开启 K8s 元数据采集:
helm repo add fluent https://fluent.github.io/helm-charts
helm install fluentbit fluent/fluent-bit
–set backend.type=loki
–set backend.loki.host=http://loki.loki:3100
–set input.kubernetes.enabled=true
- 在 Grafana 中添加 Loki 数据源,使用 LogQL 查询,例如:{namespace=“dev”, pod=~“my-app.*”} |= “error”。
- EFK(功能完备,适合复杂查询)
- 部署 Elasticsearch(示例为单节点开发模式,生产请配置持久化与资源限额):
kubectl create ns elasticsearch
kubectl apply -f https://raw.githubusercontent.com/elastic/elasticsearch/master/deployments/kubernetes/elasticsearch.yml
- 部署 Fluentd(DaemonSet)采集 /var/log/containers/*.log 并输出到 Elasticsearch:
kubectl create ns fluentd
kubectl apply -f https://raw.githubusercontent.com/fluent/fluentd-kubernetes-daemonset/master/fluentd-daemonset-elasticsearch.yaml
- 部署 Kibana 并访问 http://:5601,在 Kibana 中配置索引模式后即可检索与可视化日志。
四 生产实践与优化要点
- 资源与限流:为采集器设置 CPU/内存 requests/limits,避免节点 OOM;启用 缓冲与重试(如 Fluentd buffer 插件)应对日志洪峰与后端抖动。
- 保留与成本:按日志级别与业务价值设置 保留策略(如业务日志 7 天、审计日志 30 天),对冷数据做 压缩/归档(如对象存储),降低长期存储成本。
- 安全合规:启用 TLS 传输与 RBAC 最小权限;对日志进行脱敏(如 token、密钥),避免敏感信息外泄。
- 解析与多行:针对 Java 堆栈等多行日志配置合适的解析器(如正则/多行模式),确保堆栈可折叠与可检索。
- 可靠性:配置 缓冲、重试、断点续传 与 健康检查,减少日志丢失与采集延迟;对关键业务设置 告警(如 Error 关键字、异常速率)。