如何解决此问题ErrImageNeverPull吊舱创建状态kubernetes

时间:2020-11-07 16:11:47

标签: kubernetes kubectl kubernetes-pod kubernetes-deployment

我正在根据驻留在主节点上的图像创建容器。当我在主节点上创建要在工作节点上调度的Pod时,我得到Pod ErrImageNeverPull的状态

kind: Pod
metadata:
   name: cloud-pipe
   labels:
      app: cloud-pipe
spec:
   containers:
     - name: cloud-pipe
       image: cloud-pipeline:latest
       command: ["sleep"]
       args: ["infinity"]

Kubectl描述广告连播详细信息:

   Type     Reason             Age                   From               Message
   - ---     ------             ----                  ----               -------   
    Normal   Scheduled          15m                   default-scheduler  Successfully assigned 
    default/cloud-pipe to knode
    Warning  ErrImageNeverPull  5m54s (x49 over 16m)  kubelet            Container image "cloud- 
    pipeline:latest" is not present with pull policy of Never
    Warning  Failed             51s (x72 over 16m)    kubelet            Error: ErrImageNeverPull

如何解决此问题。另外,我的问题是Kubernetes默认情况下是否会在工作节点上查找该映像是否存在?谢谢

1 个答案:

答案 0 :(得分:2)

当kubernetes创建容器时,它首先查找本地映像,然后尝试注册(默认情况下为docker登录)

您收到此错误的原因是:

  • 在您的节点上找不到本地图像。

  • 您指定了imagePullPolicy: Never,因此您将永远不会尝试从注册表中下载图像

解决此问题的方法很少,但是所有这些方法通常都会指导您在本地获取图像并对其进行正确标记。

要在您的节点上获取图像,您可以:

一旦获得映像,请对其进行标记并在部署中指定

docker tag cloud-pipeline:latest mytest:mytest

kind: Pod
metadata:
   name: cloud-pipe
   labels:
      app: cloud-pipe
spec:
   containers:
     - name: cloud-pipe
       image: mytest:mytest
       imagePullPolicy: Never
       command: ["sleep"]
       args: ["infinity"]

或者您可以配置自己的本地注册表,将标记的图像推送到其中,然后使用imagePullPolicy: IfNotPresent。 @dryairship answer

中的更多信息

另外,请确保对eval $(minikube docker-env)图像使用imagePullPolicy: Never,以防万一,如果您使用的是minikube(您尚未指定任何标签,但这会有所帮助)。有关Getting “ErrImageNeverPull” in pods问题的更多信息