京东与Harbor一起走过的这四年
Harbor开源镜像仓库项目在2016年发布,正是在这一年Harbor引起了我们的关注,同时我们成为了Harbor的早期用户之一,其实这也是伴随着京东容器化的建设之路而来的。2016年初,在京东,技术架构部已经开启了全面的容器化建设的道路,同时也是在这一年选择了Kubernetes作为计算资源编排的方案。2018年一个偶然的机会, 我曾与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,(目前为 CNCF 沙箱项目)这是一个为云原生应用提供高可用性分布式文件系统与对象存储的融合存储项目,为云原生应用提供计算与芒分离的持久化解决方案。高可扩展性强、高性能,支持多租户,一份主机同时支持POSIX接口和S3对象存储接口同时访问。在京东的应用中,多个Harbor实例可以同时使用ChubaoFS共享容器镜像,它给Harbor提供了稳定的,可弹性扩展的,高性能的分布式存储服务。
Harbor加上ChubaoFS构建的高可用的镜像中心架构可参考下图。运行Harbor的多个实例,组成Harbor集群,后端存储接ChubaoFS,数据库接京东的数据库,这样就实现了一个高可用的镜像中心集群。
Harbor使用ChubaoFS的方式
把ChubaoFS直接挂载到宿主机,使用方式类似本地文件系统,对应到registry配置文件中的distribution组件,存储直接用filesystem, 然后rootdirectory设置成ChubaoFS的挂载点。
跨区域使用缓存优化镜像拉取
由于数据中心会分布在不同的区域,因此在使用过程中,跨机房拉取镜像时,很容易占用到本机房到后端存储的带宽,从而影响性能。为了解决这个问题,我们在每个机房搭建本地Harbor集群,然后通过设置缓存来做优化镜像的拉取。这样,在第一次拉取请求到来的时候,会到后端存储拉取放到缓存;后续请求,直接从本机房的缓存走,不会挤占带宽,从而大大提升了性能以及服务的质量。
Harbor 对京东的影响堪称深远。Harbor 操作简单、运行稳定,为我们节省了大约 60% 的镜像中央存储库维护时间。此外,用 Harbor 还可以做镜像授权认证和访问控制,这些在以前都是没办法实现的。
数千个节点、上万容器镜像和数十兆兆字节容器镜像数据量—京东的超大规模让我们必须采用某些最佳实践。我们的数据中心分布在不同的地方,拉取镜像时就会有性能问题, V为了解决问题,我们用缓存在本地数据中心建了 Habor 集群,从而优化了镜像拉取的性能,提高了服务质量。
总而言之,Harbor 使用简便,我们推荐 Harbor,是因为它具有稳定性、计算资源管理、UI 管理、整合chart和镜像漏洞扫描等功能特点。”
同时,Harbor 非常契合京东的“零售作为服务”战略。Harbor 是一个开源项目,众多贡献者会助力其持续发展,这符合我们开源技术的初心与使命,也能让各行各业的合作伙伴共同受益。
参考:
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