K8s 镜像拉取超时重试?DaoCloud public-image-mirror 镜像加速完整配置

K8s 镜像拉取超时重试?DaoCloud public-image-mirror 镜像加速完整配置

【免费下载链接】public-image-mirror 很多镜像都在国外。比如 gcr 。国内下载很慢,需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。 【免费下载链接】public-image-mirror 项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror

凌晨三点 CI 卡在拉镜像,初始化脚本重试到超时——这是国内连 gcr.io 的日常。DaoCloud 开源的 public-image-mirror 把海外镜像同步到国内加速节点,靠一层名称映射就能拉取同一份镜像,内容不动。问题本质:大量基础镜像托管在海外 registry,直连延迟高、超时多,集群部署被拖慢。下面从"改一行名字"讲到企业内网落地。

两种改法:加前缀,还是换域名

项目的映射规则分两类,都能覆盖全部场景。

加前缀(推荐)。把 m.daocloud.io/ 直接拼在原镜像名最前面:

docker.io/library/busybox  →  m.daocloud.io/docker.io/library/busybox

规则通用,任何 registry 的镜像都适用,也是 README 里的第一推荐。

替换域名前缀。部分 registry 可以直接换域名,比如 gcr.io/google-containers/pause 写成 gcr.m.daocloud.io/google-containers/pause。这份映射是人工维护的,只覆盖支持列表,算是快捷通道。

💡 两种方式都只是改"地址":镜像 sha256 与源仓库保持一致,基于摘要的内容校验逻辑不受影响。

把 kubeadm、kind、新建 Pod 都指向加速域名

部署方式不同,动手的层级就不同。

kubeadm:改掉两个镜像源字段

kubeadm 初始化集群时,把 ClusterConfiguration 里的 imageRepositorydns.imageRepository 指向加速域名,控制面组件与 CoreDNS 就全部从 mirror 出:

apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
dns:
  imageRepository: k8s.m.daocloud.io/coredns  # CoreDNS 镜像源
imageRepository: k8s.m.daocloud.io            # 控制面组件镜像源

kind:换掉 create 命令的 --image 参数

kind 建本地测试集群时,把节点镜像改写一下,拉取就走 mirror:

kind create cluster --name kind --image m.daocloud.io/docker.io/kindest/node:v1.22.1

新建 Pod:交给 Webhook 代写镜像

不想逐个改 YAML 和 Helm Chart,就上 repimage。它是 Webhook 组件,新建 Pod 时自动把 image 改写成 mirror 域名,交付物零改动:

kubectl create -f https://files.m.daocloud.io/github.com/wzshiming/repimage/releases/download/latest/repimage.yaml
kubectl rollout status deployment/repimage -n kube-system

Containerd:在运行时层配 mirror

运行 Containerd 的节点,参考官方文档的 registry hosts 章节追加镜像配置即可。环境是 kubespray 搭的,只需用上 containerd_registries_mirrors 变量。⚠️ 注意:各 registry 的前缀替换规则适用范围不同,别把 A 站点的域名配到 B 站点的 registry-mirrors 里。

常用海外仓库加速域名速查

源域名加速域名备注
gcr.iogcr.m.daocloud.io
k8s.gcr.iok8s-gcr.m.daocloud.io上游已退役,镜像迁往 registry.k8s.io
registry.k8s.iok8s.m.daocloud.io
docker.iodocker.m.daocloud.io

README 里还有 ghcr.io、quay.io 等更多 registry,新仓库可以提 Issue 扩展。

企业内网:把 mirror 架到自己机房

内网里多台节点反复拉同一批镜像时,再垫一层本地缓存很值。思路:用 Docker Compose 在内网起一个 registry,把它配成 m.daocloud.io 的代理(文档默认 TTL 2160 小时),客户端只动两处:

  • /etc/docker/daemon.json 把内网 registry 写进 insecure-registries,重启 Docker;
  • 之后的拉取命令,把 m.daocloud.io/ 换成 <ip:port>/
docker pull <your-registry-ip>:<your-registry-port>/docker.io/library/nginx:latest

效果:首次拉取回源并回填缓存,后续节点拉同一镜像走内网,对外网依赖明显下降。完整的 docker-compose 配置见 内网缓存部署文档

使用细节与资源入口

  • 排期:白天拉取拥挤,项目方建议把同步任务放在北京时间凌晨 1–7 点的闲时窗口;
  • 固定引用:优先 @sha256: 摘要,其次明确版本 tag;latest 这类可变 tag 更新后要重新同步,还会命中旧数据;
  • 缓存时效:镜像内容保留 30 天,过期再拉会重新回源。

仓库的 README 里有完整 registry 列表与常见问题入口。踩到文中没覆盖的坑,欢迎在项目 Issue 区留言反馈。

【免费下载链接】public-image-mirror 很多镜像都在国外。比如 gcr 。国内下载很慢,需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。 【免费下载链接】public-image-mirror 项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值