public-image-mirror 拉取 Kubernetes 组件镜像时 k8s.gcr.io 与 registry.k8s.io 加速前缀怎么选
【免费下载链接】public-image-mirror很多镜像都在国外。比如 gcr 。国内下载很慢,需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror
Kubernetes 组件镜像(README 示例中的 coredns 等)的来源地址分为k8s.gcr.io与registry.k8s.io两类,在国内直接拉取很慢。public-image-mirror 通过名称映射提供镜像加速,README.md 的映射表里同时保留了这两个源站的条目,而且两者对应不同的加速域名。这篇文章解决一个问题:你清单里的镜像源地址是哪一个,加速前缀就该写成哪一个,改完拉取之后怎么核对。
两组映射分别对应哪个源站
从 README.md 的「支持前缀替换的 Registry」表格中取出 Kubernetes 相关的两行:
| 源站 | 替换为 | 备注 |
|---|---|---|
k8s.gcr.io | k8s-gcr.m.daocloud.io | k8s.gcr.io 已被迁移到 registry.k8s.io |
registry.k8s.io | k8s.m.daocloud.io |
文档给出的两个事实需要注意:
- README 备注写明
k8s.gcr.io已被迁移到registry.k8s.io。仓库内的白名单文件 allows.txt 中同时存在k8s.gcr.io/**与registry.k8s.io/**两条,两个源站的镜像都在加速范围内。 - README 明确说「每一个源站内容都是不同的」,前缀替换规则按源站配置。改写时源站前缀与替换域名必须与表格一致:
k8s-gcr.m.daocloud.io对应k8s.gcr.io源站,k8s.m.daocloud.io对应registry.k8s.io源站,两者不能混用。
选择依据:看清单里的源地址
- 清单引用
registry.k8s.io/...:README 备注表明k8s.gcr.io已迁移到registry.k8s.io,迁移后的地址以此源站为准,用registry.k8s.io这一行的映射。README 的 kubeadm 示例配置也正是基于这个映射(k8s.m.daocloud.io)。 - 旧清单仍是
k8s.gcr.io/...:不必改源地址,k8s.gcr.io/**仍在白名单中,按表格中k8s.gcr.io这一行的映射改写前缀即可。
文档提供了两种改写法,汇总如下(<组件镜像>与<tag>替换为你清单中实际的组件镜像名与版本 tag,文档未给出固定版本号,按你所装 Kubernetes 版本填写):
| 清单里的源地址 | 加前缀(文档推荐) | 前缀替换(文档标注「不推荐」) |
|---|---|---|
k8s.gcr.io/<组件镜像>:<tag> | m.daocloud.io/k8s.gcr.io/<组件镜像>:<tag> | k8s-gcr.m.daocloud.io/<组件镜像>:<tag> |
registry.k8s.io/<组件镜像>:<tag> | m.daocloud.io/registry.k8s.io/<组件镜像>:<tag> | k8s.m.daocloud.io/<组件镜像>:<tag> |
加前缀的依据是 README「使用方法」中的「增加前缀(推荐方式)」:在原始完整地址前加m.daocloud.io/。前缀替换的依据是上面的映射表;README 同时说明这类替换规则是人工配置的,若需要表中没有的映射,按文档提示提 Issue。
在 Kubernetes 相关配置里怎么落
kubeadm:文档示例直接可用
README「加速 Kubernetes」一节给出的 kubeadm 配置(文档只展示以下字段,其余沿用你原有的 kubeadm 配置):
apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration dns: imageRepository: k8s.m.daocloud.io/coredns imageRepository: k8s.m.daocloud.io ...如果你的旧清单镜像源地址是k8s.gcr.io,把k8s.m.daocloud.io换成k8s.gcr.io对应的映射k8s-gcr.m.daocloud.io。
Docker:registry-mirrors 只解决 docker.io
README 的 Docker 加速方式是在/etc/docker/daemon.json添加:
{ "registry-mirrors": [ "https://docker.m.daocloud.io" ] }但 README 明确写道「不要把 docker.io 之外的站点配置给 docker 的 registry-mirrors」。k8s.gcr.io与registry.k8s.io都不是 docker.io,所以用 Docker 拉取 K8s 组件镜像只能改写镜像地址(加前缀或前缀替换),registry-mirrors 帮不上。
Podman:可以为 registry.k8s.io 配置 mirror
README 说明与 Docker 不同,Podman 支持为 docker.io 之外的 registry 配置 mirror。在/etc/containers/registries.conf添加(rootless 模式也可以添加到~/.config/containers/registries.conf),文档示例:
[[registry]] location = "registry.k8s.io" [[registry.mirror]] location = "k8s.m.daocloud.io"配置后 yaml 中的registry.k8s.io原地址可以不改。文档示例还给出了 gcr.io、ghcr.io、quay.io 的配置;未给出k8s.gcr.io的现成条目,如需使用,按映射表规则配置(location为k8s.gcr.io,mirror 为k8s-gcr.m.daocloud.io)。
Containerd
README 指向两个入口:参考 Containerd 官方的 hosts 文档;如果使用 kubespray 安装 containerd,可以配置containerd_registries_mirrors。文档未展开具体配置内容。
拉取后怎么核对
文档给出的成功条件与边界行为:
- sha256 与源保持一致:mirror 采用懒加载机制,文档写明「所有 hash(sha256) 均和源保持一致」。文档还建议优先使用
@sha256:指定镜像,其次使用明确版本号的 tag,最后才考虑 latest 这类可变 tag(其变更后会响应旧数据,并且后台重新同步)。如果清单里已经固定了 digest,按加前缀规则替换源站前缀即可,文档未提供具体 digest 值,<digest>替换为源仓库或既有清单中的 sha256:
docker pull m.daocloud.io/registry.k8s.io/<组件镜像>@sha256:<digest>- 偶发 404 与缓存规则有关:文档写明 Blob 内存缓存 1 分钟,期间如果 blob 到达 30 天期限被删除,拉取会报 404;缓存的内容只保留 30 天,过期后会需要重新同步。
- tag 更新有 1 小时延迟:Manifest 内存缓存 1 小时,tag 被更新 1 小时之后才会同步新的。用可变 tag 拉到的内容是旧数据时,对照这条规则理解。
- 拉取时机:文档建议将拉取任务放在闲时(北京时间 01-07 点),其他时间段非常拥挤。
- 白名单与限流:README 给出白名单与限流公开信息的 Issue 链接(见 README.md 首部的链接)。仓库内当前的白名单即 allows.txt,
k8s.gcr.io/**与registry.k8s.io/**均在其中。
缺映射或想进一步缓存
- 前缀替换规则是人工配置的,需要表中没有的映射时,按文档提示提 Issue。
- 若要在内网缓存镜像、减少对外网依赖,README「部署内网缓存」给出本地 registry 缓存方案,见 docs/local-cache/README.md。
【免费下载链接】public-image-mirror很多镜像都在国外。比如 gcr 。国内下载很慢,需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考