【问题标题】:Kubernetes containers CrashLoopBackOff [duplicate]Kubernetes容器CrashLoopBackOff [重复]
【发布时间】:2020-10-26 16:10:32
【问题描述】:

我是 Kubernetes 的新手,正在尝试学习,但我遇到了一个无法解释的错误。我在集群中运行 Pod 和 Deployment,它们运行良好,如 CLI 所示,但一段时间后它们不断崩溃,Pod 需要重新启动。

在发布到这里之前,我做了一些研究来解决我的问题,但按照我的理解,我必须进行部署,以便我的副本集将管理我的 Pod 生命周期,而不是独立部署 Pod。但正如您所见,部署中的 Pod 也崩溃了。

kubectl 获取 pod

operator-5bf8c8484c-fcmnp   0/1     CrashLoopBackOff   9          34m
operator-5bf8c8484c-phptp   0/1     CrashLoopBackOff   9          34m
operator-5bf8c8484c-wh7hm   0/1     CrashLoopBackOff   9          34m
operator-pod                0/1     CrashLoopBackOff   12         49m

kubectl 描述 pod 操作符

Events:
  Type     Reason     Age                   From                 Message
  ----     ------     ----                  ----                 -------
  Normal   Scheduled  <unknown>             default-scheduler    Successfully assigned default/operator-pod to workernode
  Normal   Created    30m (x5 over 34m)     kubelet, workernode  Created container operator-pod
  Normal   Started    30m (x5 over 34m)     kubelet, workernode  Started container operator-pod
  Normal   Pulled     29m (x6 over 34m)     kubelet, workernode  Container image "operator-api_1:java" already present on machine
  Warning  BackOff    4m5s (x101 over 33m)  kubelet, workernode  Back-off restarting failed container

部署yaml文件:

apiVersion: apps/v1
kind: Deployment
metadata:
   name: operator
   labels:
     app: java
spec:
  replicas: 3
  selector:
    matchLabels:
      app: call
  template:
    metadata:
      labels:
        app: call
    spec:
       containers:
       - name: operatorapi
         image: operator-api_1:java
         ports:
         - containerPort: 80

谁能帮帮我,我该如何调试?

【问题讨论】:

  • 您的 pod 启动时是否有要运行的命令?我没有看到您的部署中指定的命令。如果你的 Pod 没有命令运行,它会在启动后立即退出,这可以解释 crashloopbackoff
  • @Popopame 如果未指定,则默认为 Dockerfile 中的 ENTRYPOINT/COMMAND。

标签: kubernetes kubernetes-pod


【解决方案1】:

原因很可能是容器中运行的进程完成了任务并在一段时间后被容器操作系统终止。然后 pod 正在被 kubelet 重启。

我建议您解决此问题,请检查容器中运行的进程并尝试使其永远保持活动状态。您可以创建一个循环来在容器中运行此过程,也可以在 deployment.yaml 上对容器使用一些命令

这里是您了解和调试 pod 故障原因的参考。 https://kubernetes.io/docs/tasks/debug-application-cluster/determine-reason-pod-failure/

【讨论】:

  • 请注意,我检查了有关我的 Pod 崩溃的调试参考,但与我的问题无关,因为我的输出中没有终止消息。正如您提到的,我将尝试在我的容器中创建一个循环。谢谢
【解决方案2】:

有多种方法可以调试此类场景,我建议您查看 Kubernetes 文档以了解最佳实践。我通常通过以下两种方法取得成功:

  1. 日志:您可以使用以下命令查看应用程序的日志:
kubectl logs -l app=java

如果您在该 pod 中有多个容器,则可以对其进行过滤:

kubectl logs -l app=java -c operatorapi
  1. 事件:您可以从如下所示的事件中获取大量信息(按时间戳排序)。请记住,根据您可能拥有的应用和服务的数量,事件中可能会有很多噪音,因此您必须进一步过滤:
kubectl get events --sort-by='.metadata.creationTimestamp'

随时分享这两个的输出,我可以帮助您进一步调试。

【讨论】:

  • 感谢阿米尔的帮助。我从一个不应该崩溃的简单应用程序中添加了另外 3 个容器,不幸的是,问题仍然存在,与上面的帖子(后退重启失败的容器)类似的事件消息仍然存在。我是否需要在部署文件中创建一个循环,以便我的 Pod 不会崩溃?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-08
  • 1970-01-01
  • 2021-11-27
  • 2019-10-30
  • 2019-06-25
  • 2018-09-02
  • 2020-10-28
相关资源
最近更新 更多