写点什么

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

评论

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

Rust从0到1-面向对象编程-概念

rust oop 面向对象编程

[翻译]innodb_ruby 项目简介

keaper

MySQL 数据库 后端 服务端 innodb

“吴痛针灸”代言人翻车,为什么女性会重新定义品牌优势

脑极体

Linux之ln命令

入门小站

Linux

MERN堆栈

吴脑的键客

node.js mongodb React Express

华为云UGO正式公测:4大核心优势破解异构数据库迁移难题

华为云开发者联盟

数据库 华为云数据库 异构数据库 对象迁移 应用迁移

倒计时 | 7.24 阿里云 Serverless Developer Meetup 杭州站报名火热进行中!

Serverless Devs

阿里云 Serverless 云原生

char+char=number

喵叔

7月日更

微信朋友圈高性能复杂度分析

木云先森

架构实战营

Go语言,什么情况下应该使用指针?

微客鸟窝

Go 语言

【LeetCode】两个链表的第一个公共节点Java题解

Albert

算法 LeetCode 7月日更

大数据实战训练营作业一

Clarke

云小课|ModelArts Pro 视觉套件:零代码构建视觉AI应用

华为云开发者联盟

AI 零代码 ModelArts Pro 行业落地 视觉套件

🐬【MySQL技术导航】常用函数介绍(1)

洛神灬殇

MySQL 7月日更

Vue进阶(三十五):watch监听函数详解

No Silver Bullet

Vue 7月日更 watch

基于迁移学习的语义分割算法分享与代码复现

华为云开发者联盟

语义分割 modelarts 迁移学习 语义分割算法 迁移分割

浪潮云洲×天人集团:打通数据脉络 驱动降本增效

【从零开始学爬虫】采集西瓜直播视频

前嗅大数据

大数据 爬虫 数据采集

微信朋友圈复杂度分析

桂阳

现代企业架构师的5大特征及六种方法

禅道项目管理

架构 数据 开发 创新 行业趋势

使用Docker运行OnlyOffice的Node.js示例

一个需求

onlyoffice

面向资源的架构(ROA)概述

码语者

SOA ROA

在线XML转CSV工具

入门小站

Redis 的集群容错与故障转移

U2647

redis redis哨兵模式 集群 redis cluster Leader

【架构训练营】模块二作业

zclau

Python OpenCV 图像的几何变换,先说不平凡的 resize 函数

梦想橡皮擦

Python 7月日更

【Flutter 专题】80 初识 Flutter Stream (一)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 7月日更

Vue进阶(幺玖肆):localStorage应用总结

No Silver Bullet

Vue LocalStorage 7月日更

大数据实战训练营作业二

Clarke

使用dubbo-go搭建dubbo接口测试平台

捉虫大师

dubbo 接口测试 dubbo-go Go 语言

手把手教你在Modelarts平台上进行视频推理

华为云开发者联盟

视频 modelarts 推理 预处理 视频推理

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