You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K8s节点无法使用本地预拉取Docker镜像问题求助

问题分析与解决方案

核心原因

你的问题大概率是容器运行时不匹配导致的:kubeadm默认使用containerd作为集群的容器运行时,而你通过docker images看到的镜像只存在于Docker的本地存储中,containerd无法直接访问这些镜像,因此kubelet找不到指定的mybusybox镜像。

另外,docker pull mybusybox报错是正常的——这个标签在Docker Hub上不存在,且你未配置私有仓库,该错误和Pod的启动问题无关。


解决方案

方案1:将Docker镜像导入到containerd(推荐,符合K8s当前默认配置)

  1. 在目标节点上,把Docker中的mybusybox镜像导出为tar包:
    sudo docker save mybusybox -o mybusybox.tar
    
  2. 将tar包导入到containerd的镜像存储中:
    sudo ctr images import mybusybox.tar
    
  3. 验证导入是否成功:
    sudo ctr images ls | grep mybusybox
    
  4. 重新创建Pod,此时kubelet就能通过containerd找到本地镜像。

方案2:修改kubelet配置,使用Docker作为容器运行时

如果坚持要用Docker作为容器运行时,需要修改每个节点的kubelet配置:

  1. 编辑kubelet的配置文件(路径可能因系统不同略有差异):
    sudo vi /var/lib/kubelet/config.yaml
    
  2. 修改containerRuntimeEndpoint字段为Docker的套接字地址:
    containerRuntimeEndpoint: "unix:///var/run/docker.sock"
    
  3. 重启kubelet服务:
    sudo systemctl restart kubelet
    
  4. 等待kubelet重启完成后,重新创建Pod即可。

额外排查步骤

如果以上方案无效,可通过以下方式进一步定位问题:

  • 查看kubelet实时日志,获取更详细的镜像查找错误信息:
    sudo journalctl -u kubelet -f
    
  • 确认本地镜像的完整标签:
    docker inspect mybusybox | grep RepoTags
    
    确保Pod的--image参数和输出的完整标签完全一致(比如如果输出是["mybusybox:latest"],就用--image=mybusybox:latest创建Pod)。

内容的提问来源于stack exchange,提问作者Ricky Levi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 08:59:50