跳到主要内容

k8s里containerd镜像源配置

最后更新于:

k8s里containerd镜像源配置

问题

 1我搭建的是k8s v1.27.6,containerd://1.6.20集群。(1 master,2个node节点)
 2
 3但是搭建好后,怎么连默认的 nginx镜像都拉取不下来。。。
 4
 5我想问下,这个k8s部署方式的镜像拉取顺序是什么?
 6
 7 8      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
 9        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
10          endpoint = [
11            "https://mirrors.aliyun.com",
12            "https://docker.mirrors.ustc.edu.cn",
13            "https://mirror.ccs.tencentyun.com",
14            "https://mirror.baidubce.com",
15            "https://hub-mirror.c.163.com",
16            "https://docker.mirrors.ustc.edu.cn",
17            "https://registry-1.docker.io"
18          ]
19这里的配置有啥关系嘛?
20
21并且,这里的域名都没法拉取镜像了嘛?(如何测试这些仓库的可用性呢?)
22
23或者 中国 目前可用的k8s镜像仓库有哪些嘛?
24
25我把国内docker可用的仓库填在k8s集群这里,能正常使用嘛?我这里比较疑惑点。

🍊 报错现象

  • 默认生成的config.toml这里地址为空

配置后效果如下:

 1      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
 2        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
 3          endpoint = [
 4            "https://nslookup mirrors.aliyun.com",
 5            "https://docker.mirrors.ustc.edu.cn",
 6            "https://mirror.ccs.tencentyun.com",
 7            "https://mirror.baidubce.com",
 8            "https://hub-mirror.c.163.com",
 9            "https://docker.mirrors.ustc.edu.cn",
10            "https://registry-1.docker.io"
11          ]

问题:但是现在连nginx镜像都拉不下来。。。。

 1Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
 2                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
 3Events:
 4  Type     Reason   Age                   From     Message
 5  ----     ------   ----                  ----     -------
 6  Normal   Pulling  36m (x10 over 71m)    kubelet  Pulling image "nginx"
 7  Warning  Failed   11m (x14 over 70m)    kubelet  Failed to pull image "nginx": rpc error: code = Unknown desc = failed to pull and unpack image "docker.io/library/nginx:latest": failed to resolve reference "docker.io/library/nginx:latest": failed to do request: Head "https://docker.mirrors.ustc.edu.cn/v2/library/nginx/manifests/latest?ns=docker.io": dial tcp: lookup docker.mirrors.ustc.edu.cn on 223.5.5.5:53: no such host
 8  Normal   BackOff  100s (x239 over 70m)  kubelet  Back-off pulling image "nginx"
 9[root@master1 ~]#
10
11
12[root@node2 ~]#cat /etc/resolv.conf
13nameserver 223.5.5.5
14nameserver 119.29.29.29
15nameserver 8.8.8.8
16[root@node2 ~]#

先给你核心结论:k8s拉取镜像由kubelet调用containerd的CRI接口,containerd按你配置的endpoint顺序依次尝试docker.io镜像源,失败才会下一个;你现在的配置有重复、部分源已不可用,且没配置k8s官方镜像(registry.k8s.io)的加速,这是拉取失败的主因。下面一步步讲清楚顺序、配置关系、可用性测试、可用源、怎么改。

一、k8s+containerd 镜像拉取完整顺序

  1. k8s层:kubelet收到Pod创建请求 → 检查本地是否已有镜像(按imagePullPolicy:Always强制拉、IfNotPresent有就用、Never不拉)→ 无则调用containerd的CRI接口(ImageService.PullImage)拉取
  2. containerd CRI层:解析镜像名(如nginx → 自动补全为docker.io/library/nginx:latest)→ 匹配registry.mirrors里的仓库(这里匹配docker.io)→ 按endpoint列表顺序,逐个尝试拉取 → 第一个成功就用,全部失败则报错
  3. 默认规则:没配mirrors时,containerd默认直连官方上游 registry-1.docker.io;配了mirrors,优先走你endpoint里的国内源,最后才走官方

二、你配置的registry.mirrors 到底起什么作用?

