Kubernetes CrashLoopBackOff — 如何排除故障

我们在上一篇文章中看到了 imagepullbackoff 错误,现在让我们看一下 Kubernetes 上另一个熟悉的错误。如果你在 Kubernetes 上工作,这可能是一个恼人的错误,你可能会遇到多次。错误不过是 KubernetesCrashLoopBackOff,它是 Kubernetes 中的常见错误之一,表示 Pod 不断在死循环中崩溃,要么无法启动,要么失败。
在这篇文章中,我们将了解如何确定问题的原因以及为什么会出现CrashLoopBackOff error,此外,我们还将介绍如何解决这个问题。
为什么会出现CrashLoopBackOff?
CrashLoopBackOff错误可能由于多种原因而发生,包括:
-
Insufficient resources — 资源不足导致容器无法加载
-
Locked file/database/port — 已被另一个容器锁定的资源
-
No proper reference/Configuration — 引用容器上不存在的脚本或二进制文件或底层系统(如只读文件系统)上的任何错误配置
-
配置加载/设置错误 — 服务器无法加载配置文件或初始设置,如 init-container 失败
-
连接问题 — DNS 或 kube-DNS 无法连接到外部服务
-
**下游服务——**应用所依赖的下游服务之一无法访问或连接失败(数据库、后端等)
-
Liveness probes– Liveness probes 可能因任何原因配置错误或探测失败。
-
端口已在使用: 两个或多个容器使用同一个端口,如果它们来自同一个 Pod,则不起作用
如何诊断 CrashLoopBackOff
要解决任何问题,确定根本原因的最佳方法是开始查看潜在原因列表并一一检查。让我们先说简单。此外,另一个基本要求是更好地了解环境,例如配置是什么,它使用了什么端口,是否有任何挂载点,配置的探针是什么等。
退出重启失败的容器
要排除故障以收集问题详细信息,请运行kubectl describe pod [name]。假设您已配置,但由于Liveness probe failed和Back-off restarting failed container.等原因而失败
如果您收到back-off restarting failed container消息,这意味着您正在处理由于活动高峰而导致的临时资源过载。解决方案是调整periodSeconds或timeoutSeconds以给应用程序更长的响应时间窗口。
查看日志
如果上一步未提供任何详细信息或无法识别,下一步将提取有关正在发生的事情的更多详细信息,您可以从失败的 pod 中获取此信息。
为此,运行kubectl get pods以识别出现CrashLoopBackOff错误的 pod。您可以运行以下命令来获取 pod 的日志:
kubectl 记录 PODNAME
尝试排查错误,以确定 pod 反复崩溃的原因。这可能有来自 pod 内运行的应用程序的更多详细信息,您可以看到任何配置错误或任何类似的就绪问题。
查看部署日志
运行以下命令以检索 kubectl 部署日志:
kubectl logs -f deploy/ -n
这也可能提供有关应用程序级别问题的线索。例如,您可以在下面看到一个显示 ./data 无法挂载的日志文件,可能是因为它已在使用中并被另一个容器锁定。
资源限制
由于内存资源不足,您可能会遇到 CrashLoopBackOff 错误。您可以通过更改容器资源清单中的“resources:limits”来增加内存限制。
图片问题
如果仍然存在问题,另一个原因可能是您使用的 docker 映像可能无法正常工作,您需要确保单独运行时它工作正常。如果这对 Kubernetes 有效并且失败,您可能需要提前找到正在发生的事情,请尝试以下操作,
第一步:识别入口点和cmd
您需要识别 entrypoint 和 cmd 才能访问容器进行调试。请执行下列操作:
1.运行docker pull [image-id]拉取镜像。
- 运行
docker inspect [image-id],找到容器镜像的entrypoint和cmd。
步骤 2:更改入口点
由于容器已崩溃无法启动,您需要将容器规范中的 entrypoint 临时更改为tail -f /dev/null。
规格:
容器:
-
命令:
-
“尾巴”
-
“-F”
-
“/开发/空”
第三步:检查原因
随着 entrypoint 的更改,您应该能够使用默认命令行 kubectl 来执行问题容器。登录容器后,检查所有可能的选项并验证一切正常,如果您发现任何问题,请修复它。
第 4 步:检查缺少的包或依赖项
登录时,检查是否缺少任何包或依赖项,从而阻止应用程序启动。如果缺少包或依赖项,请将缺少的文件提供给应用程序并查看是否可以解决错误。
继续阅读Kubernetes CrashLoopBackOff — 如何排除故障 — FoxuTech
更多推荐
所有评论(0)