Debian系统Kubernetes日志管理实操指南
一 核心概念与快速排查
- 日志来源包含三类:
- 容器日志(应用 stdout/stderr,由 kubelet 管理);2) 集群组件日志(如 kubelet、kube-apiserver 等);3) 节点 OS 日志(如 systemd journal、auth.log)。容器默认日志驱动为 json-file,日志通常写入节点的 /var/log/containers 目录。快速排查常用命令:
- 查看实时日志:
kubectl logs <pod-name> -n <ns> -f
- 多容器 Pod:
kubectl logs <pod-name> -c <container>
- 查看上一次崩溃容器日志:
kubectl logs <pod-name> --previous
- 查看节点组件日志:
sudo journalctl -u kubelet -f
上述路径与命令适用于 Debian 节点上的 Kubernetes 环境。
二 集中式日志方案选型与对比
| 方案 |
组件与部署 |
主要优势 |
适用场景 |
| EFK(Elasticsearch + Fluentd + Kibana) |
Fluentd 以 DaemonSet 采集节点日志并发送至 ES;ES 做存储与检索;Kibana 可视化 |
全文检索、复杂分析能力强 |
日志量大、需复杂查询与可视化 |
| Loki + Promtail + Grafana |
Promtail 以 DaemonSet 采集 /var/log/containers;Loki 以标签索引存储;Grafana Explore 查询 |
轻量、成本低、与指标/告警一体化 |
云原生环境、成本敏感 |
| Elasticsearch + Filebeat/Fluent Bit |
Filebeat/Fluent Bit 采集;ES 存储;Kibana 可视化 |
生态成熟、部署灵活 |
资源受限或需替代 Fluentd 的场景 |
- 选型建议:优先根据是否需要全文检索与成本权衡;需要全文检索选 EFK/ES,强调成本与一体化可观测选 Loki。
三 快速落地步骤
- 方案A Loki + Promtail(轻量)
- 添加 Helm 源并安装 Loki Stack(含 Promtail):
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(默认 3000 端口)添加 Loki 数据源:URL 填 http://loki:3100;随后在 Explore 中以标签(如 namespace、pod)检索日志。
- 方案B EFK(功能完备)
- 部署 Elasticsearch(StatefulSet,持久化存储,示例 PVC 申请 20Gi)。
- 部署 Fluentd(DaemonSet):挂载 /var/log 与容器日志目录(如 /var/lib/docker/containers 或 /var/log/pods),配置输出到 ES。
- 部署 Kibana:设置
ELASTICSEARCH_HOSTS=http://elasticsearch:9200,通过 5601 访问并创建索引模式与仪表板。
- 提示:若使用 containerd,Fluentd/Promtail 需启用 CRI 解析;若使用 Docker,挂载 Docker 容器日志目录。以上步骤在 Debian 节点同样适用。
四 日志轮转与保留策略
- 节点容器日志轮转(避免磁盘被占满):
- 若 kubelet 使用 json-file 驱动,可通过 kubelet 参数控制单个日志文件最大 100Mi、保留 5 个备份、保留 7 天:
kubeletArguments:
log-dir: ["/var/log/kubelet"]
log-file-max-size: ["100Mi"]
log-file-max-backups: ["5"]
log-file-max-age: ["7"]
修改后重启 kubelet:systemctl restart kubelet。
- 对系统日志(如 /var/log/syslog、/var/log/kern.log)使用 logrotate:
/var/log/kubelet/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 root root
}
手动测试:logrotate -vf /etc/logrotate.d/k8s。
- 建议:为 Elasticsearch 设置 索引生命周期管理(ILM) 或 Curator 策略,按保留天数与存储水位自动删除旧索引。
五 生产最佳实践
- 日志级别:控制组件日志量,生产常用 –v=2(告警与错误)或 –v=4(更详细),避免 –v 过高导致磁盘与性能压力。
- 敏感信息:在 Fluentd/Loki 解析链路中使用过滤/脱敏插件,例如将日志中的
password=xxx 替换为 password=*****。
- 资源与缓冲:为采集器设置 requests/limits,并启用 buffer/retry 机制应对日志洪峰,防止 OOM 与丢日志。
- 存储与成本:ES 能力强但成本高;Loki 以标签索引降低存储,适合大规模容器日志。
- 监控与告警:监控 ES 存储使用率、采集延迟、Loki 写入失败率 等关键指标,配置告警(如日志量突增、磁盘空间不足)。
- 高可用:ES 建议多副本/分片与持久化;Loki 可结合对象存储做长期留存。
- 规范:应用日志尽量输出 结构化 JSON,便于解析与检索。