ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

5 步快速搞定 OpenMetadata 镜像加速:前缀替换 + 定时同步实操

5 步快速搞定 OpenMetadata 镜像加速:前缀替换 + 定时同步实操 5 步快速搞定 OpenMetadata 镜像加速前缀替换 定时同步实操【免费下载链接】public-image-mirror很多镜像都在国外。比如 gcr 。国内下载很慢需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror周五晚上docker pull openmetadata/server:1.9.0卡在 37%CI 已经在第三次重试了。DaoCloud 开源的 public-image-mirror 就是为此准备的给 OpenMetadata 镜像加上m.daocloud.io前缀镜像加速立刻生效同样的镜像 3 分钟拉完。照做完你能跑通什么单镜像加速拉取一行 docker pull 改动拉下 OpenMetadata 主服务镜像批量同步清单从白名单生成全部组件的前缀化列表白名单校验命令用退出码一锤定音判断镜像是否允许同步K8s 镜像前缀替换一条 sed 换掉 Deployment 里的 image 字段crontab 定时任务一行配置实现每周自动刷新缓存TL;DR 最短命令docker pull m.daocloud.io/docker.io/openmetadata/server:1.9.0一条请求的旅程镜像加速怎么生效你在拉取地址前加上m.daocloud.io/前缀请求会先落在加速节点镜像在缓存里数据直接返回不在缓存里节点在后台到上游源站拉取并同步你的请求同步完成后就能继续。整个过程是懒加载Lazy Loading首次请求才触发缓存不需要预热也不需要改 Docker 的 daemon 配置。零配置只改镜像地址字符串daemon.json 和 K8s 侧配置一律不动白名单控制能不能同步由 allows.txt 说了算不在白名单的镜像直接拒绝定时刷新每天检查同步状态缓存内容保留 30 天过期后下次请求自动重新同步五步跑通 OpenMetadata 镜像同步开工前先把仓库克隆下来后文脚本都在这个目录里git clone https://gitcode.com/GitHub_Trending/pu/public-image-mirror.git cd public-image-mirrorallows.txt 里有两条规则覆盖 OpenMetadatadocker.io/openmetadata/*和docker.getcollate.io/openmetadata/*部分版本的组件镜像从后者拉取所以官方组件都能命中。Step 1单镜像前缀加速先拿单个镜像打通链路挑拉取频率最高的 server 主服务手动做一次前缀替换。# 把短名规范化成完整镜像地址自动补上 docker.io 前缀 ./hack/correct-image.sh openmetadata/server:1.9.0 # 输出: docker.io/openmetadata/server:1.9.0 # 加上 m.daocloud.io 前缀拉取 docker pull m.daocloud.io/docker.io/openmetadata/server:1.9.0✅ 成功标准拉取结束输出Status: Downloaded newer imagedocker images里出现docker.io/openmetadata/server且 tag 为1.9.0命令退出码 0。单镜像通了剩下六个组件就交给批量清单。Step 2批量同步脚本生成镜像清单先把 OpenMetadata 各组件写成清单对照官方 docker-compose 的 services# 保存为 openmetadata-images.txt一行一个镜像 cat openmetadata-images.txt EOF openmetadata/server:1.9.0 openmetadata/db:2.0.0 openmetadata/elasticsearch:7.10.2 openmetadata/redis:6.2.7 openmetadata/opensearch:1.3.5 openmetadata/vector:0.23.1 openmetadata/opentelemetry-collector:0.65.0 EOF再保存下面这份hack/merge-mirror.sh逐行规范化镜像名、过一遍白名单输出加速地址不在白名单的打到 stderr 方便排查它是 correct-image.sh 和 verify-allows.sh 的组合#!/usr/bin/env bash # 用法: ./hack/merge-mirror.sh openmetadata-images.txt set -uo pipefail list$1 while read -r raw; do [[ -z ${raw} || ${raw} \#* ]] continue name$(./hack/correct-image.sh ${raw}) image${name%%:*} # 去掉 :tag只留仓库名 if ./hack/verify-allows.sh allows.txt ${image}; then echo m.daocloud.io/${image} else echo # 不在白名单已跳过: ${name} 2 fi done ${list}chmod x hack/merge-mirror.sh ./hack/merge-mirror.sh openmetadata-images.txt✅ 成功标准stdout 输出 7 行、每行都以m.daocloud.io/docker.io/openmetadata/开头脚本退出码 0stderr 没有不在白名单输出。清单在手里了再单独把白名单规则查一遍确认匹配粒度符合预期。Step 3白名单校验命令hack/verify-allows.sh 只收两个参数白名单文件和镜像仓库名——注意不能带:tag脚本见到冒号直接按不通过处理。# 在名单内预期通过 ./hack/verify-allows.sh allows.txt docker.io/openmetadata/server echo $? # → 0 # 不在名单内预期失败 ./hack/verify-allows.sh allows.txt docker.io/openmetadata-enterprise/agent echo $? # → 1⚠️ 注意通配符粒度docker.io/openmetadata/*这种单星规则只匹配前缀后的第一级目录docker.io/openmetadata/sub/repo这种多级路径必须由**规则覆盖。退出码 0 表示校验通过、可以安全同步退出码 1 表示不在白名单只能换白名单内的仓库名拉取。白名单这一关过了最后落到部署文件上。Step 4K8s 部署 YAML 前缀替换Deployment 里要动的只有 image 字段。单文件直接上 sed# 批量替换部署文件里的 OpenMetadata 镜像保留 .bak 备份 sed -i.bak s|image: docker.io/openmetadata/|image: m.daocloud.io/docker.io/openmetadata/|g openmetadata-deploy.yaml # 统计替换成功的行数 grep -c m.daocloud.io/docker.io/openmetadata openmetadata-deploy.yaml替换后对应片段长这样apiVersion: apps/v1 kind: Deployment metadata: name: openmetadata-server spec: template: spec: containers: - name: server image: m.daocloud.io/docker.io/openmetadata/server:1.9.0 ports: - containerPort: 8582如果你的 yaml 里写的是不带docker.io的短名先用./hack/correct-image.sh确认完整路径再改 sed 的匹配串。✅ 成功标准grep 计数 ≥ 1 且等于 yaml 中 OpenMetadata 组件数量kubectl apply --dry-runclient -f openmetadata-deploy.yaml无报错。到这里链路通了缓存还会过期最后一件是把刷新自动化。Step 5crontab 每周定时同步项目 README 建议把拉取任务放在北京时间凌晨 01:00–07:00 的闲时这里选周日 03:00。假设仓库克隆在/opt/public-image-mirrorcrontab -e追加一行把 Step 2 的清单直接喂给 docker pull# 每周日 03:00 重新拉取全部 OpenMetadata 镜像刷新镜像缓存 0 3 * * 0 /opt/public-image-mirror/hack/merge-mirror.sh /opt/public-image-mirror/openmetadata-images.txt | xargs -I{} docker pull {} /var/log/openmetadata-mirror-sync.log 21想立刻验证一次把上面 crontab 里冒号后的部分单独复制出来在终端跑即可。✅ 成功标准crontab -l能看到该行手动触发一次后/var/log/openmetadata-mirror-sync.log里有 7 条Status: Downloaded newer image且整条管道退出码 0。三个高频坑OpenMetadata 镜像加速避坑坑 1拉取报 manifest unknown 或 404现象docker pull报manifest unknown或直接 404。原因该镜像的仓库名不在 allows.txt 规则覆盖范围内通配符有段数限制。解法先用校验命令确认再决定换名还是提需求./hack/verify-allows.sh allows.txt docker.io/openmetadata/server echo $?退出码 1 即不在白名单改拉白名单内的仓库名或到上游项目提 Issue 申请把该仓库名加进 allows.txt。坑 2上游发了新版拉下来还是旧内容现象上游 tag 已更新本地拉到的镜像内容哈希却和之前一样。原因Manifest 有 1 小时内存缓存tag 变更要 1 小时后才生效缓存内容 30 天过期才整包重同步。解法等 60 分钟重拉急用时直接按摘要digest拉取绕开 tag 缓存# 取该 tag 当前指向的摘要 digest$(docker buildx imagetools inspect docker.io/openmetadata/server:1.9.0 | awk /digest/ {print $NF; exit}) # 用摘要拉取内容哈希与上游严格一致 docker pull m.daocloud.io/docker.io/openmetadata/server${digest}验证docker inspect --format{{.RepoDigests}} docker.io/openmetadata/server输出的摘要与${digest}一致。坑 3拉取中途超时断连现象大镜像拉几分钟就报client closed network。原因白天服务拥挤同步队列排队大镜像容易被中断。解法把大镜像挪到 01:00–07:00 闲时窗口Step 5 的 crontab 已覆盖偶发断连加重试docker 会复用已下载的分层for i in 1 2 3; do docker pull m.daocloud.io/docker.io/openmetadata/server:1.9.0 break sleep 300 done✅ 成功标准循环结束时 docker pull 退出码 0。收尾把这套模式复制到其他项目一句话方法论前缀替换解决怎么拉白名单解决哪些能拉定时任务解决如何保鲜三者拼起来就是一套可复制到任何项目的 Docker 镜像加速模式——换个镜像清单文件五步原样照跑。项目后续的公开规划方向镜像安全扫描自定义同步规则可视化监控面板如果这篇 public-image-mirror 使用教程帮到了你给项目点个星、关注更新即可下一篇打算写 GitLab Runner 的镜像加速。【免费下载链接】public-image-mirror很多镜像都在国外。比如 gcr 。国内下载很慢需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表