镜像仓库 Image Registry

镜像仓库(Repository)是集中存放镜像的地方,镜像仓库主要为镜像提供上传、下载、搜索、发布镜像等功能,同时也提供 API 接口,让应用程序和运管系统调用。镜像仓库的一个典型用例:开发人员制作完一个镜像后,推送到镜像仓库,再拉取到另一系统(如 Kubernetes 集群)。

镜像仓库有公共和私有两种类型,公共仓库可以快速使用,最大的公共仓库是 Docker Hub。如果企业内都需要鉴权、多租户、镜像保护等功能,这就要必须要自建私有镜像仓库来实现这些需求。

7.6.1 开源企业级镜像仓库 Harbor

Harbor 是一款开源的企业级开源镜像仓库软件,在镜像管理和存储方面提供了一种高效、安全、可靠的方式。它最初是由 VMware 公司在 2014 年推出,目前已成为 CNCF 的孵化项目。

Harbor 的架构模块化、高可用性、可扩展性强,很容易和其它应用集成,同时支持私有云和公有云等多种部署方式。它被广泛应用于企业内部构建、测试和部署容器镜像,加强了镜像的可管理性和安全性。

Harbor 主要功能包括:

  • 注册中心:支持 Docker V2 镜像协议,管理和存储镜像,提供镜像下载和推送功能。
  • 安全扫描:提供漏洞扫描和镜像签名等安全功能,确保镜像的安全性。
  • 权限控制:提供用户和团队的访问控制和角色管理,确保镜像的安全和合规性。
  • 存储管理:提供基于存储策略的自动清理和存储管理功能,节省存储资源。
  • 远程复制:提供将镜像库同步到远程镜像库的功能,方便多地点使用和备份。

1. Harbor 高可用部署

Harbor 支持高可用部署,将多个 Harbor 和负载均衡集成,每一个 Harbor 通过对接 MySQL/Postgres、Redis 共享集群元数据,镜像仓库对接对象存储,从而将 Harbor 镜像仓库做成高可用的无状态服务。

2. Harbor 特点:镜像复制

Harbor 一个亮点是它的镜像复制功能,在多机房部署场景中,镜像需要在多个镜像仓库之间相互复制,Harbor 提供了多个镜像仓库复制的功能, 用户可以选择某个项目复制到指定远程仓库,触发模式包括手动、定时、和即刻。

Harbor 的镜像复制基于 Docker Registry API,内容通过状态机维护镜像推送状态。首先通过本地仓库 API 获取镜像元数据 manifest,从而获取分层的 Hash,校验镜像分层是否已经存在在远程仓库,如果不存在,则推送到远程仓库,最后上传元数据,完成镜像推送。

7.6.2 镜像分发加速方案 Dragonfly

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

Dragonfly 则是解决此类容器镜像资源管理和分发瓶颈的方案。

1. Dragonfly 介绍

Dragonfly 是阿里巴巴开源的容器镜像分发系统,旨在解决容器镜像分发效率低下和镜像共享依赖公共镜像仓库等问题。Dragonfly 的核心思想是基于 P2P 的镜像分发模型,以提高镜像传输速度和并发性,减少公共镜像仓库的依赖。

Dragonfly 的主要特点和优势如下:

  • 快速分发:利用 P2P 技术进行镜像分发,提高传输速度和并发性,支持自动发现、下载和缓存镜像。
  • 高效存储:支持镜像存储中心的横向扩展和透明级联,提供高可用和高扩展性的镜像存储方案。
  • 安全性:支持私有部署和访问权限管理,保证镜像传输和存储的安全性。
  • 易于部署:支持多种部署方式,如二进制包、容器和 Kubernetes Operator 等,方便快速部署和集成。

2. Dragonfly 运作流程

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 将将镜像分片文件组成完整的镜像。

  • 无标签

0 评论

你还没有登录。你所做的任何更改会将作者标记为匿名用户。 如果你已经拥有帐户,请登录