7.6.2 镜像分发加速

容器云平台达到一定规模之后,镜像分发就可能成为整个平台的性能瓶颈。举例说明:在生产实践中,较大尺寸的容器镜像有多方面的问题(见过 12G 的镜像文件),其一影响容器启动效率,其二在应对瞬时高峰启动几百、几千 Pod 时,受带宽、镜像仓库服务瓶颈等影响,会存在较长的耗时。笔者见过多次所有的环节准备完毕,唯独遗漏了镜像下载服务,有时候甚至流量高峰已过,集群还没有扩展完毕。

如果你也有过此类的困扰,那么可以看看 Dragonfly。Dragonfly 是阿里巴巴开源的容器镜像分发系统,目标是解决容器镜像分发效率低下和镜像共享依赖公共镜像仓库等问题。它的核心思想是基于 P2P 的镜像分发模型,以提高镜像传输速度和并发性,减少公共镜像仓库的依赖。

Dragonfly 是一种无侵入的解决方案,并不需要修改 Docker 等源码,下图为 Dragonfly 的架构图,在每一个节点上会启动一个 dfdaemon 和 dfget, dfdaemon 是一个代理程序,他会截获 dockerd 上传或者下载镜像的请求,dfget 是一个下载客户端工具。每个 dfget 启动后 将自己注册到 supernode 上。supernode 超级节点以被动 CDN 的方式产生种子数据块,并调度数据块分布。

通过镜像加速下载的场景,解析其中运作原理:

  • dfget-proxy 拦截客户端 docker 发起的镜像下载请求(docker pull)并转换为向 SuperNode 的 dfget 下载请求。
  • SuperNode 从镜像源仓库下载镜像并将镜像分割成多个 block 种子数据块。
  • dfget 下载数据块并对外共享已下载的数据块,SuperNode 记录数据块下载情况,并指引后续下载请求在结点之间以 P2P 方式进行数据块下载。
  • dfdaemon 将将镜像分片文件组成完整的镜像。
总字数:552字 
Last Updated:
Contributors: isno