2019独角兽企业重金招聘Python工程师标准>>>

Harbor: 跨数据中心复制Docker镜像的开源实现 博客分类: docker

VMware公司3月份开源了企业级Registry项目Harbor,由VMware中国研发的团队负责开发。Harbor可帮助用户迅速搭建企业级的registry 服务。它提供了管理图形界面, 基于角色的访问控制RBAC,镜像远程复制(同步),AD/LDAP集成、以及审计日志等企业用户需求的功能,同时还原生支持中文,深受中国用户的喜爱。该项目推出4多个月以来,在GitHub 获得了超过900多个点赞星星和200多个 forks,Github地址:

https://github.com/vmware/harbor

在最近发布的版本中,Harbor新增了基于策略的Docker镜像复制功能,可在不同的数据中心、不同的运行环境之间同步镜像,并提供友好的管理界面,大大简化了实际运维中的镜像管理工作,已经有用户部署了远程镜像双向复制的案例。本文将对该功能的实现原理做详细介绍。

Harbor镜像复制的管理界面

功能简介

在功能设计方面,Harbor仍然以“项目”为中心, 通过对项目配置“复制策略”,标明需要复制的项目以及镜像。管理员在复制策略中指明目标实例,即复制的“目的地”,并对它的地址和连接时使用的用户名密码进行设置。当复制策略被激活时,源项目下的所有镜像,都会被复制到目标实例;此外,当源项目下的镜像被添加或删除(push或delete), 只要策略还在激活状态,镜像的变化都会同步到目标实例上去, 如下图所示:

在较大的容器集群中,往往需要多个Registry服务器做负载均衡,可以采用主从发布模式,镜像只需要发布一次,就可以推送到多个Registry实例中。同时还支持双主复制和层次型的多级镜像发布,如下图所示: 

设计与实现

在不同的Registry实例之间复制镜像是十分普遍的需求,过去常见的做法是通过拷贝镜像数据,比如定期通过rsync同步文件系统中镜像的数据,或者,对于部署在IaaS服务上的情况,通过对IaaS存储服务一层进行配置实现对象复制,这些方法往往是根据registry使用的存储而采用不同工具。然而对于Harbor来说,我们希望降低这种依赖,并提高灵活性, 比如用户可能有一个开发用的registry使用文件系统作为存储,并希望把镜像同步到基于S3存储的远端发布用的registry上。考虑到这种情况,我们选择通过调用registry本身的API下载并传输镜像,从而做到了与下层存储无关。

在控制方面,我们引入了一个新的组件,Job Service,用来对镜像复制任务进行管理。当以项目为单位进行复制时,会以镜像为单位生成一系列任务(job)由Job Service 调度管理,Job Service在执行任务的过程中将每个任务的状态更新到数据库中, 以便用户通过UI查看。大体结构如下图所示:

下面介绍一下Job Service 的实现,从外部看它也是通过REST API接收请求调度并执行任务,面临的问题主要有两点,首先,接收到大量复制请求时需要进行限流以免消耗过多IO资源;其次,复制策略有可能在任务执行过程中改变,比如失效,这就需要一种机制能从外界对运行中的任务进行干预。

我们通过任务队列,分发器(dispatcher)和worker pool实现了生产者消费者模型,利用Go语言内置的channel,每个任务会通过scheduler放到channel里,dispatcher 通过channel获得任务,同时,worker在工作结束后会被放入另一个channel, dispatcher 通过这个channel与worker配对,于是,空闲的worker通过dispatcher获得任务id并执行任务,这样可以很方便地通过worker pool中 worker数量来控制并发数:

对于另一个问题,每一个 worker内部是一个抽象的状态机(state machine),通过给不同状态注册处理器(handler)完成具体工作,同时,状态机可以受到干预,可以中途取消(cancel)任务,或在任务执行发生异常时将任务置为错误(error)状态丢弃或交给调度器(scheduler)重试。 另外由于状态机的状态是可定制的,这样就很方便扩展和调整。对于一个抽象的任务来说,它的状态转移如下图所示: 

而对于具体远程同步镜像的任务来说,Running 状态会被进一步细分成多个子状态,如下图所示:

首先, 从源Harbor实例下载相应tag的manifest,分析其所包含的blob,针对每一个blob,检查其在目标实例中是否已经存在,如果不存在,则同步此blob。最后,检查manifest在目标实例中是否已存在,如果不存在,则上传manifest。检查blob的存在性,可以有效减少不必要的网络流量;而由于manifest的上传有可能会触发镜像的同步,所以对manifest存在性的检查,则可以避免当同步的多个Harbor形成环路时进入不断同步的死循环状态。对同一个镜像中的每一个tag重复以上过程,就可以完成整个镜像的同步工作。

总结与展望

本文介绍了Harbor新版本中远程镜像复制功能的设计与实现。今后我们将对此功能进行扩展,比如在策略(policy)中加入更加丰富的控制和过滤条件方便用户选择需要复制的镜像,以及控制复制的发生时间等。也希望读者和用户们在多向我们提供反馈意见。Harbor项目网址:

https://github.com/vmware/harbor

https://my.oschina.net/vmwareharbor/blog/728085

转载于:https://my.oschina.net/xiaominmin/blog/1598684

