Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 如何清除CrashLoopBackOff_Kubernetes - Fatal编程技术网

Kubernetes 如何清除CrashLoopBackOff

Kubernetes 如何清除CrashLoopBackOff,kubernetes,Kubernetes,当Kubernetes吊舱进入CrashLoopBackOff状态时,您将修复潜在问题。如何强制重新安排时间?通常,修复程序要求您更改pod的配置(docker映像、环境变量、命令行标志等),在这种情况下,您应该删除旧pod并启动新pod。如果您的pod在复制控制器(应该是)下运行,那么您可以对新版本执行以下操作 对于应用新配置,应创建新pod(旧pod将被移除) 如果pod是由部署或守护进程集资源自动创建的,则每次更新资源的yaml后,此操作都将自动运行。 如果您的资源具有spec.upda

当Kubernetes吊舱进入
CrashLoopBackOff
状态时,您将修复潜在问题。如何强制重新安排时间?

通常,修复程序要求您更改pod的配置(docker映像、环境变量、命令行标志等),在这种情况下,您应该删除旧pod并启动新pod。如果您的pod在复制控制器(应该是)下运行,那么您可以对新版本执行以下操作

对于应用新配置,应创建新pod(旧pod将被移除)

  • 如果pod是由
    部署
    守护进程集
    资源自动创建的,则每次更新资源的yaml后,此操作都将自动运行。 如果您的资源具有
    spec.updateStrategy.type=OnDelete
    ,则不会发生这种情况

  • 若问题和您解决的docker映像内部的错误有关,那个么您应该手动更新pod,您可以使用此功能,以防新映像具有相同的标记时,您可以删除损坏的pod。(见下文)

  • 如果节点出现故障,pod将在短时间后在新节点上重新创建,旧pod将在断开的节点完全恢复后移除。值得注意的是,如果pod是由
    守护程序集
    状态集
    创建的,则不会发生这种情况

您可以通过任何方式手动移除坠毁的吊舱:

kubectl delete pod <pod_name>

如果你有完全死掉的节点,你可以添加
--grace period=0--force
选项,从kubernetes删除关于这个pod的信息。

对于任何感兴趣的人,我写了一个简单的helm图表和python脚本,它监视当前名称空间并删除任何进入CrashLoopBackOff的pod

该图表位于


这是一块膏药。解决问题总是最好的选择。在我的具体案例中,将历史应用程序放入K8s,以便开发团队有一个共同的工作场所,并用新应用程序扼杀旧应用程序,这比修复旧应用程序中的所有错误更可取。在名称空间中使用此功能以保持一切运行的幻觉可以节省时间。

有趣的是,我们在版本不变的地方部署“快照”。虽然RC得到更新,但状态尚未清除,但我会试试你的想法。更新RC是不够的,你还必须更换现有的POD,或者杀死它们,或者按照建议执行滚动更新。如何找到确切的失败原因?@holms-你试过运行
kubectl logs-f
?这将显示容器最近退出运行的标准输出。然而,在我的例子中,当我像上面提到的@Robert Bailey那样运行
kubectl logs-f
时,我收到了一条错误消息,因为它无法加载应用程序,因为启动应用程序所需的文件不存在。我更新了此配置,以引用正确的文件,并按照我的预期工作。删除pod确实会删除当前pod,但它会使系统再次进入所需状态,这意味着它将创建另一个pod,如果其中的服务中断,它将再次显示CrashLoopBackOff。关于如何完全“取消部署”失败的pod有什么提示吗?我必须使用:
kubectl delete pod`kubectl get pods--all namespace | awk'$4==“CrashLoopBackOff”{print$2}`-n
kubectl delete pod `kubectl get pods | awk '$3 == "CrashLoopBackOff" {print $1}'`