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

裸机K8s集群Slave节点部署本地镜像遇ImagePullBackOff问题求助

解决Kubernetes集群Slave节点无法拉取Master本地镜像的ImagePullBackOff问题

先帮你理清核心问题:你在Ubuntu 16.04上搭建了2节点K8s集群,Master节点有Jenkins构建的本地Docker镜像,部署到Slave时触发ImagePullBackOff错误,但使用DockerHub公共镜像的Pod能正常运行。本质原因是Slave节点本地没有这个仅存于Master的镜像——哪怕你设置了imagePullPolicy: IfNotPresent,Slave找不到镜像还是会尝试远程拉取,自然失败。

下面给你几个可行的解决办法,按需选择:

方法一:手动同步镜像到Slave(适合节点少的临时场景)

如果只有1-2个Slave节点,手动同步是最直接的临时方案:

  1. 在Master节点将镜像导出为tar包:
    docker save -o dashboard-image.tar 32:32
    
  2. 将tar包传输到Slave节点(替换为你的Slave实际IP和登录用户名):
    scp dashboard-image.tar your-slave-user@192.168.x.x:/tmp/
    
  3. 在Slave节点加载镜像:
    docker load -i /tmp/dashboard-image.tar
    

操作完成后,你可以删除现有失败的Pod让K8s重建,或者执行kubectl rollout restart deployment dash-deploy触发重新部署,Pod应该就能正常启动了。

方法二:搭建本地私有镜像仓库(长期运维推荐)

如果后续需要频繁构建和部署镜像,搭建本地私有仓库是更可持续的方案:

  1. 在Master节点启动私有仓库容器:
    docker run -d -p 5000:5000 --restart=always --name registry registry:2
    
  2. 配置Master和Slave的Docker,允许从这个私有仓库拉取镜像:
    • 编辑/etc/docker/daemon.json(如果没有就新建该文件):
      {
        "insecure-registries": ["你的Master节点IP:5000"]
      }
      
    • 重启Docker服务使配置生效:
      systemctl restart docker
      
  3. 在Master节点给本地镜像打标签并推送到私有仓库:
    docker tag 32:32 你的Master节点IP:5000/dashboard:v1
    docker push 你的Master节点IP:5000/dashboard:v1
    
  4. 修改Deployment YAML中的镜像地址为私有仓库地址:
    containers:
    - name: dash-pod
      image: 你的Master节点IP:5000/dashboard:v1
      imagePullPolicy: IfNotPresent
    

之后Jenkins构建完成镜像后,直接推送到这个私有仓库即可,Slave节点会自动从仓库拉取镜像,无需再手动同步。

额外提示

  • 你的镜像名32:32过于模糊,建议改成类似dashboard:v1这种有明确含义的名称,后续镜像管理会更方便。
  • 可以通过kubectl describe pod dash-deploy-xxxxxx-xxxx查看Pod的事件日志,确认问题是否解决——如果日志显示Successfully pulled image或Container started,就说明问题已修复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:42:43