查看kubernetes中崩溃的pod的日志文件

Sud*_*era 34 kubernetes

有没有想过在kubernetes中查看崩溃的pod的日志文件?我的pod在启动replicationController后将其状态列为"CrashLoopBackOff".我搜索可用的文档,但找不到任何文档.

Pra*_*h B 59

kubectl logs <podname> --previous

$ kubectl logs -h
-p, - previous [= false]:如果为true,则在pod中打印容器的上一个实例的日志(如果存在).

  • 对我不起作用:`来自服务器的错误(NotFound):未找到pods“my-service”` (5认同)
  • 它什么都不返回。 (4认同)
  • 有没有办法从之前的 pod 中获取日志? (2认同)

Vya*_*nis 7

kubernetes中存在一个错误,阻止在CrashLoopBackOff状态下获取pod的日志.看起来它已修复.这里在github上发布了附加信息


all*_*tej 7

kubectl logs命令仅在 pod 启动并运行时才有效。如果不是,您可以使用该kubectl events命令。

kubectl get events -n <your_app_namespace> --sort-by='.metadata.creationTimestamp'
Run Code Online (Sandbox Code Playgroud)

默认情况下,它不会对事件进行排序,因此不会对--sort-by标志进行排序。

  • 这仅列出事件,不提供有关_为什么_发生退避的日志 (3认同)

Rtm*_*tmY 6

在许多情况下,kubectl logs <podname> --previous正在返回:

Error from server (BadRequest): previous terminated container "<container-name>" in pod "<pod-name>" not found
Run Code Online (Sandbox Code Playgroud)

因此,您可以尝试检查命名空间的事件 ( kubectl get events ..),如@alltej 所示。

如果您没有找到错误的原因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
Run Code Online (Sandbox Code Playgroud)

(如果删除 ,则<pod-name>可以在命名空间中看到其他 pod)。

2 ) SSH 进入该节点并:

A ) 在其中搜索失败的 pod 容器名称/var/log/containers/并转储其.log文件并搜索错误 - 在大多数情况下,错误原因将与错误发生之前发生的操作/事件一起显示在那里。

B ) 如果上一步没有帮助,请尝试通过运行来搜索最新的系统级错误:
sudo journalctl -u kubelet -n 100 --no-pager