将Docker镜像导入containerd后,K8s无法拉取镜像问题排查
问题原因与解决方案
核心问题:Containerd命名空间不匹配
ctr工具默认操作default命名空间,但Kubernetes的containerd运行时使用的是k8s.io命名空间。你通过ctr images import导入的镜像仅存在于default命名空间,K8s无法在自身使用的命名空间中找到该镜像,因此会触发拉取操作。
验证方法
执行命令查看k8s.io命名空间下的镜像列表:
ctr -n k8s.io images list
此时不会看到docker.io/library/flaskapp:v1镜像。
修复步骤
- 方案一:直接将镜像导入到k8s.io命名空间
ctr -n k8s.io images import flaskapp.tar
- 方案二:将default命名空间的镜像复制到k8s.io命名空间
ctr images tag docker.io/library/flaskapp:v1 docker.io/library/flaskapp:v1 -n default -t k8s.io
额外检查项
- 确保Deployment YAML中的镜像名称与导入的镜像完全一致(K8s会自动补全
docker.io/library前缀,但显式写全可避免解析问题) - 确认
imagePullPolicy已正确设置为IfNotPresent,若为Always,K8s仍会尝试远程拉取
内容的提问来源于stack exchange,提问作者Sandeep Lade
相关产品推荐
相关产品推荐

