4

有没有办法查看为什么 kubernetes pod 在重负载下以“craskLoopBackOff”状态失败?

我有一个永远不会启动的 Horizo​​ntalPodAutoscaler。在它的状态下,它总是显示低(低于 50%)cpu 和内存使用率。

在 pod 中跟踪应用程序日志也不会提供任何见解。

4

3 回答 3

2

尝试查看 Kubernetes 事件kubectl get events --sort-by='.lastTimestamp'

如果您没有从事件中获得任何有意义的信息,请转到特定节点并查看 kubelet 日志journalctl -u kubelet

于 2020-02-28T06:27:57.857 回答
0

要从 pod 获取日志,您应该使用:

kubectl logs [podname] -p

您也可以这样做kubelet logs,但这主要用于集群日志。

如果没有日志,则意味着您的应用程序在崩溃前没有生成任何日志。您需要重写应用程序,例如在粉碎时添加内存转储。

您提到pod 在重负载下快要死了,但统计数据显示只有 50% 的利用率。您应该登录到 pod 并检查自己的负载,也许检查正在打开的文件数量,因为您可能已经达到了限制。

你可以阅读关于应用程序自省和调试的 Kubernetes 文档,并查看使用 Init-Containers 调试 CrashLoopBackoffs

您还可以尝试在 Docker 中运行您的映像并在那里检查日志。有一个很好的关于日志和故障排除的文档可用。

如果您提供更多详细信息,我们可能会更有帮助。

于 2020-02-28T10:30:26.570 回答
0

以下是我观察到的 crashloopbackoff 的一些明显原因:

  1. 等待某些条件完全满足,例如一些秘密、健康检查失败等
  2. pod 以可突发或尽力而为的 QoS 运行,并且由于节点上的资源不可用而被杀死

您可以运行此脚本来查找命名空间中 pod 的可能问题:https ://github.com/dguyhasnoname/k8s-day2-ops/blob/master/namespace_scripts/debug_app_namespace.sh

于 2020-03-07T02:38:10.670 回答