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.rundocker.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


 

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