Harbor: 跨数据中心复制Docker镜像的开源实现相关推荐

  1. 跨数据中心场景下,kafka集群部署模式

    kafka在多数据中心场景下和单数据中心的场景部署是一样的吗?kafka的性能对分布式系统而言,非常重要.一旦延迟较大的情况下,应该如何部署. 一.为什么要跨数据中心部署? 大型的分布式软件,发展到一 ...

  2. mysql集群跨地域同步部署_跨地域冗余 - 跨数据中心部署方案 - 《TiDB v2.1 用户文档》 - 书栈网 · BookStack...

    跨数据中心部署方案 作为 NewSQL 数据库,TiDB 兼顾了传统关系型数据库的优秀特性以及 NoSQL 数据库可扩展性,以及跨数据中心(下文简称"中心")场景下的高可用.本文档 ...

  3. mysql异地双活架构,银行跨数据中心数据库双活架构设计:五大难点攻克

    银行跨数据中心数据库双活架构设计:五大难点攻克 发布时间:2018-12-09 10:21, 浏览次数:327 数据库双活技术已成为企业重点关注的对象,社区最近组织了交流活动,以帮助大家更好的明确理解 ...

  4. 银行跨数据中心数据库双活架构设计:五大难点攻克

    数据库双活技术已成为企业重点关注的对象,社区最近组织了交流活动,以帮助大家更好的明确理解数据中心建设.我们将活动内容总结为设计原则.技术选型和五大难点攻克. 前篇见:银行跨数据中心数据库双活架构设计: ...

  5. 数据中心安全风控_平安银行Hadoop集群跨数据中心迁移项目告捷项目骨干专访

    Hadoop集群跨数据中心迁移 平安银行东莞数据中心建成 平安银行科技中心零售大数据团队 平安银行科技中心科技运营中心 群迁告捷 经过平安银行科技运营中心和大数据团队的不懈努力,作为平安银行AI战略转 ...

  6. 流量和延迟减半!挑战 TiDB 跨数据中心难题

    作者 | .* team 责编 | Elle 众所周知,在对可用性要求极高的行业领域(比如金融.通信),分布式数据库需要跨地域的在多个数据中心之间建立容灾以及多活的系统架构,同时需要保持数据完整可用. ...

  7. Windows Azure Virtual Network (13) 跨数据中心之间的虚拟网络点对点连接VNet Peering

    <Windows Azure Platform 系列文章目录> 今天是大年初二,首先祝大家新年快乐,万事如意. 在笔者之前的文章中:Windows Azure Virtual Networ ...

  8. linux怎么跨节点访问数据,Apache Cassandra多节点跨数据中心集群配置以及日常操作...

    Cassandra是去中心化的集群架构,没有传统集群的中心节点,各个节点地位都是平等的,通过Gossip协议维持集群中的节点信息.为了使集群中的各节点在启动时能发现其他节点,需要指定种子节点(seed ...

  9. 流量和延迟减半!挑战分布式数据库 TiDB 跨数据中心难题

    众所周知,在对可用性要求极高的行业领域(比如金融.通信),分布式数据库需要跨地域的在多个数据中心之间建立容灾以及多活的系统架构,同时需要保持数据完整可用.但这种方式同时也带来了一些问题: 跨地域的网络 ...

最新文章

  1. 北斗词卡(三):带你了解北斗相关的国际组织缩写
  2. 国家服务器1eb硬盘,仅一个月:奇亚币已占用超过1EB存储空间
  3. vuex保存用户信息_你想要的,vuex干货分享
  4. github网址无法访问怎么办?
  5. NOIP模拟测试39,思维禁锢专场「工业题·玄学题·卡常题」
  6. 利用melendy插入参考文献_四苯基卟啉在改性磷酸锆层间的插入及荧光增强
  7. centos7 wps安装
  8. 地图导航软件测试大乐,敢问路在何方?四款手机地图软件横向测评!
  9. cesium之三维漫游飞行效果实现篇(转)
  10. 复数的指数C语言,复数运算 - RapidBird的个人空间 - OSCHINA - 中文开源技术交流社区...
  11. 华为产品升级及打补丁具体步骤
  12. 从面试官的视角来提升面试者的必须具备的IT技能
  13. 【AI视野·今日CV 计算机视觉论文速览 第231期】Mon, 5 Jul 2021
  14. linux 生成dump文件
  15. Markdown使用教程(详细)
  16. SVD and LSI Tutorial 1 Understanding SVD and LSI
  17. Arduino编译Marlin1.1出现 fatal error: U8glib.h: No such file or directory如何解决
  18. 国外cpa广告联盟emu项目最新介绍
  19. 扎拉赞恩 服务器 微信群,扎拉赞恩的头颅在哪_魔兽怀旧服扎拉赞恩的头颅位置_快吧游戏...
  20. NVIDIA GPU MIG

热门文章

  1. Win7旗舰版系统右键菜单响应速度很慢会延迟一段时间
  2. EasyUI表单验证,自定义插件验证,自定义js插件验证,远程验证,常见手机号,中英文,qq等验证规则验证...
  3. sap服务器应用webservice加载spring的机制问题
  4. 寻找带环的链表的柄长
  5. homework-04
  6. PDF编辑软件Nitro PDF Professional 6
  7. 【转】js获取url传值
  8. flannel 的连通与隔离 - 每天5分钟玩转 Docker 容器技术(61)
  9. MemberShip使用大全
  10. 3.8 采购协议管理