使用私有注册表中的映像部署 pod 时出现 CrashLoopBackOff

问题描述 投票:0回答:1

我正在尝试在本地主机上使用我自己的 docker 映像创建一个 pod。

这是用于创建映像的 dockerfile :

FROM centos:8

RUN yum install -y gdb

RUN yum group install -y "Development Tools"

CMD ["/usr/bin/bash"]
                   

用于创建 pod 的 yaml 文件是这样的:

---
 apiVersion: v1
 kind: Pod
 metadata:
   name: server
   labels:
     app: server
 spec:
   containers:
     - name: server
       imagePullPolicy: Never
       image: localhost:5000/server
       ports:
         - containerPort: 80



root@node1:~/test/server# docker images | grep server
server                                                 latest              82c5228a553d        3 hours ago         948MB
localhost.localdomain:5000/server                      latest              82c5228a553d        3 hours ago         948MB
localhost:5000/server                                  latest              82c5228a553d        3 hours ago         948MB
                                                                                     

图像已被推送到本地主机注册表。

以下是我收到的错误。

root@node1:~/test/server# kubectl get pods
NAME     READY   STATUS             RESTARTS   AGE
server   0/1     CrashLoopBackOff   5          5m18s

describe pod 的输出:

    root@node1:~/test/server# kubectl describe pod server

    Name:         server
Namespace:    default
Priority:     0
Node:         node1/10.0.2.15
Start Time:   Mon, 07 Dec 2020 15:35:49 +0530
Labels:       app=server
Annotations:  cni.projectcalico.org/podIP: 10.233.90.192/32
              cni.projectcalico.org/podIPs: 10.233.90.192/32
Status:       Running
IP:           10.233.90.192
IPs:
  IP:  10.233.90.192
Containers:
  server:
    Container ID:   docker://c2982e677bf37ff11272f9ea3f68565e0120fb8ccfb1595393794746ee29b821
    Image:          localhost:5000/server
    Image ID:       docker-pullable://localhost.localdomain:5000/server@sha256:6bc8193296d46e1e6fa4cb849fa83cb49e5accc8b0c89a14d95928982ec9d8e9
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Waiting
      Reason:       CrashLoopBackOff
    Last State:     Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Mon, 07 Dec 2020 15:41:33 +0530
      Finished:     Mon, 07 Dec 2020 15:41:33 +0530
    Ready:          False
    Restart Count:  6
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-tb7wb (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             False 
  ContainersReady   False 
  PodScheduled      True 
Volumes:
  default-token-tb7wb:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-tb7wb
    Optional:    false
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  6m                     default-scheduler  Successfully assigned default/server to node1
  Normal   Pulled     4m34s (x5 over 5m59s)  kubelet            Container image "localhost:5000/server" already present on machine
  Normal   Created    4m34s (x5 over 5m59s)  kubelet            Created container server
  Normal   Started    4m34s (x5 over 5m59s)  kubelet            Started container server
  Warning  BackOff    56s (x25 over 5m58s)   kubelet            Back-off restarting failed container

我没有收到任何日志:

root@node1:~/test/server# kubectl logs -f server
root@node1:~/test/server# 

我无法确定问题是否出在用于创建 pod 的容器或 yaml 文件上。任何帮助将不胜感激。

docker kubernetes kubectl crashloopbackoff
1个回答
1
投票

将此发布为

Community Wiki

正如@David Maze 在评论部分所指出的。

如果 docker run 立即退出,Kubernetes Pod 将始终进入

CrashLoopBackOff
状态。您的
Dockerfile
需要
COPY
或以其他方式安装应用程序并设置其
CMD
来运行它。

根本原因也可以通过

Exit Code
来确定。在 3) 检查退出代码文章中,您可以找到一些退出代码,例如 0, 1, 128, 137 以及说明。

3.1) 退出代码 0

此退出代码意味着指定的容器命令“成功”完成,但 Kubernetes 经常无法接受其正常工作。

简而言之,您的容器已创建,所有提到的操作均已执行,并且由于没有其他事情可做,因此它以

Exit Code 0
退出。

Kubernetes 中 pod 启动多次失败会出现

CrashLoopBackOff
错误`

您基于

centos
的图像,几乎没有额外安装,在后台没有任何进程,因此它被归类为
Completed
。由于这种情况发生得太快,kubernetes 重新启动了它,它陷入了循环。

$ kubectl run centos --image=centos
$ kubectl get po -w
NAME     READY   STATUS             RESTARTS   AGE
centos   0/1     CrashLoopBackOff   1          5s
centos   0/1     Completed          2          17s
centos   0/1     CrashLoopBackOff   2          31s
centos   0/1     Completed          3          46s
centos   0/1     CrashLoopBackOff   3          58s
centos   1/1     Running            4          88s
centos   0/1     Completed          4          89s
centos   0/1     CrashLoopBackOff   4          102s
$ kubectl describe po centos | grep 'Exit Code'
      Exit Code:    0

但是当您使用

sleep 3600
时,在容器中,命令
sleep
正在执行一个小时。在此之后,它也会以
Exit Code 0
退出。

希望能澄清。

© www.soinside.com 2019 - 2024. All rights reserved.