K3S集群启动Pod遇ErrImageNeverPull错误的解决咨询
解决K3S集群ErrImageNeverPull错误及相关疑问
一、先搞定ErrImageNeverPull错误
首先执行kubectl get pods -o wide查看出错Pod的调度节点:
- 如果Pod被调度到了非master节点:你仅在master上构建了jasminegraph镜像,其他节点本地无此镜像,哪怕设置了
imagePullPolicy: Never,K8s找不到镜像就会报错。 - 两种解决办法任选其一:
- 强制Pod调度到master节点:
- 给master节点打自定义标签:
kubectl label nodes <你的master节点名> local-image-node=enabled - 在Deployment的Pod模板中添加节点选择器:
spec: template: spec: nodeSelector: local-image-node: enabled
- 给master节点打自定义标签:
- 同步镜像到所有可能调度Pod的节点:
- 在master上导出镜像:
docker save jasminegraph:<你的镜像标签> > jasminegraph.tar - 把tar文件传到目标节点(比如用scp:
scp jasminegraph.tar <节点用户名>@<节点IP>:/tmp/) - 目标节点导入镜像:如果用Docker运行时,执行
docker load < /tmp/jasminegraph.tar;如果用containerd,执行ctr images import /tmp/jasminegraph.tar。
- 在master上导出镜像:
- 强制Pod调度到master节点:
二、是否需要所有节点用Docker作为容器运行时?
不需要。K3S支持Docker、containerd等多种兼容OCI标准的容器运行时,不同节点可以混用。Docker构建的镜像默认是标准OCI格式,只要导入对应节点的运行时中,就能正常使用。
三、是否需要将镜像同步到其他节点?
是的,只要Pod存在被调度到非master节点的可能,就必须同步镜像到这些节点。imagePullPolicy: Never的核心逻辑是完全不从任何镜像仓库拉取镜像,仅依赖节点本地已存在的镜像。如果调度到的节点无对应镜像,必然触发ErrImageNeverPull错误。
内容的提问来源于stack exchange,提问作者Mohamed Ishad
相关产品推荐
相关产品推荐

