Debian 上 Kubernetes 日志管理实操指南
一 基础与快速排查
- 统一将应用日志输出到stdout/stderr,便于容器运行时采集与聚合。
- 使用 kubectl 快速定位问题:
- 查看实时日志:kubectl logs -f
- 多容器 Pod:kubectl logs -c
- 查看最近 N 行:kubectl logs | tail -n 100
- 查看上一个崩溃容器:kubectl logs --previous
- 组件日志级别按需调整(如 kube-apiserver 等),在静态 Pod 清单的启动参数中添加**–v=2/4**以平衡信息量与噪音。
二 集中化日志方案选型与部署
| 方案 |
组件与部署 |
适用场景 |
资源开销 |
备注 |
| EFK(Elasticsearch + Fluentd + Kibana) |
Fluentd 以 DaemonSet 采集节点日志,写入 Elasticsearch,用 Kibana 可视化 |
需要全文检索、复杂分析与大容量存储 |
相对较高 |
ES 建议配持久化与资源限制 |
| Loki + Promtail + Grafana |
Promtail 采集 /var/log/containers/,推送到 Loki,Grafana Explore 查询 |
追求轻量、与指标/告警联动 |
低 |
与 Grafana/Prometheus 生态无缝 |
| Filebeat + ES + Kibana |
Filebeat 以 DaemonSet 采集并转发至 ES |
资源较紧、希望简化采集链路 |
低-中 |
常与 Logstash/ES 组合 |
- 快速上手示例
- Loki + Promtail(Helm)
- 添加仓库并安装:helm repo add grafana https://grafana.github.io/helm-charts && helm install loki grafana/loki-stack --namespace=logging --create-namespace --set promtail.enabled=true
- Grafana 添加数据源:地址 http://loki:3100,在 Explore 中查询日志。
- EFK(Fluentd DaemonSet 采集)
- 以 DaemonSet 在每个节点挂载 /var/log 与容器日志目录(如 /var/lib/docker/containers),将日志发送至 Elasticsearch;Kibana 连接 ES 进行检索与可视化。
三 日志轮转与保留策略
- 节点与容器运行时日志
- 使用 kubelet 的 json-file 日志驱动参数控制本地轮转(示例):
- 单个文件最大:100Mi
- 保留备份:5
- 保留天数:7
- 修改 kubelet 配置后执行:systemctl restart kubelet
- 系统日志
- 使用 logrotate 管理 /var/log 下系统日志(示例):
- /var/log/kubelet/*.log { daily; rotate 7; compress; missingok; notifempty; create 0640 root root }
- 测试:logrotate -vf /etc/logrotate.d/k8s
- 重要提示
- 节点本地日志仅作缓冲,务必将日志集中化存储(ES/Loki)以避免 Pod 删除导致日志丢失。
四 安全、治理与运维要点
- 访问控制:使用 RBAC 限制对日志与 Kibana/Grafana 的访问;按需开启审计日志追踪鉴权事件。
- 结构化与一致性:统一日志格式(如 JSON),为后续解析、检索与聚合减少成本。
- 资源限制:为 Fluentd/Filebeat 等采集器设置 requests/limits,避免采集高峰影响业务。
- 敏感信息:在采集链路中使用 parser/过滤插件对密码、密钥等做脱敏处理。
- 监控与告警:监控 ES 存储使用率、Fluentd 延迟、Loki 写入失败等关键指标,设置容量与异常告警。
五 小规模与资源受限环境的轻量实践
- 优先选择 Loki + Promtail + Grafana,以较低资源获得可用、可扩展的日志能力,并与 Prometheus 指标统一观测。
- 若已使用 EFK,为 Elasticsearch 配置合适的 JVM 堆与持久化存储,并为 Fluentd 设置资源限制与副本数,避免 OOM 与热点。