K3s pod 拉镜像特别慢或超时但宿主机 docker/crictl pull 正常

发布时间 - 2026-01-20 00:00:00    点击率:
K3s镜像拉取失败源于其独立containerd运行时与宿主机Docker隔离,需检查/var/lib/rancher/k3s/agent/containerd镜像库、config.toml镜像加速配置、sandbox镜像拉取及DNS/TLS校验。

这说明镜像拉取能力本身没问题,问题出在 K3s 的运行时上下文或配置层面。K3s 默认用 containerd 作为容器运行时,它和 Docker 是两套独立的镜像存储与网络栈,即使宿主机上 docker pullcrictl pull 成功,也不代表 K3s 能复用或正确访问这些镜像。

检查 containerd 是否真正加载了镜像

K3s 管理自己的 containerd 实例,其镜像库路径是独立的(通常为 /var/lib/rancher/k3s/agent/containerd),和宿主机 Docker 的 /var/lib/docker 完全隔离。

  • 确认当前 K3s 使用的 containerd 是否看到目标镜像:
    sudo crictl -r unix:///run/k3s/containerd/containerd.sock images
  • 如果没列出,说明镜像没被 K3s 的 containerd 加载 —— 即使你用 crictl pull 拉过,也得指定正确的 socket(默认 K3s 不走系统级 containerd)
  • 手动导入镜像(如已下载 tar 包):
    sudo ctr -n k8s.io i import nginx.tar

确认 K3s 使用的 registry 配置是否生效

K3s 启动时会自动生成 containerd 的配置文件:/var/lib/rancher/k3s/agent/etc/containerd/config.toml。若未显式配置镜像加速器,它默认直连 docker.io,极易超时。

  • 检查该 config.toml 中是否包含 registry.mirrorsregistry.configs 段落
  • 常见有效配置(以阿里云镜像为例):
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
      endpoint = ["https://registry.cn-hangzhou.aliyuncs.com"]
  • 修改后必须重启 K3s:
    sudo systemctl restart k3s

排查 sandbox 镜像拉取失败(常见于 pause 镜像)

K3s 启动 Pod 前必须先拉取 sandbox 镜像(如 rancher/mirrored-pause:3.6),这个步骤失败会导致所有 Pod 卡在 ContainerCreating,且错误日志常不提示具体镜像名。

  • 查看 K3s 日志定位实际失败镜像:
    sudo journalctl -u k3s -n 100 --no-pager | grep -i "failed.*pull\|sandbox"
  • 手动拉取并重打标签(关键一步):
    sudo crictl pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6
    sudo ctr -n k8s.io i tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6 k8s.gcr.io/pause:3.6
  • 若使用私有仓库,还需确保 ctr 已登录:
    sudo ctr -n k8s.io auth login registry.example.com -u user -p pass

验证 DNS 和 TLS 握手是否被干扰

K3s 的 containerd 在拉取镜像时使用自己的 DNS 解析和证书校验逻辑,和宿主机可能不同。

  • 测试 containerd 是否能解析镜像域名:
    sudo nslookup docker.io $(cat /var/lib/rancher/k3s/agent/etc/containerd/resolv.conf 2>/dev/null | head -1 | cut -d' ' -f2)
  • 检查是否因证书问题失败(尤其拉 gcr.io、quay.io):
    curl -v https://k8s.gcr.io/v2/ 2

    >&1 | grep -i "ssl\|certificate"
  • 若需信任自签名 CA,需将证书放入:
    /var/lib/rancher/k3s/agent/etc/containerd/certs.d/k8s.gcr.io/ca.crt


# go  # docker  # nginx  # ssl  # curl  # 阿里云  #   # ai  # unix  # dns  # google  # 配置文件  # red  # NULL 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 微信小程序 闭包写法详细介绍  html如何与html链接_实现多个HTML页面互相链接【互相】  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  怎样使用JSON进行数据交换_它有什么限制  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  如何破解联通资金短缺导致的基站建设难题?  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  Python正则表达式进阶教程_复杂匹配与分组替换解析  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  青岛网站建设如何选择本地服务器?  Laravel怎么为数据库表字段添加索引以优化查询  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  js代码实现下拉菜单【推荐】  Laravel怎么在Blade中安全地输出原始HTML内容  详解jQuery中的事件  如何用美橙互联一键搭建多站合一网站?  网易LOFTER官网链接 老福特网页版登录地址  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  如何快速搭建高效WAP手机网站吸引移动用户?  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  在Oracle关闭情况下如何修改spfile的参数  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  简历在线制作网站免费版,如何创建个人简历?  EditPlus中的正则表达式实战(5)  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  做企业网站制作流程,企业网站制作基本流程有哪些?  Laravel如何使用模型观察者?(Observer代码示例)  Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  如何挑选最适合建站的高性能VPS主机?  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  高端企业智能建站程序:SEO优化与响应式模板定制开发  html5的keygen标签为什么废弃_替代方案说明【解答】  javascript中的try catch异常捕获机制用法分析  javascript如何操作浏览器历史记录_怎样实现无刷新导航  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  公司门户网站制作流程,华为官网怎么做?  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  如何在建站宝盒中设置产品搜索功能?  javascript中闭包概念与用法深入理解