首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >k8s pod不断崩溃(CrashLoopBackOff),但是描述代码0的“完成”了吗?

k8s pod不断崩溃(CrashLoopBackOff),但是描述代码0的“完成”了吗?
EN

Stack Overflow用户
提问于 2022-05-08 14:15:35
回答 2查看 333关注 0票数 0

我正在k8s上运行一个节点应用程序k8s。

每隔5分钟左右,容器就会与"CrashLoopBackOff“相撞,然后重新启动--我不知道为什么。

容器日志没有显示错误,并且在某个时候流只是以以下内容结束:

代码语言:javascript
复制
Stream closed EOF for sol/etl-sol-onchain-tx-parse-6b7d8f4c94-tf8tc (parse)

pod事件也没有显示任何有用的信息,如下所示:

代码语言:javascript
复制
│     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表示“已完成”呢?容器是一个永无止境的过程,它永远不应该完成。

CPU/mem请求最多使用25-50%。

还可能是什么原因造成的?容器应该使用4-7线程(不确定是否为绿色)--也许这就是问题所在?在M5上运行它。很大(2个vCPU,8gb内存)。

EN

回答 2

Stack Overflow用户

发布于 2022-05-08 19:35:18

我不认为你所说的是正确的:

容器是一个永无止境的过程,它永远不应该完成。

在我看来,这不是与kubernetes有关,而是与您在容器中的应用程序有关。尝试直接执行您的容器--一个您的主机(例如在docker中)并检查其行为。

票数 1
EN

Stack Overflow用户

发布于 2022-05-09 06:52:03

错误代码0意味着应用程序成功终止--尽管这可能会根据应用程序的不同而产生误导性。例如,如果您的代码要求在错误时使用代码0退出,则会发生这种情况。

不管容器如何终止--成功还是失败,Kubernetes部署都将重新启动容器。

容器不是一个永无止境的过程.它可以(而且确实)在需要时终止。例如,当您运行cronjobsjobs

回到你的问题上。我们不知道您的应用程序在做什么,只是它是一个节点应用程序。它是在处理某个东西,然后在它完成其队列时终止吗?

通过在本地运行容器,尝试再现这个问题,方法如下:

docker run -it path/to/image

(如果需要挂载卷,请这样做)

如果容器运行、处理和终止,请执行以下操作:

echo $?

这将返回最后一个命令的错误代码,如果返回0,您已经复制了Kubernetes看到的内容。

如果是这样的话,您可以通过以下两种方法来纠正这种情况:

  1. 改变代码的编写方式,不断检查新的工作,这样,不再退出零,而是返回到检查新的工作。
  2. 更改设置Kubernetes资源的方式,并使用工作 (一次运行)或CronJob (用于计划的重复运行)。这不会要求您以任何方式更改代码。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72161863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档