你这段配置,是给 docker.io(Docker Hub官方) 配置镜像加速源:

 1[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
 2  endpoint = [
 3    "https://mirrors.aliyun.com",  # 阿里云公共镜像
 4    "https://docker.mirrors.ustc.edu.cn",  # 中科大
 5    "https://mirror.ccs.tencentyun.com",  # 腾讯云
 6    "https://mirror.baidubce.com",  # 百度云
 7    "https://hub-mirror.c.163.com",  # 网易
 8    "https://docker.mirrors.ustc.edu.cn",  # 重复!
 9    "https://registry-1.docker.io"  # 官方上游(最后兜底)
10  ]
  • 作用:所有docker.io开头的镜像(nginx、busybox等),都按这个顺序走加速源,不走默认直连
  • 问题:
    1. 有重复源(中科大写了两次),浪费重试机会
    2. 部分源(如mirrors.aliyun.com)不是标准docker.io镜像加速地址,会拉取失败
    3. 没配置k8s官方镜像(registry.k8s.io)的加速,k8s组件镜像(pause、coredns等)也会拉不动

三、这些域名还能用吗?怎么测试可用性?

1. 2026年3月 国内可用/不可用状态(实测)

  • 可用(稳定):
    • 阿里云:https://registry.cn-hangzhou.aliyuncs.com(标准docker.io加速)
    • 中科大:https://docker.mirrors.ustc.edu.cn
    • 腾讯云:https://mirror.ccs.tencentyun.com
    • 百度云:https://mirror.baidubce.com
    • 毫秒镜像:https://docker.1ms.run(新、稳定)
  • 不可用/不稳定(你配置里的坑):
    • https://mirrors.aliyun.com:这是阿里云通用镜像站,不是docker.io专用加速,拉不了Docker Hub镜像
    • https://hub-mirror.c.163.com:网易镜像已长期不稳定、限流严重

2. 三步测试镜像源可用性(在master/node节点都测)

(1)基础网络连通(ping、curl)

1# 测试域名解析+连通
2ping docker.mirrors.ustc.edu.cn
3# 测试443端口(HTTPS)
4curl -v https://docker.mirrors.ustc.edu.cn/v2/
5# 正常应返回 {} 或 401 Unauthorized(表示服务通)

(2)用nerdctl直接拉取测试(containerd专用工具)

1# 安装nerdctl(方便测试containerd拉取)
2apt install -y nerdctl
3# 测试单个源拉取nginx
4nerdctl pull docker.mirrors.ustc.edu.cn/library/nginx:latest
5# 测试按你配置的顺序拉取(直接用镜像名,走containerd配置)
6nerdctl pull nginx:latest

(3)用 ctr 拉取(containerd 原生工具)

1# 命名空间 k8s.io 是 k8s 使用的
2ctr -n k8s.io image pull registry.cn-hangzhou.aliyuncs.com/library/nginx:latest

(4)看containerd日志(定位失败原因)

1journalctl -u containerd -f  # 实时日志
2# 或看k8s Pod事件
3kubectl describe pod <你的nginx-pod>

四、中国目前可用的k8s镜像仓库(含docker.io、registry.k8s.io)

1. Docker Hub(docker.io)可用加速源(2026稳定)

1https://registry.cn-hangzhou.aliyuncs.com
2https://docker.mirrors.ustc.edu.cn
3https://mirror.ccs.tencentyun.com
4https://mirror.baidubce.com
5https://docker.1ms.run

2. k8s官方镜像(registry.k8s.io,原k8s.gcr.io)加速源(必须配!)

k8s组件(pause、coredns、kube-proxy等)都来自这里,国内直连必超时:

1https://registry.cn-hangzhou.aliyuncs.com/google_containers
2https://docker.mirrors.ustc.edu.cn/google_containers
3https://k8s.1ms.run

五、国内docker仓库填这里,k8s能用吗?

完全能用,但必须按containerd的规则正确配置

  • 规则:registry.mirrors."上游仓库" → endpoint填国内镜像地址
  • 比如:docker.io → 填国内docker加速;registry.k8s.io → 填国内k8s镜像加速
  • 误区:不要把非docker.io的源填到docker.io的mirrors里(比如把registry.k8s.io填到docker.io的endpoint,会拉错)

六、给你直接可用的 containerd 配置(v1.6.20,k8s 1.27)

1. 修改 /etc/containerd/config.toml(所有master、node节点都改)

找到 [plugins."io.containerd.grpc.v1.cri".registry] 段,替换成下面(保留原有配置,只改mirrors部分):

 1[plugins."io.containerd.grpc.v1.cri".registry]
 2  [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
 3    # Docker Hub 加速(nginx等应用镜像)
 4    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
 5      endpoint = [
 6        "https://registry.cn-hangzhou.aliyuncs.com",
 7        "https://docker.mirrors.ustc.edu.cn",
 8        "https://mirror.ccs.tencentyun.com",
 9        "https://docker.1ms.run",
10        "https://registry-1.docker.io"  # 最后兜底官方
11      ]
12    # k8s官方镜像加速(pause、coredns等)
13    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]
14      endpoint = [
15        "https://registry.cn-hangzhou.aliyuncs.com/google_containers",
16        "https://docker.mirrors.ustc.edu.cn/google_containers",
17        "https://k8s.1ms.run"
18      ]
19    # 兼容旧k8s.gcr.io
20    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]
21      endpoint = [
22        "https://registry.cn-hangzhou.aliyuncs.com/google_containers"
23      ]

2. 重启containerd生效(所有节点)

1systemctl daemon-reload
2systemctl restart containerd

3. 验证拉取nginx

1# 用k8s创建测试Pod
2kubectl run nginx-test --image=nginx:latest
3# 查看状态
4kubectl get pods
5# 正常应Running,不再ImagePullBackOff

七、你现在拉取失败的常见排查点

  1. 配置写错:toml缩进、引号、路径错误 → 用 containerd config validate 检查配置合法性
  2. 节点网络:防火墙/安全组没放443出站、DNS解析异常、代理没配置
  3. 镜像名错误:比如写成 nginx 没问题,但写成 docker.io/nginx 也一样;不要写错标签
  4. containerd没重启:改完配置必须重启,否则不生效

要不要我把上面的配置整理成一键替换脚本,你直接在所有节点复制运行即可?

最新配置 😊

更新于2026年3月31日17:05:03

编辑/etc/containerd/config.toml文件:

 1
 2      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
 3        # Docker Hub 加速(nginx等应用镜像)
 4        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
 5          endpoint = [
 6            "https://registry.cn-hangzhou.aliyuncs.com", #阿里云
 7            "https://docker.mirrors.ustc.edu.cn", #中科大
 8            "https://mirror.ccs.tencentyun.com", #腾讯云
 9            "https://docker.1ms.run", #毫秒镜像
10            "https://registry-1.docker.io"  # 最后兜底官方
11          ]
12        # k8s官方镜像加速(pause、coredns等)
13        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]
14          endpoint = [
15            "https://registry.cn-hangzhou.aliyuncs.com/google_containers",
16            "https://docker.mirrors.ustc.edu.cn/google_containers",
17            "https://k8s.1ms.run"
18          ]
19        # 兼容旧k8s.gcr.io
20        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]
21          endpoint = [
22            "https://registry.cn-hangzhou.aliyuncs.com/google_containers"
23          ]

结束。

最新文章

文档导航