【问题标题】:Getting CrashBackloopError when deploying a pod部署 pod 时出现 CrashBackloopError
【发布时间】:2021-10-24 10:32:09
【问题描述】:

我是 kubernetes 的新手,正在尝试使用私有注册表部署一个 pod。每当我部署此 yaml 时,它都会崩溃循环。添加了 sleep 的大值想法,可能会导致此问题,但仍未奏效。

apiVersion: v1
kind: Pod
metadata:
  name: privetae-image-testing
spec:
  containers:
    - name: private-image-test
      image: buildforjenkin.azurecr.io/nginx:latest
      imagePullPolicy: IfNotPresent
      command: ['echo','success','sleep 1000000']

这里是日志:

Name:         privetae-image-testing
Namespace:    default
Priority:     0
Node:         docker-desktop/192.168.65.4
Start Time:   Sun, 24 Oct 2021 15:52:25 +0530
Labels:       <none>
Annotations:  <none>
Status:       Running
IP:           10.1.1.49
IPs:
  IP:  10.1.1.49
Containers:
  private-image-test:
    Container ID:  docker://46520936762f17b70d1ec92a121269e90aef2549390a14184e6c838e1e6bafec
    Image:         buildforjenkin.azurecr.io/nginx:latest
    Image ID:      docker-pullable://buildforjenkin.azurecr.io/nginx@sha256:7250923ba3543110040462388756ef099331822c6172a050b12c7a38361ea46f
    Port:          <none>
    Host Port:     <none>
    Command:
      echo
      success
      sleep 1000000
    State:          Waiting
      Reason:       CrashLoopBackOff
    Last State:     Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Sun, 24 Oct 2021 15:52:42 +0530
      Finished:     Sun, 24 Oct 2021 15:52:42 +0530
    Ready:          False
    Restart Count:  2
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-ld6zz (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  kube-api-access-ld6zz:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  34s                default-scheduler  Successfully assigned default/privetae-image-testing to docker-desktop
  Normal   Pulled     17s (x3 over 33s)  kubelet            Container image "buildforjenkin.azurecr.io/nginx:latest" already present on machine
  Normal   Created    17s (x3 over 33s)  kubelet            Created container private-image-test
  Normal   Started    17s (x3 over 33s)  kubelet            Started container private-image-test
  Warning  BackOff    2s (x5 over 31s)   kubelet            Back-off restarting failed container

我正在 Windows 上的 docker-desktop 上运行集群。 TIA

【问题讨论】:

  • 尝试使用kubectl logs privetae-image-testing -c private-image-test从容器中获取一些日志
  • 你告诉容器打印successsleep 1000000这两个词,并且打印了这些词,然后退出。当它快速重复退出时,它会进入 CrashLoopBackOff 状态。可以删除command:覆盖来运行镜像中的默认命令吗?

标签: kubernetes kubernetes-pod


【解决方案1】:

注意您使用的是标准 nginx 映像?尝试删除您的 pod 并重新申请:

apiVersion: v1
kind: Pod
metadata:
  name: private-image-testing
  labels:
    run: my-nginx
spec:
  restartPolicy: Always
  containers:
  - name: private-image-test
    image: buildforjenkin.azurecr.io/nginx:latest
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80
      name: http

如果您的 pod 运行,您应该可以使用 kubectl exec -it private-image-testing -- sh 远程进入,然后使用 wget -O- localhost 应该会打印一条欢迎消息。如果仍然失败,请将kubectl logs -f -l run=my-nginx 的输出粘贴到您的问题中。

【讨论】:

  • 也许:/bin/sh-cecho success &amp;&amp; sleep 10000。我怀疑把它全部放在一个字符串中会起作用。
  • 尝试使用 ['echo success && sleep 1000000'] 它抛出了一个差异错误,所以我更改为 /bin/sh 并返回到 crahsbacklooperror
  • 已更新答案,因为您注意到您使用的是标准 nginx 映像?再试一次。
【解决方案2】:

查看我的previous answer 以逐步了解启动容器后发生的情况。

您正在启动一些 nginx:latest 容器,其中的进程将永远运行,以避免退出主进程。然后你添加覆盖(我会引用大卫的话:打印成功和睡眠 1000000,并打印这些词,然后退出)。

您不是让您的容器一直运行以提供服务,而是通过使用sleep 1000000 完成该过程来明确地射击您的腿。

当然,您的命令将被执行并且容器将退出。检查那个。它以状态 0 正确退出并执行了 2 次。未来还会更多。

  Reason:       CrashLoopBackOff
  Last State:   Terminated
  Reason:       Completed
  Exit Code:    0
  Started:      Sun, 24 Oct 2021 15:52:42 +0530
  Finished:     Sun, 24 Oct 2021 15:52:42 +0530

如果你真的需要command: ['echo','success','sleep 1000000'],你需要好好思考

【讨论】:

    猜你喜欢
    • 2019-07-08
    • 1970-01-01
    • 2020-08-27
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 2020-07-20
    相关资源
    最近更新 更多