3 步解决 Calico 镜像拉取超时:DaoCloud 镜像站前缀替换完整指南
【免费下载链接】public-image-mirror很多镜像都在国外。比如 gcr 。国内下载很慢,需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror
在国内网络环境下,从 Docker Hub 拉取 Calico 等 Kubernetes 组件镜像时,超时与失败是高频问题。public-image-mirror 项目(DaoCloud 镜像站)给出了一个改动量极小的解法:将镜像地址的docker.io/前缀替换为docker.m.daocloud.io/,版本标签保持原样。本文以 Calico v3.26.1 为例,说明替换方法、验证方式、镜像站的工作机制以及需要规避的几类问题。
问题现象:拉取 Calico 镜像为什么总失败
用 kubeadm、kind 或原生 Docker 部署 Calico 时,calico/cni、calico/node、calico/kube-controllers这些镜像都托管在 Docker Hub 上。由于上游仓库位于境外,国内节点在高峰期经常遇到i/o timeout、拉取长时间停滞、容器卡在ImagePullBackOff等表现。直接重试往往只能缓解,无法根治。
针对这类超时,最省事的做法是换一条离用户更近的链路,也就是通过 DaoCloud 镜像站中转拉取。
三步完成镜像地址替换
规则只有一条:docker.io/前缀换成docker.m.daocloud.io/,冒号后的版本标签一个字符都不要动。在 Calico 的 YAML 或 helm 值文件中找到image字段,按下表替换即可,其余部署步骤不需要任何调整。
| 原地址 | 替换后地址 |
|---|---|
calico/cni:v3.26.1 | docker.m.daocloud.io/calico/cni:v3.26.1 |
calico/node:v3.26.1 | docker.m.daocloud.io/calico/node:v3.26.1 |
calico/kube-controllers:v3.26.1 | docker.m.daocloud.io/calico/kube-controllers:v3.26.1 |
替换后重新执行拉取或重新 apply 部署文件。如果使用的是 Docker 客户端且不想改 YAML,也可以在/etc/docker/daemon.json中配置registry-mirrors指向https://docker.m.daocloud.io,效果等价。
如何确认换源生效
换完前缀并不代表就万事大吉,建议做一次 digest 校验:
- 拉取镜像:
docker pull docker.m.daocloud.io/calico/node:v3.26.1 - 查看镜像摘要:
docker inspect --format='{{index .RepoDigests 0}}' <image:tag> - 将该
sha256:值与上游仓库同一 tag 的 digest 比对
两者一致,说明镜像站内容与源仓库完全对齐,版本一致性没有风险。镜像站采用懒加载机制,所有 sha256 均与源保持一致,正常情况下一步 3 的比对结果必然是相等的。
镜像站的工作机制
理解以下几点,就能预判它的行为边界:
- 懒加载同步:请求到达时镜像站才从 Docker Hub 拉取并缓存,不做全量预同步,因此覆盖范围广、时效性好。
- manifest 约 1 小时内存缓存:上游发布新内容后,镜像站大约 1 小时后才会同步新的 manifest。
- 缓存保留 30 天:长期未访问的内容过期后,下次拉取需要重新走同步流程。
- 闲时更稳定:国内访问走的是优化链路,实测把批量拉取安排在凌晨闲时(北京时间 01:00–07:00)明显更稳,高峰时段出现偶发超时属于正常现象。
项目由 DaoCloud 团队维护,配合白名单与限流机制保障服务可用性。
还能用在哪些组件
同一套前缀替换规则对 K8s 生态的常见组件都成立,CoreDNS、Cilium、kube-proxy 等只需替换前缀、版本号与上游对齐即可。kubeadm 场景下,把imageRepository和dns.imageRepository指向k8s.m.daocloud.io是标准做法。
有一条底线要守住:版本号必须与上游一致,不要让镜像站替你"漂移"版本。固定 tag 或 digest,而不是依赖可变标签。
坑与对策清单
拉取报 404 找不到 tag镜像站是懒加载,缓存仅保留 30 天。过期 tag 首次拉取要等它重新同步。先确认上游确实存在该 tag,稍等片刻后重试即可。
拉取超时或速度极慢高峰期链路拥挤,建议把拉取任务排到凌晨闲时;也可以用@sha256:digest 固定镜像内容,避免反复重拉。
部署出来的版本和预期对不上latest这类可变 tag 在上游更新后,镜像站需要约 1 小时才同步新 manifest,期间可能出现新旧内容混拉。生产环境应直接钉死明确版本号,不要使用可变标签。
边界说明DaoCloud 镜像站是公共同步站,不是官方仓库。生产落地前,建议核对目标 tag 对应的 digest 与上游一致(方法见上文"如何确认换源生效"一节)。
内网离线场景完全无法访问公网的内网环境,可以参照 docs/local-cache/README.md 自建一层本地缓存代理,让内网节点从本地 registry 拉取,进一步减少对镜像站的依赖。
【免费下载链接】public-image-mirror很多镜像都在国外。比如 gcr 。国内下载很慢,需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考