想知道在kubernetes中查看崩溃的pod的日志文件吗? 我的pod在启动replicationController后将其状态列为“CrashLoopBackOff”。我搜索可用的文档但找不到任何文档。
答案 0 :(得分:43)
kubectl logs <podname> --previous
$ kubectl logs -h
-p, - previous [= false]:如果为true,则在pod中打印容器的上一个实例的日志(如果存在)。
答案 1 :(得分:5)
kubernetes中存在一个错误,阻止了在CrashLoopBackOff状态下获取pod的日志。看起来它已修复。这里issue on github包含其他信息
答案 2 :(得分:5)
kubectl logs
命令仅在Pod已启动并正在运行时才有效。如果不是,则可以使用kubectl events
命令。
kubectl get events -n <your_app_namespace> --sort-by='.metadata.creationTimestamp'
默认情况下,它不会对事件进行排序,因此不会标记--sort-by
。
答案 3 :(得分:1)
在许多情况下,kubectl logs <podname> --previous
返回:
Error from server (BadRequest): previous terminated container "<container-name>" in pod "<pod-name>" not found
因此,您可以尝试签入@alltej所示的名称空间事件(kubectl get events ..
)。
如果找不到kubectl logs / get events
的错误原因,并且无法使用外部日志记录工具查看错误,我建议:
1):检查Pod在哪个节点上运行:
$kubectl get -n <namespace> pod <pod-name> -o=custom-columns=NAME:.metadata.name,STATUS:.status.phase,NODE:.spec.nodeName
NAME STATUS NODE
failed-pod-name Pending dns-of-node
(如果删除<pod-name>
,则可以在名称空间中看到其他窗格)。
2) SSH到该节点,然后:
A)在/var/log/containers/
中搜索失败的容器容器名称,并转储其.log
文件并搜索错误-在大多数情况下,错误原因将与操作/一起显示在此处。错误发生之前发生的事件。
B)如果上一步没有帮助,请尝试运行以下命令来搜索最新的系统级错误:
sudo journalctl -u kubelet -n 100 --no-pager
。