【问题标题】:How to fix "CrashLoopBackOff" when i deploying knative service部署 knative 服务时如何修复“CrashLoopBackOff”
【发布时间】:2019-12-19 03:23:20
【问题描述】:

尝试在我的 GKE 中运行 knative 服务时。 Pod 给我 CrashLoopBackOff 错误。有什么办法可以解决这个问题?

【问题讨论】:

  • 尝试使用 kubectl describe po podName -n 命名空间来描述 pod。最后的事件可能会帮助您了解原因。可能的原因可能是无法成功拉取 docker 镜像。如果可能,请提供更多详细信息,例如上述命令的结果以寻求帮助。

标签: kubernetes google-kubernetes-engine knative-serving


【解决方案1】:

CrashLoopBackOff 是 Kubernetes pod 状态。这意味着您的 Pod 不断出现故障并重新启动,有时 Kubernetes 会减慢 Pod 的重启速度以节省集群中的资源。

有几种方法可以调试此错误:

这个获取所有关于 pod 状态的信息,并且在这里仔细查看状态部分是必不可少的。

kubectl get pod $podname -o yaml

这个显示了 pod 发生了什么以及时间线和一些附加信息

kubectl describe pod $podname

这个显示日志,但前一个 pod 所以它是完整的日志从头到尾。如果没有前面的部分,它会显示当前 pod,并且可能不会显示所有日志。

kubectl logs $podname --previous

最后一个不是命令而是方法,如果你真的想在容器中挖掘并且上面的命令没有帮助,将 sidecar 添加到 pod 并检查文件系统是否有错误,或者简单地将 .spec.restart 设置为 Never 并执行给它。

【讨论】:

  • 虽然这个答案非常详尽,但我觉得它缺少终极调试工具:kubectl debug。使用kubectl debug pod-name 启动一个新的 Pod,作为错误部署的副本。它不会使用配置的任何入口点,它只会启动一个 shell 并让您进入。然后您可以复制/粘贴入口点命令以找出问题所在。
【解决方案2】:

根据CrashLoopBackOff,按照以下步骤,上述答案是正确的。

  1. 检查崩溃容器的“退出代码”以找到问题的根本原因。

从描述 pod 命令的输出,如上所述,在

containers: [CONTAINER_NAME]: last state: exit code 字段。

  • 如果退出代码为 1,则容器因应用程序崩溃而崩溃。
  • 如果退出代码为 0,请验证您的应用运行了多长时间。当您的应用程序的主进程退出时,容器会退出。如果您的应用很快完成执行,容器可能会继续重启。

    1. 连接到正在运行的容器 在 Pod shell 中运行此命令

kubectl exec -it [POD_NAME] -- /bin/bash

如果您的 Pod 中有多个容器,请添加 -c [CONTAINER_NAME]

您现在可以通过运行 bash 命令来使用此容器进行测试。

这里是 Kubernetes Engine 的所有 Troubleshooting 问题的链接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 2019-11-28
    • 2020-01-12
    • 2019-10-01
    • 2020-06-12
    • 2020-12-19
    相关资源
    最近更新 更多