前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Harbor和Kubernetes构建高可用企业级镜像仓库

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

作者头像
Henry Zhang
发布2019-04-12 16:56:15
7530
发布2019-04-12 16:56:15
举报
文章被收录于专栏:亨利笔记亨利笔记

题图摄于西雅图

编者:本文介绍了在 Kubernetes (K8s) 上配置共享存储和多实例服务,实现高可用的 Harbor 企业级容器镜像仓库。编者做了少量修改。

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

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

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

Harbor 架构简介

从上图我们可以看出,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. 其他方面;

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

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

方案 1:

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

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 集群 + 镜像共享存储,如下图:

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

Harbor 基于 Kubernetes 的高可用实现

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

下面步骤需要有一些 Kubernetes 的背景知识,同时可参考在 Harbor 的项目中的相关安装文档。

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

1. 部署 Replication Controller

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

2. 部署 ConfigMap

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

3. 部署 PV & PVC

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 亨利笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档