kubectl logs是Kubernetes原生命令行工具,用于查看Pod中容器的日志,适用于大多数场景。
基础用法:查看指定Pod的日志(若Pod有多个容器,需通过-c指定容器名):
kubectl logs <pod-name> [-c <container-name>] [-n <namespace>]
示例:查看default命名空间下my-nginx Pod的日志:
kubectl logs my-nginx
核心参数详解(提升日志查看效率):
| 参数 | 说明 | 示例 |
|---|---|---|
-f/--follow |
实时跟踪日志输出(类似tail -f) |
kubectl logs -f my-nginx |
--tail=N |
仅显示最后N行日志(默认全部) | kubectl logs --tail=100 my-nginx |
--since=5m |
显示最近5分钟内的日志(支持s/m/h) |
kubectl logs --since=1h my-nginx |
--previous |
查看已终止容器的日志(如Pod崩溃重启前) | kubectl logs -p my-nginx |
-n/--namespace |
指定命名空间(默认default) |
kubectl logs -n kube-system my-pod |
-l/--selector |
通过标签选择器查看多个Pod日志 | kubectl logs -l app=nginx |
常见场景示例:
kubectl logs -f my-nginx -n defaultkubectl logs --since=1h my-nginxkubectl logs -p my-crashed-podkubectl logs --all-containers=true my-multi-container-podKubernetes集群组件(如kubelet、kube-apiserver、kube-scheduler)的日志存储在系统日志中,可通过journalctl命令查看:
journalctl -u kubelet [-f] # -f 实时跟踪
journalctl -u kube-apiserver [-f]
journalctl -u kube-scheduler [-f]
journalctl --since="2025-10-01" -u kubelet
journalctl -p err -u kubelet
若Kubernetes使用json-file日志驱动(默认),容器日志会存储在节点的/var/log/pods/目录下,结构为<namespace>_<pod-name>_<pod-uid>/<container-name>/0.log:
cd /var/log/pods/
ls -l # 查找对应Pod的目录
cat <namespace>_<pod-name>_<pod-uid>/<container-name>/0.log
示例:查看default命名空间下my-nginx Pod的日志:cat default_my-nginx_<pod-uid>/nginx/0.log
注意:直接操作文件系统需具备节点
root权限,且日志轮转可能导致历史日志丢失,建议优先使用kubectl logs。
对于大规模集群,kubectl logs可能无法满足高效查看需求,可使用以下工具:
brew install kubetail(Mac)或下载二进制文件放到/usr/local/bin。kubetail <pod-prefix> -n <namespace>(如kubetail my-app -n default)。brew install stern(Mac)或asdf plugin add stern。stern <pod-prefix> -n <namespace>(如stern my-app -n default)。kubectl命令(如cluster-admin角色)或访问节点文件系统。json-file驱动的max-size和max-files配置),长期日志需结合日志聚合工具存储。