十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

DaoCloud 镜像加速完整指南:从改一条镜像地址到 Kubernetes 批量同步

DaoCloud 镜像加速完整指南:从改一条镜像地址到 Kubernetes 批量同步 DaoCloud 镜像加速完整指南从改一条镜像地址到 Kubernetes 批量同步【免费下载链接】public-image-mirror很多镜像都在国外。比如 gcr 。国内下载很慢需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror用 Docker 拉取 ghcr.io、gcr.io 等海外仓库的镜像经常超时这是 Docker 镜像拉取超时最常见的表现。DaoCloud 镜像加速的公开镜像仓库 public-image-mirror 把这些海外仓库同步到国内节点镜像地址改个前缀就能走加速。全文按实际操作顺序展开Kubernetes 部分按需阅读。第一步加 m.daocloud.io 前缀立即生效最简单的做法不需要任何配置镜像的域名、路径、tag 都保持原样拉取时在地址最前面加一段前缀即可。# 原地址 docker pull docker.io/library/nginx:1.21.0 # 加上 m.daocloud.io 前缀后 docker pull m.daocloud.io/docker.io/library/nginx:1.21.0前缀方式对白名单覆盖的所有仓库都有效。白名单机制用一句白话说就是只有名单内的镜像仓库才会被同步下来名单支持*与**通配目前已有 1300 多行。另一种做法是前缀替换把地址里的原始域名换成别名。别名映射是人工维护的新增站点要提 Issue因此官方文档建议优先用前缀方式。原始域名加速域名示例原始地址docker.iodocker.m.daocloud.iodocker.io/library/nginxghcr.ioghcr.m.daocloud.ioghcr.io/home-assistant/home-assistantgcr.iogcr.m.daocloud.iogcr.io/kaniko-project/executorquay.ioquay.m.daocloud.ioquay.io/prometheus/prometheusregistry.k8s.iok8s.m.daocloud.ioregistry.k8s.io/corednsmcr.microsoft.commcr.m.daocloud.iomcr.microsoft.com/dotnet/sdknvcr.ionvcr.m.daocloud.ionvcr.io/nvidia/k8s-device-plugink8s.gcr.io 已迁移到 registry.k8s.io配置时直接用新域名。第二步写进配置以后不用逐条改不想每次拉取都手动加前缀的话把加速域名写进容器运行时配置不带前缀的镜像地址就会自动走加速节点。修改 daemon.json 开启 Docker 全局镜像加速编辑/etc/docker/daemon.json加入加速器地址{ registry-mirrors: [https://docker.m.daocloud.io] }保存后重启 Docker 守护进程systemctl restart docker.service再用docker info | grep -A 2 Registry Mirrors确认列表里出现了该地址说明配置已生效。registry-mirrors 只处理 docker.io 的镜像。想加速 ghcr.io、gcr.io 等其它源站仍需写带m.daocloud.io/前缀的完整地址各加速域名与源站是一一对应的配错站点会拉不到内容。Containerd 的 hosts 配置Containerd 通过 hosts 文件按源站配置镜像。以加速 docker.io 为例新建/etc/containerd/certs.d/docker.io/hosts.tomlserver https://docker.io [host.https://docker.m.daocloud.io]保存后执行systemctl restart containerd。用 kubespray 部署集群的用户可以直接设置containerd_registries_mirrors参数省去逐台节点改文件。Podman 的 registries.conf使用 Podman 的用户在/etc/containers/registries.confrootless 模式可放~/.config/containers/registries.conf里成对添加 registry 与 mirror[[registry]] location docker.io [[registry.mirror]] location docker.m.daocloud.io与 Docker 不同Podman 支持为 docker.io 之外的每个源站单独配 mirrorgcr.m.daocloud.io、ghcr.m.daocloud.io 都可以照此添加。如果你在用 Kuberneteskubeadm 安装加速把 imageRepository 指向 k8s 加速域在 kubeadm 配置文件中把集群组件与 coreDNS 的镜像仓库都指向加速域名apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration imageRepository: k8s.m.daocloud.io dns: imageRepository: k8s.m.daocloud.io/corednskind 本地集群加速创建集群时直接把加速后的节点镜像传给 kind版本号按自己需要的版本替换kind create cluster --name kind --image m.daocloud.io/docker.io/kindest/node:v1.28.0用 Webhook 自动改写所有新建 Pod 的镜像地址不想改任何 yaml 或 helm chart 时部署 repimage 这个 Webhook一种拦截新建资源的准入控制组件新建 Pod 的镜像地址会被自动改写成走本镜像源kubectl create -f https://files.m.daocloud.io/github.com/wzshiming/repimage/releases/download/latest/repimage.yaml kubectl rollout status deployment/repimage -n kube-systemWebhook 只拦截新建的 Pod已经存在的负载不受影响。批量镜像白名单机制与自建同步同步范围由白名单机制决定名单内才同步allows.txt 就是这份名单。有批量需求时按下面的顺序做。先确认镜像在白名单内克隆项目拿到校验脚本git clone https://gitcode.com/GitHub_Trending/pu/public-image-mirror cd public-image-mirror先用地址规整脚本把镜像写法补全自动补默认域名、library路径和latest标签再用白名单校验脚本判断是否被覆盖传入不带 tag 的地址退出码为 0 表示在名单内bash hack/correct-image.sh nginx bash hack/verify-allows.sh allows.txt docker.io/library/nginx不在名单里的镜像白名单与前缀替换规则都是人工维护的到项目里提 Issue 申请添加不要直接硬拉。crontab 定时同步镜像官方建议把拉取任务放在闲时北京时间 01:00–07:00其它时段队列比较拥挤。把镜像清单写进文件用 cron 定时批量拉取30 3 * * * for i in $(cat ~/mirror/images.txt); do docker pull m.daocloud.io/$i; done ~/mirror/pull.log 21部署内网缓存减少外网依赖内网无法直连公网的企业环境可以按内网缓存文档搭一层本地缓存用 registry:3 反向代理 m.daocloud.io缓存周期 90 天再把缓存地址加入各节点 daemon.json 的insecure-registries。之后在原始镜像地址前加上缓存的ip:端口/前缀拉取即可内网机器不必再出公网。确认生效与自行排查顺序是先确认、再自查拉一次确认链路docker pull m.daocloud.io/docker.io/library/nginx:1.21.0能正常返回说明通路已通。查看同步队列同步队列状态页queue.m.daocloud.io/status/只保留一小时的同步记录刚发起的拉取要在时间窗内查对应条目。地址自查用 correct-image.sh 规整地址用 verify-allows.sh 判断白名单覆盖地址没问题但拉取失败回到第 2 步看队列里的失败原因。遇到 404 或内容偏旧缓存只保留 30 天过期后需要重新同步Manifest描述镜像层与版本的元数据有 1 小时的内存缓存tag 更新要 1 小时后才同步到新内容。镜像的 sha256 摘要与源仓库保持一致拉取后比对摘要即可确认内容正确。几条实操建议版本锁定优先sha256:引用其次明确版本 tag最后才考虑latest——可变 tag 变更后会先响应旧数据再触发后台重新同步。低峰同步批量拉取固定在 01:00–07:00北京时间执行避开拥挤时段。白名单范围从紧只申请实际在用的仓库不要顺手加整个域。留意缓存周期30 天没拉过的镜像出现 404重新拉一次即可触发再同步。把地址规则与同步边界理清楚镜像拉取超时就从重试碰运气变成了可验证的流程。【免费下载链接】public-image-mirror很多镜像都在国外。比如 gcr 。国内下载很慢需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。项目地址: https://gitcode.com/GitHub_Trending/pu/public-image-mirror创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表