写点什么

用 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:461103

评论

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

一文读懂Okaleido Tiger近期动态,挖掘背后价值与潜力

西柚子

DDD领域驱动设计如何进行工程化落地

慕枫技术笔记

DDD 架构设计 7月月更

PLATO上线LAAS协议Elephant Swap,用户可借此获得溢价收益

鳄鱼视界

编码用这16个命名规则能让你少写一半以上的注释!

岛上码农

flutter ios 前端 安卓开发 签约计划第三季

基于对象的实时空间音频渲染丨Dev for Dev 专栏

声网

Dev for Dev 空间音频 实时互动

一文读懂Okaleido Tiger近期动态,挖掘背后价值与潜力

鳄鱼视界

2022必会的前端面试手写题

buchila11

React Refs 笔记📝

程序员海军

React 7月月更

SpringBoot基于异常处理exception发送邮件消息提醒

宁在春

springboot 7月月更

深开鸿:万物智联的大江上,升起一轮开源鸿蒙月

脑极体

React Fragment

程序员海军

7月月更

一文读懂Okaleido Tiger近期动态,挖掘背后价值与潜力

股市老人

年中总结 | 与自己对话,活在当下,每走一步都算数

宇宙之一粟

年中总结 7月月更

leetcode 763. Partition Labels 划分字母区间(中等)

okokabcd

LeetCode 数据结构与算法 贪心算法

研发效能的道法术器

laofo

DevOps cicd 研发效能 基础设施 持续交付

第二轮1000个Okaleido Tiger,再次登录Binance NFT 1小时售罄

BlockChain先知

快手重点整治搬运、洗稿等方式的养号行为,自媒体平台如何净化内容生态

石头IT视角

Bootstrap Affix和过渡效果插件的详细使用【前端Bootstrap框架】

恒山其若陋兮

7月月更

centos8快速安装mongdb6.0

技能实验室

学习Typescript(二)

bo

前端 ts 7月月更

openEuler Embedded SIG | 分布式软总线

openEuler

开源 分布式 操作系统 嵌入式 openEuler

Prometheus 的 API 稳定性保障

耳东@Erdong

Prometheus API 7月月更

requestVideoFrameCallback() 简单实例

devpoint

3D 视频处理 7月月更

PlatoFarm社区生态福音,用户可借助Elephant Swap获得溢价收益

股市老人

elasticsearch实战三部曲之一:索引操作

程序员欣宸

Java elasticsearch 7月月更

英特尔数据中心GPU正式发货,以开放灵活提供强劲算力

科技新消息

智能电视与小程序的结合

Geek_99967b

物联网

被忽视的智能电视小程序领域

Geek_99967b

物联网

C# 之 volatile关键字解析

陈言必行

7月月更

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