[英]k8s pod keeps crashing (CrashLoopBackOff), but describe shows "Completed" with code 0?
我在 k8s 上运行基于 AWS 的 java KCL 库构建的节点应用程序。
每隔 5 分钟左右,容器就会因“CrashLoopBackOff”而崩溃并重新启动——我不明白为什么。
容器日志没有显示任何错误,在某些时候 stream 只是以以下内容结尾:
Stream closed EOF for sol/etl-sol-onchain-tx-parse-6b7d8f4c94-tf8tc (parse)
pod 事件也没有显示有用的信息,如下所示:
│ State: Running
│ Started: Sun, 08 May 2022 10:06:36 -0400
│ Last State: Terminated
│ Reason: Completed
│ Exit Code: 0
│ Started: Sun, 08 May 2022 09:58:42 -0400
│ Finished: Sun, 08 May 2022 10:03:43 -0400
│ Ready: True
│ Restart Count: 6
它怎么可能说“已完成”且退出代码为 0? 容器是一个永无止境的过程,它永远不应该完成。
最多使用 25-50% 的 CPU/内存请求。
还有什么可能导致这个? 容器应该使用 4-7 个线程(不确定是否为绿色)——也许这就是问题所在? 在 M5 上运行它。 大型(2 个 vCPU,8gb 内存)。
我不认为你说的是准确的:
容器是一个永无止境的过程,它永远不应该完成。
在我看来,这不是链接到 kube.netes,而是链接到容器中的应用程序。 尝试直接在您的主机上执行您的容器(例如在 docker 内)并检查行为。
错误代码 0 表示应用程序成功终止——尽管这可能会产生误导,具体取决于应用程序。 例如,如果您的代码要求在出现错误时以代码 0 退出,就会发生这种情况。
Kube.netes 部署将重新启动容器,无论它们如何终止——成功或失败。
容器不是一个永无止境的过程。 它可以(并且确实)在需要时终止。 例如,当您运行cronjobs
或jobs
时
回到你的问题。 我们不知道您的应用程序在做什么,除了它是一个节点应用程序。 它是否正在处理某些东西,然后在完成队列时终止?
尝试通过使用类似以下内容在本地运行容器来重现该问题:
docker run -it path/to/image
(如果您需要安装卷,请这样做)
如果容器运行、处理并终止,请执行以下操作:
echo $?
这将返回最后一个命令的错误代码,如果返回 0,则您已经复制了 Kube.netes 看到的内容。
如果是这种情况,您可以通过以下两种方式纠正此问题:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.