☰
Zot 镜像同步:一套配置跑通跨区域分发
2026/10/21 10:55:23 网站建设 项目流程

Zot 镜像同步:一套配置跑通跨区域分发

【免费下载链接】zotzot - A scale-out production-ready vendor-neutral OCI-native container image/artifact registry (purely based on OCI Distribution Specification)项目地址: https://gitcode.com/GitHub_Trending/zo/zot

业务部署在华东,镜像拉取却全走华北的源 registry。链路一抖,华东的 Pod 排队 ImagePullBackOff,值班的人只能手动补推镜像救火。Zot 镜像同步做的就是这件事:把源仓库指给 Zot,它会按你定的节奏把镜像搬到本地仓库,华东从此从本地拉,链路从跨区长途变成局域网。

跑通最小配置

一份 Zot sync 配置其实只要三样东西:打开扩展、给一个源 registry、给一条 content 规则。下面这段贴进 config-sync.json 的 extensions.sync 节点里,就能启动同步:

{ "enable": true, "credentialsFile": "./sync-credentials.json", "registries": [ { "urls": ["https://registry-src:5000"], "pollInterval": "6h", "content": [ { "prefix": "library/nginx" } ] } ] }

这是一次典型的镜像定时同步:每 6 小时 Zot 从源仓库拉一次 library/nginx 的最新 tag 列表,新增或变化的 tag 会被复制到本地。源仓库如果需要鉴权,把账号密码写进 credentialsFile 指向的文件;匿名仓库可以删掉这一行。

定时还是按需?

两种模式按 registry 粒度配置,按需模式只要翻一个开关:

{ "urls": ["https://index.docker.io"], "onDemand": true, "syncTimeout": "10m" }

定时模式则只加一个 pollInterval,两者还可以开在同一个 registry 上,定时保证主干版本,按需兜住其余部分。

模式什么时候跑适合什么
pollInterval 定时按固定间隔扫描,如 6h镜像少、版本稳定,需要提前预热
onDemand 按需有人拉缺失镜像时立即复制镜像长尾,大部分 tag 根本没人用

怎么选:镜像集小(几十个仓库、每个仓库少数版本)就用定时,pollInterval 设成 1h,发版时生产已经热好了;镜像集大(上百个基础镜像加各种版本)就用镜像按需同步,拉到什么才复制什么,存储和带宽都不浪费。

只同步我要的:过滤与路径改写

每条 content 规则就是一个小漏斗,每个字段各解决一个问题:

  • prefix:圈定同步哪些仓库。"/repo3/**" 表示它下面全部,只写一个仓库名就只同步那个。
  • tags.regex / tags.excludeRegex:按 tag 过滤。"4.*" 只复制 4.x 版本;excludeRegex 用来排除平台后缀之类的 tag。
  • tags.semver:只认合法语义化版本号的 tag,把 build123 这类杂音挡在外面。
  • destination + stripPrefix:路径改写,把 /repo2/repo 同步成本地的 /repo,拉平上游目录结构。
"content": [ { "prefix": "/repo3/**" }, { "prefix": "/repo1/repo", "tags": { "regex": "4.*", "semver": true } }, { "prefix": "/repo2/repo", "destination": "/repo", "stripPrefix": true } ]

这三条规则分别覆盖子路径全量、版本过滤和路径改写三种最常见的用法,组合起来就能精确圈出你要的镜像范围。

上线前查这几项

  • tlsVerify:保持 true,内部私有 CA 放进 certDir 指向的目录。
  • maxRetries / retryDelay:比如 5 次、间隔 1m,网络抖动不至于一次失败就放弃。
  • syncTimeout:单次同步总超时,默认 3h,慢链路同步大镜像时调大。
  • onlySigned:只同步带签名的镜像,和 cosign / notation 验签流程配套。
  • ⚠️ credentialsFile 里是源仓库的明文凭证,别跟着配置一起提交进 git。

各字段默认值以 sync 扩展源码为准,拿不准时翻一遍比凭印象改参数安全。

三种落地场景

多区域分发。每个区域放一个 Zot,源都指向中心仓库,pollInterval 设成 1h,content 里 prefix 只圈住生产真正用的仓库。这套跨区域镜像同步跑起来之后,各区域集群从本地 Zot 拉镜像,跨区长传基本消失。

镜像灾备。备机房的 Zot 指向主站,pollInterval 放宽松到 12h,加 semver: true 只留正式版本。主站挂掉时业务切到备站,拉取路径不用改,存储也不会被测试 tag 撑爆。

开发到生产的版本管控。生产 Zot 的源指向开发 Zot,Zot 镜像复制在这里当守门员:prefix 只圈 prod- 开头的仓库,regex 再收紧到稳定版本。开发随便推,能进生产的只有发过版的。

Zot 镜像复制不需要改任何业务代码,在现有 registry 的配置里加一个 sync 扩展,它就成了会自己更新的本地图像源。定时与按需两种模式的具体实现可以看 extensions/sync 目录下的源码,完整配置样例在 examples/config-sync.json,里面四种 registry 写法的组合都能直接抄。

【免费下载链接】zotzot - A scale-out production-ready vendor-neutral OCI-native container image/artifact registry (purely based on OCI Distribution Specification)项目地址: https://gitcode.com/GitHub_Trending/zo/zot

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询