命令格式:kubectl logs <pod-name> [-n <namespace>] [-c <container-name>] [--flag]
kubectl logs nginx-pod)。-n参数指定(如kubectl logs my-pod -n dev)。-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。Kubernetes节点上的系统日志(如内核、服务日志)和Kubernetes组件日志(如kubelet、kube-apiserver)可通过以下方式查看:
/var/log/syslog或/var/log/kern.log,可使用tail或less命令查看(如tail -f /var/log/syslog)。journalctl -u kubelet -f(实时查看kubelet日志,用于排查节点级问题,如容器启动失败);journalctl -u kube-controller-manager -f;journalctl -u kube-scheduler -f;journalctl -u etcd -f(查看etcd集群状态)。原生kubectl logs适合临时排查,生产环境需使用日志聚合工具实现集中化存储、检索、可视化,常见方案:
/var/log/containers/*.log)、Kubernetes组件日志及系统日志,通过过滤器添加元数据(命名空间、Pod名、容器名),再发送到Elasticsearch;Elasticsearch存储日志并提供快速检索;Kibana可视化数据(如创建日志量趋势 dashboard、错误日志占比分析)。/var/log目录以访问所有日志;Elasticsearch集群至少部署3个主节点以保证高可用;为Fluentd设置资源限制(如0.5核CPU、512MB内存),避免日志洪峰导致节点崩溃。{namespace="default", pod="nginx-pod"})和仪表盘展示,可与Prometheus无缝对接(同时监控指标与日志)。/var/log/containers目录,收集容器日志并发送到Elasticsearch(或通过Logstash转发),再通过Kibana可视化。为防止节点磁盘空间耗尽,需对容器日志进行轮换与压缩:
/etc/docker/daemon.json)中添加以下配置,限制单个日志文件大小(如10MB)和保留数量(如3个):{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
修改后重启Docker服务:sudo systemctl restart docker。logrotate工具,默认配置文件位于/etc/logrotate.conf,可自定义容器日志轮换规则(如/var/lib/docker/containers/*/*.log),示例配置:/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
}
该配置表示保留7天的压缩日志,每天轮换一次。若需实时查看容器内的标准输出(stdout)和标准错误(stderr),可使用kubectl logs -f <pod-name>,适合快速定位应用运行时问题(如启动错误、请求异常)。
若应用将日志写入容器内的文件(而非标准输出),可通过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
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"