有没有办法解释为什么kubernetes pod在重负载下出现故障,状态为"craskLoopBackOff"?
我有一个HorizontalPodAutoscaler,它从不启动。在它的状态下,它总是显示低(低于50%(的cpu和内存使用率。
在pod中跟踪应用程序日志也不能提供任何见解。
尝试查看Kubernetes事件kubectl get events --sort-by='.lastTimestamp'
如果您没有从事件中得到任何有意义的东西,请转到特定节点并查看kubelet日志journalctl -u kubelet
要从pod获取日志,应该使用:
kubectl logs [podname] -p
您也可以执行kubelet logs
,但这主要用于集群日志。
如果没有日志,则表示您的应用程序在崩溃前没有生成任何日志。你需要重写应用程序,例如在crush上添加内存转储。
您提到pod
在高负载下正在消亡,但统计数据显示只有50%的利用率。你应该登录到pod并检查自己的负载,也许检查有多少文件被打开,因为你可能已经达到了极限。
您可以阅读Kubernetes关于Application Introspection和Debugging的文档,并使用Init Containers调试CrashLoopBackoff。
你也可以尝试在Docker中运行你的镜像并在那里检查日志。有一个很好的文档关于日志和故障排除可用。
如果您提供更多详细信息,我们可能会提供更多帮助。
以下是我观察到的crashloopbackoff的一些明显原因:
- 等待一些条件被完全填充,例如一些秘密,未通过健康检查等
- pod正在以爆发力或竭尽全力的方式运行QoS,并且由于上的资源不可用而被终止节点
您可以运行此脚本来查找命名空间中pod的可能问题:https://github.com/dguyhasnoname/k8s-day2-ops/blob/master/namespace_scripts/debug_app_namespace.sh