Pod 卡在 CrashLoopBackOff 模式下

如果 Pod 具有 CrashLoopBackOff 状态,则 Pod 可能意外失败或退出,并且日志包含非零的退出代码。 以下是您的 Pod 被卡在 CrashLoopBackOff 模式中的几个可能原因:

  1. 应用程序失败:容器内的应用程序在启动后不久崩溃,通常是由于配置错误、缺少依赖项或不正确的环境变量。
  2. 资源限制不正确:如果 Pod 超出其 CPU 或内存资源限制,Kubernetes 可能会终止容器。 如果资源请求或限制设置太低,则可能会出现此问题。
  3. 缺少或配置错误的 ConfigMaps/机密:如果应用程序依赖于存储在 ConfigMaps 或机密中的配置文件或环境变量,但它们缺失或配置错误,则应用程序可能会崩溃。
  4. 映像拉取问题:如果映像存在问题(例如,它已损坏或标记不正确),则容器可能无法正确启动并重复失败。
  5. Init 容器失败:如果 Pod 具有 init 容器,并且一个或多个无法正常运行,则 Pod 将重启。
  6. 存活性/就绪性探测失败:如果存活性或就绪性探测配置不正确,Kubernetes 可能会检测到容器运行不正常,并重启它。
  7. 应用程序依赖项尚未就绪:应用程序可能依赖于尚未准备好的服务,例如数据库、消息队列或其他 API。
  8. 网络问题:网络配置错误可能会阻止应用程序与必要的服务通信,从而导致应用程序失败。
  9. 无效的命令或参数:容器可能以无效 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 反馈社区