Ubuntu Kubernetes集群日志管理指南
在Ubuntu上部署的Kubernetes集群中,日志管理是保障系统稳定性、快速定位问题的核心环节。以下从基础工具、主流方案、生产实践三个维度,梳理完整的日志管理流程:
Kubernetes自身提供基础日志工具,适合快速排查单个Pod或容器的日志问题:
kubectl logs:最常用的命令行工具,用于获取Pod中容器的日志。常用参数包括:-f(实时跟踪日志)、--previous(查看崩溃前的日志)、--tail=20(仅显示最后20行)、-c <container-name>(指定多容器Pod中的特定容器)。例如:kubectl logs -f nginx-pod -c nginx 可实时查看nginx容器的日志。kubectl describe:除了查看Pod的基本信息(如镜像、重启次数),还能显示Pod的事件(如调度失败、拉取镜像错误),帮助快速定位问题根源。命令:kubectl describe pod <pod-name>。/var/log/pods目录,文件名格式为namespace_podname_containername_xxxxxx.log,可直接登录节点查看。生产环境中,需采用集中化日志管理方案,解决海量日志的存储、检索、可视化问题。以下是Kubernetes生态中最流行的方案:
这是Kubernetes官方推荐的全文检索与分析解决方案,适合需要复杂查询(如关键词搜索、聚合分析)的场景。
/var/log/containers/*.log)、Kubernetes组件日志(如kubelet)及节点操作系统日志,通过过滤器(如kubernetes_metadata)添加元数据(命名空间、Pod名、容器名),再发送到Elasticsearch。kubernetes.namespace: "default" AND log_level: "ERROR")。/var/log目录,确保能访问所有容器日志;这是轻量级日志聚合方案,适合大规模集群(日志量超TB级)或对存储成本敏感的场景。
{namespace="default", pod="nginx-pod"})和仪表盘展示,与Prometheus无缝对接(可同时监控指标与日志)。helm install loki grafana/loki-stack);适合资源受限的环境(如小型集群),Filebeat是轻量级日志收集器,资源占用远低于Fluentd。
/var/log/containers目录,收集容器日志;配置Filebeat将日志发送到Elasticsearch(或通过Logstash转发),再通过Kibana可视化。stdout/stderr(Kubernetes原生支持的日志来源),避免直接写入容器文件系统(难以收集)。json-file日志驱动配置日志大小与数量限制,例如在Pod的logging字段中设置max-size: "10m"(单个日志文件最大10MB)、max-file: "3"(保留3个日志文件),避免单个容器日志过大。logrotate工具对/var/log/containers目录下的日志文件进行轮转,配置daily(每日轮转)、rotate 7(保留7天)、compress(压缩旧日志)等参数,减少磁盘占用。ERROR关键字时发送邮件通知运维人员,实现问题的早期发现与处理。