开发者中心 > 专栏 > 内容详情
分享
  • 打开微信扫码分享

  • 点击前往QQ分享

  • 点击前往微博分享

  • 点击复制链接

京东与Harbor一起走过的这三年

  • ChubaoFS
  • 2020-05-07

WechatIMG1475.jpeg


Harbor项目在2016年开源,正是在这一年Harbor引起了我们的关注,同时我们成为了Harbor的早期用户之一,其实这也是伴随着京东容器化的建设之路而来的。2016年初,在京东,技术架构部已经开启了全面的容器化建设的道路,同时也是在这一年选择了Kubernetes作为计算资源编排的方案。去年一个偶然的机会, 我曾与CNCF的COO Chris Aniszczyk聊起这个话题的时候,他也提到我们其实是使用Kubernetes的早期用户之一,可以算是先驱者。因为那个时候,Kubernetes 也刚刚开源也就差不多一年的时间,用户还不是很多,同时CNCF也才成立一年。


最初我们使用的是原生的registry, 但是在使用过程中我们发现它存在一些问题。首先是需要实现授权认证;另外获取镜像的元信息,比如说tag列表,镜像列表等,原生registry是通过遍历文件系统来实现,我们发现性能不是很好。这个时候,京东商城的镜像中心由registry 1.0转到2.0. 同时Harbor基于项目的权限管理和pull,push的访问控制功能引起了我们的兴趣,同时harbor还提供了一个数据库,这个比较重要,一些镜像中心信息直接从数据库中获取,而不是从distribution(registry2.0的开源库)中轮询存储系统去获取,比如镜像列表信息,镜像tag列表等,性能有了很大的提升。因此我们选择了Harbor作为我们私有镜像库的基础,也就是从这个时候我们开始了与Harbor的不解之缘。 


因此从2016作为Harbor的忠实用户开始,我们也都随时关注这Harbor项目的发展,新功能的不断完善,新版release的发布,以及不断壮大的社区,和越来原多的贡献者。考虑我们生产环境实际使用的使用情况和需求,在接下来的2年里,我们也随着Harbor的不断升级以及新功能的引入;我们也增加了一些比较实用的功能, 比如镜像安全漏洞扫描,镜像签名,以及helm chart仓库支持和用户资源配额管理,如能管理CPU,内存,以及磁盘空间等。在构建镜像完成之后,部署到Kubernetes集群之前,进行镜像漏洞扫描,提供必要的镜像漏洞升级更新流程来保证镜像的安全性。同时,定期的对公共镜像和基础镜像进行升级更新,保证自身镜像安全性。对于高可用, 我们通过启动多个实例,来保证服务的高可用性,同时后端接同一个ChubaoFS文件存储,来保证数据一致性。

 

随着京东业务的快速发展,由Harbor支撑的镜像仓库也在不断的发展壮大, 同时也承载了越来越多的使用量。生产系统的容器数量已经拥有几十万个,节点数量也有几万个。目前在京东商城主站,它已经承接了几千个项目,镜像总量达到几十万, 镜像存储的数据量也增长到几十TB; 同时以Harbor为基础的镜像中心还服务于京东的海外站,比如泰国站和印尼站,其数据增长的速度也是相当快的,要运营这样庞大的镜像中心其实也是非常耗费成本的。不过正是由于Harbor的简单易用,以及很好的稳定性,在实际的运营中大大节省了我们维护镜像中心的时间成本以及人力成本。



Harbor后端存储解决方案:Harbor+ChubaoFS= High Availability Image Center


随着业务量的增长,存储镜像的数据会变得越来越庞大,因此就需要一个稳定的,可靠的,高性能的存储方案。目前在京东,我们选择的了ChubaoFS作为Harbor后端存储方案,ChubaoFS是为云原生应用提供分布式文件存储服务的开源项目,在京东的应用中,多个Harbor实例可以同时使用ChubaoFS共享容器镜像,它给Harbor提供了稳定的,可弹性扩展的,高性能的分布式存储服务。


Harbor加上ChubaoFS构建的高可用的镜像中心架构可参考下图。运行Harbor的多个实例,组成Harbor集群,后端存储接ChubaoFS,数据库接京东的数据库,这样就实现了一个高可用的镜像中心集群。 


640.png


Harbor使用ChubaoFS的方式


把ChubaoFS直接挂载到宿主机,使用方式类似本地文件系统,对应到registry配置文件中的distribution组件,存储直接用filesystem, 然后rootdirectory设置成ChubaoFS的挂载点。


640.png


跨区域使用缓存优化镜像拉取


由于数据中心会分布在不同的区域,因此在使用过程中,跨机房拉取镜像时,很容易占用到本机房到后端存储的带宽,从而影响性能。 为了解决这个问题,我们在每个机房搭建本地Harbor集群,然后通过设置缓存来做优化镜像的拉取。这样,在第一次拉取请求到来的时候,会到后端存储拉取放到缓存;后续请求,直接从本机房的缓存走,不会挤占带宽,从而大大提升了性能以及服务的质量。


640.jpg


参考:

ChubaoFS是为云原生应用提供分布式文件存储服务的开源项目:

https://github.com/chubaofs/chubaofs

ChubaoFS设计相关论文,收录在ACM SIGMOD 2019:CFS: A Distributed File System for Large Scale Container Platforms:

https://dl.acm.org/citation.cfm?doid=3299869.3314046


作者简介:

张丽颖:CNCF Ambassador | JD Product Manager

梁晓雷:JD Senior Software Engineer


共0条评论