本文分享才云(Caicloud)使用Harbor和Kubernetes搭建高可用企业级镜像仓库的实践经验。才云是基于容器集群技术的服务平台创业公司,提供以Kubernetes为基础的Cluster as a Service (ClaaS)和TensorFlowas a Service(TaaS)两款主打产品,Harbor作为镜像仓库也集成在ClaaS等产品中。 VMware 公司去年3月开源了企业级容器 Registry 项目 Harbor,由 VMware 中国研发的团队负责开发。Harbor 可帮助用户迅速搭建企业级的 registry服务。它提供了管理图形界面,基于角色的访问控制 RBAC,镜像远程复制(同步),AD/LDAP 集成、以及审计日志等企业用户需求的功能,同时还原生支持中文和英文,深受国内外用户的喜爱。许多开源社区的开发者也给 Harbor 项目添砖加瓦,贡献代码、反馈问题和提出建议。在大家共同努力下,Harbor 项目推出以来,在 GitHub获得了近2000个 star 和500多个forks。 从上图我们可以看出,Harbor的几个基础模块: 1、Nginx:负责请求转发,URL以/v2/开始的请求会被转发到Docker Registry中,其它请求由Admin Server处理; 2、Admin Server:Harbor的主体模块,提供Web UI和RESTfulAPI以及Auth相关功能; 3、Replication Service:提供多个Harbor实例之间的镜像同步功能; 4、MySQL:Admin Server和Replication Service所用到的数据库; 5、Docker Registry:Docker官方镜像仓库; 6、Image Storage:镜像的存储介质,可以是本地磁盘,或者分布式存储,根据Docker Registry的配置而不同; 提到系统的高可用性(High Availability),我们一般会从这几个方面来设计:
1、计算高可用; 2、存储高可用; 3、网络高可用; 4、其他方面; 这里,我们主要围绕前两个方面,即计算高可用和存储高可用来展开讨论。 如上图所示,Replication Service目前不支持多实例的并行同步,我们暂时去掉,只需要考虑其他模块,为了保证整个Harbor系统的高可用,除Replication Service以外的组件均需扩展为3个; 方案1 独立的3个Harbor实例 MySQLGalera集群 镜像共享存储,如下图:3个独立的Harbor实例,通过一个Load Balancer来做流量转发。同时采用了共享会话方式,把会话的信息保存在MySQL数据库中,这样无论哪个实例响应用户的请求,都不会丢失会话; 3个Harbor的DockerRegistry共享一个存放镜像数据的存储,例如阿里云OSS、GlusterFS、NFS等,可参考Harbor或DockerDistribution的文档配置;MySQL由于不能共享存储,采用了Galera集群,这是一个多主的MySQL集群,每个节点均可读可写,同时支持同步复制数据,保证了高可用,具体的部署在这里就不展开讨论,可以参考下面的链接: GlusterFS,https://www.gluster.org/ Galera集群,http://galeracluster.com/ 方案2 独立的Harbor子模块 MySQLGalera集群 镜像共享存储,如下图:独立的Harbor子模块之间,通过负载均衡来通信,MySQLGalera集群和镜像共享存储和方案1基本一样。这个方案的优点是各个子模块相互独立,每个子模块都有2个备份,通过负载均衡实现高可用,这里使用 Kubernetes Service非常容易实现LB,下面的章节会展开来说。 这里我们选择上面的方案2,使用Kubernetes的Replication Controller来实现单个模块的备份,通过Service来实现服务发现和负载均衡,如果不想用共享存储,可以用Kubernetes提供的PV和PVC(host path模式),整体架构如下图所示: 下面步骤需要有一些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,如下图所示: 2、部署ConfigMap ConfigMap 可通过编辑harbor.cfg文件之后,由./prepare 脚本自动生成,存放在 templates 目录下,以下是一个生成的 yaml 文件样例:
3、部署PV |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|