写点什么

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

  • 2020-03-06
  • 本文字数:1678 字

    阅读完需:约 6 分钟

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

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

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 的项目中的相关安装文档,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 & PVC


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



本文转载自才云 Caicloud 公众号。


原文链接:https://mp.weixin.qq.com/s/Tj7XGo023h3zXOpxDtkNMQ


2020-03-06 20:461037

评论

发布
暂无评论
发现更多内容

软件测试 | 测试开发 | 使用 ReportLab 绘制 PDF

测吧(北京)科技有限公司

测试

架构实战营模块1作业

乖乖IvyShine

刘奇:能否掌控复杂性,决定着分布式数据库的生死存亡

PingCAP

#TiDB

企业级npm仓库搭建

龙之幽谷

前端 nexus NPM仓库

如何建设前端物料平台?

龙之幽谷

前端 组件化

新书上市 | 连接组,向人类科学的最终前沿进军

图灵社区

神经网络 大脑 脑科学

Eclipse Theia技术揭秘——自定义布局

龙之幽谷

开发工具

软件测试 | 测试开发 | Spring boot 之 RestTemplate访问

测吧(北京)科技有限公司

测试

医疗卫生机构应该多久进行一次等保测评?

行云管家

网络安全 信息安全 等保测评 等级测评

Forrester发布中国数据治理生态报告,亚信科技AntDB数据库等四款数智产品入选

亚信AntDB数据库

AntDB AntDB数据库

新书上市 | 连接组,向人类科学的最终前沿进军

图灵教育

神经网络 大脑 脑科学

VSCode技术揭秘(一)

龙之幽谷

vscode 开发工具

认识 ESP-IDF-v4.3+工程结构(ESP32-C3应用调整示例)

矜辰所致

ESP32-C3 9月月更 ESP-IDF

软件测试 | 测试开发 | Golang死信队列的使用

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | gitlab 服务端 hook, 拦截糟糕的提交到仓库

测吧(北京)科技有限公司

测试

Eclipse Theia技术揭秘——初识Theia

龙之幽谷

开发工具

企业级前端组件建设

龙之幽谷

前端 组件库

JS基础——JS数据类型

龙之幽谷

前端 js

软件测试 | 测试开发 | Pytorch GPU 训练环境搭建

测吧(北京)科技有限公司

测试

leetcode 572. Subtree of Another Tree 另一棵树的子树 (简单)

okokabcd

LeetCode 数据结构与算法

软件测试 | 测试开发 | 一种能有效缓解环境噪声对音频质量干扰的方案

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | InfluxDB 2.0 原理与应用实践

测吧(北京)科技有限公司

测试

元年洞察|数字化转型进程中的创新技术菜谱

元年技术洞察

数据中台 数字化转型 趋势研究

软件测试 | 测试开发 | Shell 进程通过 ContentProvider 实现跨进程通信

测吧(北京)科技有限公司

测试

MobSDK 客户端API

MobTech袤博科技

API an'droid

Eclipse Theia技术揭秘——脚手架源码分析

龙之幽谷

开发工具

软件测试 | 测试开发 | 利用 rpush 和 blpop 实现 Redis 消息队列

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | 自定义form表单验证

测吧(北京)科技有限公司

测试

运维学网络安全还是云计算好?哪个更有前景?

行云管家

云计算 运维 网络安全

Eclipse Theia技术揭秘——构建桌面IDE

龙之幽谷

开发工具

用 nodejs 搭建脚手架

coder2028

node.js

用 Harbor 和 Kubernetes 构建高可用企业级镜像仓库_行业深度_才云科技_InfoQ精选文章