如果 Pod 具有 CrashLoopBackOff 状态,则 Pod 可能意外失败或退出,并且日志包含非零的退出代码。 以下是您的 Pod 被卡在 CrashLoopBackOff 模式中的几个可能原因:
- 应用程序失败:容器内的应用程序在启动后不久崩溃,通常是由于配置错误、缺少依赖项或不正确的环境变量。
- 资源限制不正确:如果 Pod 超出其 CPU 或内存资源限制,Kubernetes 可能会终止容器。 如果资源请求或限制设置太低,则可能会出现此问题。
- 缺少或配置错误的 ConfigMaps/机密:如果应用程序依赖于存储在 ConfigMaps 或机密中的配置文件或环境变量,但它们缺失或配置错误,则应用程序可能会崩溃。
- 映像拉取问题:如果映像存在问题(例如,它已损坏或标记不正确),则容器可能无法正确启动并重复失败。
- Init 容器失败:如果 Pod 具有 init 容器,并且一个或多个无法正常运行,则 Pod 将重启。
- 存活性/就绪性探测失败:如果存活性或就绪性探测配置不正确,Kubernetes 可能会检测到容器运行不正常,并重启它。
- 应用程序依赖项尚未就绪:应用程序可能依赖于尚未准备好的服务,例如数据库、消息队列或其他 API。
- 网络问题:网络配置错误可能会阻止应用程序与必要的服务通信,从而导致应用程序失败。
-
无效的命令或参数:容器可能以无效
ENTRYPOINT、命令或参数开头,导致崩溃。
有关容器状态的详细信息,请参阅 Pod 生命周期 - 容器状态。
请考虑以下选项及其关联的 kubectl 命令。
| 选项 | kubectl 命令 |
|---|---|
| 调试 Pod 本身 | kubectl describe pod <pod-name> |
| 调试复制控制器 | kubectl describe replicationcontroller <controller-name> |
| 读取终止消息 | kubectl get pod <pod-name> --output=yaml |
| 检查日志 | kubectl logs <pod-name> |
注意
如果 Pod 已完成部署,它也可以具有 CrashLoopBackOff 状态,因为它被配置为即使退出代码为零也会继续重启。 例如,如果在未指定任何参数的情况下部署 busybox 映像,映像将启动、运行、完成,然后在循环中重启:
$ kubectl run nginx --image nginx
pod/nginx created
$ kubectl run busybox --image busybox
pod/busybox created
$ kubectl get pods --watch
NAME READY STATUS RESTARTS AGE
busybox 0/1 ContainerCreating 0 3s
nginx 1/1 Running 0 11s
busybox 0/1 Completed 0 3s
busybox 0/1 Completed 1 4s
busybox 0/1 CrashLoopBackOff 1 5s
$ kubectl describe pod busybox
Name: busybox
Namespace: default
Priority: 0
Node: aks-nodepool<number>-<resource-group-hash-number>-vmss<number>/<ip-address-1>
Start Time: Wed, 16 Aug 2023 09:56:19 +0000
Labels: run=busybox
Annotations: <none>
Status: Running
IP: <ip-address-2>
IPs:
IP: <ip-address-2>
Containers:
busybox:
Container ID: containerd://<64-digit-hexadecimal-value-1>
Image: busybox
Image ID: docker.io/library/busybox@sha256:<64-digit-hexadecimal-value-2>
Port: <none>
Host Port: <none>
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: Completed
Exit Code: 0
Started: Wed, 16 Aug 2023 09:56:37 +0000
Finished: Wed, 16 Aug 2023 09:56:37 +0000
Ready: False
Restart Count: 2
如果在节点上创建更多 Pod 后无法识别问题,请在单个节点上运行 Pod 以确定 Pod 实际使用的资源数。
第三方信息免责声明
本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 不对这些产品的性能或可靠性提供任何明示或暗示性担保。
联系我们寻求帮助
如果有疑问,可以询问 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区。