kubectl describe pod -n kube-system coredns-8db54c48d-gk6hrName: coredns-8db54c48d-
kubectl get pods -n kube-system
[sudo] password for wangyadong:
NAME READY STATUS RESTARTS AGE
coredns-8db54c48d-gk6hr 0/1 ContainerCreating 0 11m
helm-install-traefik-4zcr6 0/1 ContainerCreating 0 11m
helm-install-traefik-crd-6gc8x 0/1 ContainerCreating 0 11m
local-path-provisioner-5d9d9885bc-jlktw 0/1 ContainerCreating 0 11m
metrics-server-786d997795-cssk8 0/1 ContainerCreating 0 11m
K3s on WSL2 镜像拉取超时问题排查与解决文档
一、问题现象
在 Windows 11 + WSL2 (Ubuntu) 环境中安装 K3s 后,执行 kubectl get pods -n kube-system 发现所有系统 Pod 长时间处于 ContainerCreating 状态,查看 Pod 详情发现错误信息:
text
Failed to create pod sandbox: ... failed to pull image "rancher/mirrored-pause:3.6": failed to do request: Head "https://registry-1.docker.io/v2/rancher/mirrored-pause/manifests/3.6": dial tcp i/o timeout
即 K3s 无法从 Docker Hub 官方仓库拉取基础镜像 rancher/mirrored-pause:3.6,导致所有 Pod 启动失败。
二、环境信息
-
操作系统:Windows 11
-
Linux 环境:WSL2 + Ubuntu 22.04
-
K3s 版本:v1.35.5+k3s1
-
容器运行时:containerd (K3s 默认)
三、排查过程
3.1 确认网络连通性
在 WSL2 Ubuntu 中执行:
bash
ping 8.8.8.8 # 成功,延迟 ~200ms
说明 WSL2 可以访问外网,不是完全断网。
3.2 测试镜像加速器可达性
bash
curl -k -I https://docker.1ms.run/v2/ # 返回 HTTP/1.1 401 Unauthorized (正常,说明连接成功)
表明常用的国内镜像加速器(如 docker.1ms.run、docker.m.daocloud.io)均可正常访问。
3.3 检查 K3s 是否使用了镜像加速配置
K3s 官方支持通过 /etc/rancher/k3s/registries.yaml 配置镜像加速。我们配置了多个 endpoint,但问题依旧。
yaml
mirrors:
docker.io:
endpoint:
- "https://docker.mirrors.sjtug.sjtu.edu.cn"
- "https://hub-mirror.c.163.com"
- "https://registry-1.docker.io"
- "https://docker.1ms.run"
- ...
查看 K3s 日志:
bash
sudo journalctl -u k3s | grep -i registry # 输出 "Using private registry config file at /etc/rancher/k3s/registries.yaml" # 但同时有警告 "Skipping duplicate endpoint URL ..."
查看 containerd 运行时配置:
bash
sudo cat /var/lib/rancher/k3s/agent/etc/containerd/config.toml | grep -A20 "mirrors" # 没有任何输出
关键发现:K3s 虽然读取了 registries.yaml,但没有将其转换为 containerd 的镜像加速配置。可能原因:
-
配置文件中有重复的 endpoint 导致解析异常
-
K3s 版本或 WSL2 环境的 Bug
-
containerd 配置被 K3s 启动时覆盖
3.4 手动修改 containerd 配置(临时验证)
停止 K3s,直接编辑 containerd 的 config.toml,添加:
toml
[plugins.'io.containerd.cri.v1.images'.registry.mirrors.'docker.io'] endpoint = ["https://docker.1ms.run", "https://docker.m.daocloud.io"]
重启 containerd 和 K3s,但 K3s 重启后覆盖了该文件,修改无效。说明 K3s 会完整生成 containerd 配置,我又尝试了一下 修改加速器地址,这样就好了。
简化后的配置文件:
mirrors:
docker.io:
endpoint:
- "https://docker.1ms.run"
- "https://docker.m.daocloud.io"
- "https://docker.mirrors.ustc.edu.cn"
$
wangyadong@DESKTOP-05L6QHI:/mnt/c/Users/admin$ kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-8db54c48d-gk6hr 1/1 Running 0 63m
helm-install-traefik-4zcr6 0/1 Completed 1 63m
helm-install-traefik-crd-6gc8x 0/1 Completed 0 63m
local-path-provisioner-5d9d9885bc-jlktw 1/1 Running 0 63m
metrics-server-786d997795-cssk8 1/1 Running 0 63m
svclb-traefik-2d46022b-tmnjj 2/2 Running 0 4m54s
traefik-9bcdbbd9-rwc7z 1/1 Running 0 4m54s
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)