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

离线环境k3s导入本地镜像部署仍报pause镜像拉取失败如何解决

问题根因

imagePullPolicy: Never仅对Deployment中声明的业务容器(即Nexus应用镜像)生效。报错中拉取失败的rancher/mirrored-pause:3.6是Pod沙箱(pause基础设施容器)镜像,由kubelet直接调用容器运行时拉取,完全不受业务工作负载的镜像拉取规则约束。
之前操作未生效的两个核心原因:

  • 预拉取的镜像未导入k3s内置containerd的对应命名空间,多数情况是导入到了Docker的本地镜像存储,k3s默认使用内置containerd作为运行时,无法识别Docker存储中的镜像
  • 代理配置仅添加到k3s服务进程的环境变量中,未覆盖kubelet、containerd的镜像拉取链路,同时节点本地DNS无法解析公网镜像仓库域名,直接触发解析失败报错
修复操作

1. 正确导入pause镜像到k3s运行时

如果镜像之前存在本地Docker环境,先导出镜像包:

docker save rancher/mirrored-pause:3.6 -o pause.tar

将镜像导入k3s内置containerd的k8s.io命名空间(k8s系统组件、沙箱镜像都存在这个命名空间下):

k3s ctr images import pause.tar -n k8s.io

导入完成后执行校验,能查到对应镜像记录即为导入成功:

k3s crictl images | grep mirrored-pause

2. 强制k3s使用本地pause镜像,跳过公网拉取

编辑k3s配置文件/etc/rancher/k3s/config.yaml,添加如下配置明确指定沙箱镜像,避免运行时自动触发公网拉取:

kubelet-arg:
  - "pod-infra-container-image=rancher/mirrored-pause:3.6"

3. (可选)需要代理拉取其他公网镜像时的正确配置

不要仅在k3s.service、k3s.server.env中配置代理,需要通过systemd drop-in方式给所有k3s相关组件注入代理环境变量:

  • 创建配置目录:
mkdir -p /etc/systemd/system/k3s.service.d
  • 编辑代理配置文件/etc/systemd/system/k3s.service.d/http-proxy.conf,替换为实际代理地址:
[Service]
Environment="HTTP_PROXY=http://你的代理IP:代理端口"
Environment="HTTPS_PROXY=http://你的代理IP:代理端口"
Environment="NO_PROXY=127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.svc,.cluster.local,集群内部业务网段"
  • 重载systemd配置并重启k3s:
systemctl daemon-reload
systemctl restart k3s
注意事项
  • 多节点集群需要在所有控制面、worker节点上执行上述镜像导入、配置修改操作,否则调度到未配置节点的Pod仍会报相同错误
  • 操作完成后删除之前创建失败的Nexus Pod,等待重新调度即可正常启动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:42:06