我正在从主节点上的图像创建一个pod。当我在主节点上创建一个要在工作节点上调度的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"]
Kuectl描述吊舱细节:
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是否默认情况下会在worker节点上查找映像是否存在?。感谢
当kubernetes创建容器时,它首先会查看本地映像,然后会尝试registry(默认情况下是docker registry(
您收到此错误是因为:
-
在节点的本地找不到您的图像。
-
您指定了
imagePullPolicy: Never
,所以您永远不会尝试从注册表下载图像
解决此问题的方法很少,但所有这些方法通常都会指示您在本地获取图像并正确标记它。
要在您的节点上获取图像,您可以:
-
将图像从一个节点复制到另一个
-
从现有Dockerfile 构建图像
获取图像后,标记它并在部署中指定
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
。更多信息请访问@dryp飞艇回答
此外,请确保对imagePullPolicy: Never
图像使用eval $(minikube docker-env)
,以防您使用minikube(您尚未指定任何标记,但这可能会有所帮助(。更多信息在获取"ErrImageNeverPull"在pods问题