目录:
1.背景
2.开源Docker Registry的不足
3.新的选择--Harbor
4.Harbor的使用
背景
公司于去年启动了新一代数字化企业云平台的研发,基于DevOps打造新一代的企业云计算平台,底层的容器云平台是重要的可选组件。容器云目前启动了第三版的重构,一些组件又有了重新选型的机会。
DevOps这个概念已经出来很多年了,相信大家已经不陌生了,说简单点,它就是开发(Development)和运维(Operations)这两个领域的合并。那么为什么要合并这两个领域?原因很多,但首要原因是:目前这两个领域的工作流程是脱节的,绝对的脱节。很多公司的开发部门和运维部门之间存在的深刻矛盾,其实就是这个“脱节”造成的。
开发部门在产品研发的时候,没有充分考虑部署要求,开发完了只管丢给运维去上线。运维拿到东西上线困难,回来找开发,开发却不一定认可,双方扯来扯去,最后开发修改,运维又有问题再来回找开发,不断循环。最后导致整个产品上线效率低下,运行不稳定。
公司的新一代数字化企业云平台,就是希望基于Devops理念,为企业打造集人员,需求,开发,自动构建,测试,运维一体的企业云平台。我们来看一下我们平台整体的逻辑架构:
从上图可以看出,平台在逻辑上是分成多层的,硬件上有基础设施平台,基础设施平台上又有基础服务平台,最上层则是各种微应用。DevoOps则是纵跨多层,它由多个领域系统构成,如TM(租户管理),PM(项目管理),SRM(软件资源管理),SCM(软件配置管理)等等,协调并管理整个平台资源。其中,基础设施平台中有IaaS,也有CaaS。IaaS与CaaS都是可选组件,他们可以只有一个,也可以两者都有。两者都有的时候,CaaS可以存在于IaaS之中。这里图中的CaaS指的是我们的容器云。
我们再来看一下我们的DevOps平台的整体技术选型:
如图,在选型时,我们将整个平台主要分成了三块。容器云对应基础设施层中的容器层。容器目前采用的是Docker, 平台管理用了谷歌的kubernetes, 容器网络目前是用的flannel,dns用的skydns, 平台系统使用的是coreos。容器镜像仓库,容器云的前两个小版本,我们使用的是开源的Docker Registry,配合nginx搭建容器镜像私库,使用还比较稳定,但也发现了它的一些不足。
开源Docker Registry的不足
同很多团队进行容器云构建的初始阶段一样,一开始我们并不太注重安全,容器仓库一般都是配置成insecure-registry直接使用。这次,我们决定加强安全方面的控制。我们发现了它的一些不足如下:
要想补上这些缺点,需要在自已的容器云中做一些加强,需要工作量。除了Docker Registry,还有没有其它的选择,已经补齐了这些能力,或部分补齐了呢?于是,我们做了一点小了解。
目前业界可选的Containger Registry主要有如下:
Docker Hub相信大家都不陌生,用来做私库的源库是可以的,可以将一些基础镜像从这个云库拉到私库中。它并不适合在容器云中直接使用,下载镜像时需要连外网,速度也是个大问题。
Docker Registry就不说了,接下来的Quay.io,CoreOS Enterprise Registry是付费的,或者是商业付费的,不考虑。Nexus 3有图形化的管理页面可以操作镜像,但其它的能力与Docker Registry差不多。最后看到的harbor,则令我们眼前一亮。
新的选择--Harbor
Harbor是VMware公司于2016年开源的企业级Docker Registry项目。它是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。
作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。
Harbor的特点如下:
Harbor基于Docker Registry做了增强,添加了很多企业级管理需要的能力,使原来能力较弱的Docker Registry更适合于生产环境中使用。
我们再看看Harbor的整体架构:
Harbor在架构上主要由五个组件构成:
我们再来看一个harbor的核心概念
以上是Harbor的核心概念。一个项目可以看成一个用户的小私库,项目成员按照其角色,可以上传,下载,删除镜像,或添加删除成员等。系统管理员可以创建镜像库复制目标,为项目设置复制策略,可以从其它的镜像库复制镜像过来。复制策略会产生复制任务。项目下面可拥有多个镜像,而每个镜像则可以有多个镜像标签。项目包含日志。
Harbor的使用
harbor提供了web ui。我们来看一下harbor是如何使用的:
首先是通过管理员创建新的用户,然后登陆至新用户,使用新用户创建项目。这样新用户就会自动成为这个用户的项目管理员。
接下来可以使用新创建的用户,在docker命令行中登陆至镜像仓库,并上传镜像。注意,登陆的时候,指定为整个镜像仓库的地址,而不是仓库地址加项目名称。镜像要上传至指定项目下,需要为镜像打上 "镜像仓库地址/项目名/镜像名:镜像tag" 这样格式的tag,再去执行镜像上传才可以。
镜像上传完成了,可以在web ui中项目下看到它的信息。可以在web页面中很方便地删除整个镜像,或者删除镜像的单个Tag。使用docker client登陆之后,也可以下载到上传上去的镜像。
项目创建之后,项目管理员可以再为项目添加新的成员。成员有角色之分,项目管理员,开发人员与访客。项目管理员有最大的权限,开发人员可以上传下载删除镜像,访客只能下载镜像。
系统管理员可以创建复制目标,以便为项目创建复制策略。创建复制目标时,需要指定目标的url及用户名与密码。目标可以是harbor,也可以就是docker registry。
复制目标创建好了,就可以在项目下创建复制策略。复制策略一创建好,马上就会启动复制任务,将项目下的镜像push至目标仓库。同步时,只同步镜像,harbor的项目等不在同步范围之内。
这一篇主要讲了我们选型harbor的过程。并没有做太多的对比研究,主要还是沿着原来的老路子,只是有了更完善的方案。然后介绍了一下harbor的特点,架构及核心概念,最后以harbor本身的web-ui为例,介绍了harbor的使用,主的是让大家对harbor有一个比较全面的了解。
下一篇中,我们将着重介绍harbor的用户,同步与复制等设计,以及harbor的部署,如何集成,有兴趣的同学欢迎持续关注。
关于作者:
秦双春
现任普元云计算架构师。曾在PDM,云计算,数据备份,移动互联相关领域公司工作,10年IT工作经验。曾任上海科企软件桌面虚拟化产品的核心工程师,主导过爱数TxCloud云柜的设计与开发,主导过万达信息的食安管理与追溯平台的移动平台开发。国内云计算的早期实践者,开源技术爱好者,容器技术专家。