特稿 >

行业洞察 >

用Harbor和Kubernetes构建高可用企业级镜像仓库

用Harbor和Kubernetes构建高可用企业级镜像仓库

才云Caicloud 丨 行业洞察

11131
40

2017-04-07

赵逸禅

Xtecher特稿作者

关注

本文作者为才云Caicloud 高级软件工程师岑鹏浩,先后负责镜像仓库,容器云平台等产品研发,目前负责才云科技大数据平台与容器云平台整合的相关工作。2011 年毕业于电子科技大学微电子技术专业,曾于2010 年参与亚太大学生机器人大赛,代表电子科大获全国第一名,后代表中国队在埃及获金牌。


本文分享才云(Caicloud)使用Harbor 和Kubernetes 搭建高可用企业级镜像仓库的实践经验。才云是基于容器集群技术的服务平台创业公司,提供以Kubernetes 为基础的Cluster as a Service (ClaaS) 和TensorFlow as a Service (TaaS) 两款主打产品,Harbor 作为镜像仓库也集成在ClaaS 等产品中。


VMware 公司去年3月开源了企业级容器Registry 项目Harbor,由VMware 中国研发的团队负责开发。Harbor 可帮助用户迅速搭建企业级的registry 服务。它提供了管理图形界面, 基于角色的访问控制RBAC,镜像远程复制(同步),AD/LDAP 集成、以及审计日志等企业用户需求的功能,同时还原生支持中文和英文,深受国内外用户的喜爱。许多开源社区的开发者也给Harbor 项目添砖加瓦,贡献代码、反馈问题和提出建议。在大家共同努力下,Harbor 项目推出以来,在GitHub 获得了近2000个star 和500多个forks。


Harbor 架构简介


640.jpg


从上图我们可以看出,Harbor 的几个基础模块:


1、Nginx:负责请求转发,URL 以/v2/ 开始的请求会被转发到Docker Registry 中,其它请求由Admin Server 处理;

2、Admin Server:Harbor 的主体模块,提供Web UI 和RESTful API 以及Auth 相关功能;

3、Replication Service:提供多个Harbor 实例之间的镜像同步功能;

4、MySQL:Admin Server 和Replication Service 所用到的数据库;

5、Docker Registry:Docker 官方镜像仓库;

6、Image Storage:镜像的存储介质,可以是本地磁盘,或者分布式存储,根据Docker Registry 的配置而不同。


Harbor 高可用设计


提到系统的高可用性(High Availability),我们一般会从这几个方面来设计:


1、计算高可用;

2、存储高可用;

3、网络高可用;

4、其他方面;


这里,我们主要围绕前两个方面,即计算高可用和存储高可用来展开讨论。


640 (1).jpg


如上图所示,Replication Service 目前不支持多实例的并行同步,我们暂时去掉,只需要考虑其他模块,为了保证整个Harbor 系统的高可用,除Replication Service 以外的组件均需扩展为3 个;


方案1


独立的3 个Harbor 实例+ MySQL Galera 集群+ 镜像共享存储,如下图:


640 (2).jpg


3 个独立的Harbor 实例,通过一个Load Balancer 来做流量转发。同时采用了共享会话方式,把会话的信息保存在MySQL数据库中,这样无论哪个实例响应用户的请求,都不会丢失会话;


3 个Harbor 的Docker Registry 共享一个存放镜像数据的存储,例如阿里云OSS、GlusterFS、NFS 等,可参考Harbor或Docker Distribution的文档配置;MySQL 由于不能共享存储,采用了Galera 集群,这是一个多主的MySQL 集群,每个节点均可读可写,同时支持同步复制数据,保证了高可用,具体的部署在这里就不展开讨论,可以参考下面的链接:


GlusterFS,https://www.gluster.org/


Galera 集群,http://galeracluster.com/


方案2


独立的Harbor 子模块+ MySQL Galera 集群+ 镜像共享存储,如下图:


640 (3).jpg


独立的Harbor 子模块之间,通过负载均衡来通信,MySQL Galera 集群和镜像共享存储和方案1 基本一样。这个方案的优点是各个子模块相互独立,每个子模块都有2 个备份,通过负载均衡实现高可用,这里使用Kubernetes Service 非常容易实现LB,下面的章节会展开来说。


Harbor 基于Kubernetes 的高可用实现


这里我们选择上面的方案2,使用Kubernetes 的Replication Controller 来实现单个模块的备份,通过Service 来实现服务发现和负载均衡,如果不想用共享存储,可以用Kubernetes 提供的PV 和PVC(host path 模式),整体架构如下图所示:


640.jpg


下面步骤需要有一些Kubernetes 的背景知识,同时可参考在Harbor 的项目中的相关安装文档,https://github.com/vmware/harbor/blob/master/docs/kubernetes_deployment.md


Harbor 在Github 上的文档是基于单实例的配置,修改成多实例高可用架构的具体部署可以参考下面的介绍:


1、部署Replication Controller


make/kubernetes/**/*.rc.yaml文件里面定义的组件副本数目为1个,可修改为多个,例如:replicas: 3,如下图所示:


640 (1).jpg


2、部署ConfigMap


ConfigMap 可通过编辑harbor.cfg文件之后,由./prepare 脚本自动生成,存放在templates 目录下,以下是一个生成的yaml 文件样例:


640.jpg


3、部署PV & PVC


PV 和PVC 的配置定义了Harbor 每个组件使用的存储,缺省是本机文件系统,可以改成NFS,GlusterFS 等共享存储,以实现高可用。


640 (1).jpg


在Kubernetes 上启动Harbor 后,高可用的镜像仓库就完成了,可以通过Nginx 的服务地址来访问。部署开源Harbor 镜像仓库的详细信息,请参考


https://github.com/vmware/harbor/blob/master/docs/kubernetes_deployment.md

打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

账号登录

重置密码

还没有账号?立即注册>

账号注册

已有账号?立即登录>注册企业会员

重置密码

返回

绑定手机