Kubernetes在Ubuntu上的日志如何查看
导读:一、原生工具查看日志(基础排查) 1. 查看Pod容器日志(最常用) 命令格式:kubectl logs <pod-name> [-n <namespace>] [-c <container-name>]...
一、原生工具查看日志(基础排查)
1. 查看Pod容器日志(最常用)
命令格式:kubectl logs <
pod-name>
[-n <
namespace>
] [-c <
container-name>
] [--flag]
- 基础用法:若Pod在默认命名空间,直接指定Pod名称即可查看其主容器日志(如
kubectl logs nginx-pod
)。 - 指定命名空间:若Pod不在默认命名空间,需通过
-n
参数指定(如kubectl logs my-pod -n dev
)。 - 多容器Pod:若Pod包含多个容器,需通过
-c
参数指定目标容器(如kubectl logs my-pod -c sidecar
)。 - 常用参数:
-f
:实时跟踪日志输出(类似tail -f
);--previous
:查看容器崩溃前的日志(用于排查崩溃原因);--tail=20
:仅显示最后20行日志(避免输出过多);--since=5m
:显示最近5分钟的日志(适合快速定位近期问题)。
示例:实时查看default
命名空间下nginx-pod
的日志并跟踪更新:kubectl logs -f nginx-pod
。
2. 查看节点系统/组件日志
Kubernetes节点上的系统日志(如内核、服务日志)和Kubernetes组件日志(如kubelet、kube-apiserver)可通过以下方式查看:
- 节点系统日志:Ubuntu节点的系统日志默认存储在
/var/log/syslog
或/var/log/kern.log
,可使用tail
或less
命令查看(如tail -f /var/log/syslog
)。 - Kubernetes组件日志:
- kubelet(节点代理):
journalctl -u kubelet -f
(实时查看kubelet日志,用于排查节点级问题,如容器启动失败); - kube-controller-manager(控制器管理器):
journalctl -u kube-controller-manager -f
; - kube-scheduler(调度器):
journalctl -u kube-scheduler -f
; - etcd(键值存储):若有权限,
journalctl -u etcd -f
(查看etcd集群状态)。
- kubelet(节点代理):
二、进阶日志管理(生产环境推荐)
1. 日志收集与集中化存储
原生kubectl logs
适合临时排查,生产环境需使用日志聚合工具实现集中化存储、检索、可视化,常见方案:
- EFK Stack(Elasticsearch + Fluentd + Kibana):
- 组件职责:Fluentd以DaemonSet形式运行在每个节点上,收集容器日志(
/var/log/containers/*.log
)、Kubernetes组件日志及系统日志,通过过滤器添加元数据(命名空间、Pod名、容器名),再发送到Elasticsearch;Elasticsearch存储日志并提供快速检索;Kibana可视化数据(如创建日志量趋势 dashboard、错误日志占比分析)。 - 部署优化:Fluentd需挂载宿主机
/var/log
目录以访问所有日志;Elasticsearch集群至少部署3个主节点以保证高可用;为Fluentd设置资源限制(如0.5核CPU、512MB内存),避免日志洪峰导致节点崩溃。
- 组件职责:Fluentd以DaemonSet形式运行在每个节点上,收集容器日志(
- Loki Stack(Loki + Promtail + Grafana):
- 优势:Loki不索引日志内容,仅索引标签(如命名空间、Pod名),存储成本比Elasticsearch低50%以上,适合大规模集群(日志量超TB级)。
- 组件职责:Promtail以DaemonSet形式收集节点日志并发送到Loki;Grafana与Loki集成,支持日志查询(如
{ namespace="default", pod="nginx-pod"}
)和仪表盘展示,可与Prometheus无缝对接(同时监控指标与日志)。
- Filebeat + Elasticsearch + Kibana:
- 适用场景:资源受限的小型集群,Filebeat是轻量级日志收集器,资源占用远低于Fluentd。以DaemonSet形式运行,挂载
/var/log/containers
目录,收集容器日志并发送到Elasticsearch(或通过Logstash转发),再通过Kibana可视化。
- 适用场景:资源受限的小型集群,Filebeat是轻量级日志收集器,资源占用远低于Fluentd。以DaemonSet形式运行,挂载
2. 日志轮换与压缩
为防止节点磁盘空间耗尽,需对容器日志进行轮换与压缩:
- Docker日志轮换:在Docker配置文件(
/etc/docker/daemon.json
)中添加以下配置,限制单个日志文件大小(如10MB)和保留数量(如3个):
修改后重启Docker服务:{ "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } }
sudo systemctl restart docker
。 - Ubuntu系统日志轮换:使用
logrotate
工具,默认配置文件位于/etc/logrotate.conf
,可自定义容器日志轮换规则(如/var/lib/docker/containers/*/*.log
),示例配置:
该配置表示保留7天的压缩日志,每天轮换一次。/var/lib/docker/containers/*/*.log { rotate 7 daily missingok notifempty compress delaycompress sharedscripts postrotate if [ -f /var/run/docker.sock ]; then docker restart $(docker ps -q) fi endscript }
三、调试技巧(快速定位问题)
1. 查看容器内实时日志
若需实时查看容器内的标准输出(stdout)和标准错误(stderr),可使用kubectl logs -f <
pod-name>
,适合快速定位应用运行时问题(如启动错误、请求异常)。
2. 查看容器内文件系统日志
若应用将日志写入容器内的文件(而非标准输出),可通过kubectl exec
进入容器查看:
kubectl exec -it <
pod-name>
-- /bin/bash # 进入容器
ls /var/log/ # 查找日志文件路径
cat /var/log/app.log # 查看日志内容
或直接使用kubectl exec
执行命令(无需进入容器):
kubectl exec <
pod-name>
-- cat /var/log/app.log
3. 查看Pod事件
Pod的事件(如调度失败、拉取镜像错误、重启次数)能快速定位问题根源,使用以下命令查看:
kubectl describe pod <
pod-name>
[-n <
namespace>
]
重点关注Events
部分,例如:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning Unhealthy 5m kubelet Liveness probe failed: HTTP probe failed with statuscode: 503
Normal Pulling 10m kubelet Pulling image "nginx:latest"
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Kubernetes在Ubuntu上的日志如何查看
本文地址: https://pptw.com/jishu/731385.html