获取Kubernetes Pod日志¶
在Kubernetes集群排查故障时,需要使用 kubectl logs
命令来检查pod日志。这里命令是 logs
而不是 log
很有意思,意味着对于pod来说,可能会有多个container存在,观察日志实际是观察多个容器的日志。
如果pod只包含一个容器,则可以直接使用:
kubectl logs <pod_name>
日志可以只截取最近6小时的日志:
kubectl logs <pod_name> --since=6h
还可以截取pod的最近50行日志:
kubectl logs <pod_name> --tail=50
支持持续观察pod日志(类似
tail -f
):kubectl logs -f <pod_name>
在Pods中有多个容器,则需要获取容器日志,需要通过
-c
参数指定容器:kubectl logs <pod_name> -c <container_name>
另外,可以通过
--previous
输出最近一次容器启动后生成的日志:kubectl logs <pod_name> -c <container_name> --previous
备注
这里 <pod_name>
指定pod, <container_name>
指定该pod中的容器, --previous
则输出最近一次容器启动后生成的日志。
对于pod,可以通过 describe pod
命令来获取pod的event记录,对于排查pod异常会很有帮助
可以一次性获取整个pod中所有容器的日志
--all-containers
kubectl logs <pod_name> --all-containers
可以指定 label 来获取一组pod的日志:
kubectl logs -l label_key=label_value
对于namespace,可以整体获得这个namespace中日志信息(非常有用):
kubectl get event [--namespace=my-namespace]
部署日志¶
除了容器内部日志,还可以通过部署日志来判断pod的异常问题:
kubectl describe deployment deployment_name
kubectl describe replicaset replicaset_name
kubectl describe pod
对特定部署可以使用命令:
kubectl logs deployment/deployment_name