github.com/alibaba/sealer@v0.8.6-0.20220430115802-37a2bdaa8173/docs/design/registry-image_zh.md (about) 1 # 镜像打包与分发设计 2 3 ## 背景 4 5 当前镜像管理方式有几个问题: 6 7 1. registry模块与filesystem耦合,应该单独拆出一个管理模块 8 2. docker镜像放在集群镜像里面,会导致集群镜像大小非常大,而且推送到仓库中实际上是有很多多余文件,浪费空间 9 3. 分发的时候通过scp分发非常低效,也会存在部分多余分发的情况 10 4. 无法充分利用nydus的特性对集群镜像分发,需要作一些转换,集成nydus方式也不够干净 11 5. 在线和离线两种场景都把所有东西拉下来,在可以联网的服务上没有这个必要 12 6. 多架构分发需要自己去判断目标机器系统架构 13 14 ## 方案设计 15 16 ### 构建过程 17 18 1. Build的时候对集群镜像里面的Docker镜像不作任何处理,以保障集群镜像"很小" 19 2. CloudImage完全兼容OCI 20 21 ### Save过程 22 23 1. 把之前在Build过程中缓存容器镜像的动作后置到Save命令中,此时去解析manifests目录,chart目录以及imageList,然后把容器镜像单独放到 registry目录. 24 2. 把集群镜像也保存到registry目录中. 25 3. Save的产物就是registry目录和一些配置信息的打包. 26 27 ### Run 过程 28 29 1. registry module根据registry的配置拉起registry. 30 2. 根据CloudImage Name在所有节点拉取集群镜像 31 3. 启动k8s和guest 32 4. kubelet自动拉起其它镜像 33 5. 可以利用运行时自身能力去判断多架构并拉取对应架构的镜像 34 35 ### 加速方案 36 37 在此方案基础上就可以直接制作containerd+nydus的runtime镜像,直接使用nydus的能力,同时提升集群镜像与容器镜像的分发速度