文档章节

Harbor介绍及我们的改造

WaltonWang
 WaltonWang
发布于 2017/01/22 20:30
字数 1136
阅读 447
收藏 3

说明:我们是基于Harbor V0.4.1进行分析和改造的。 ##为什么不是直接使用Registry V2,而选用Harbor? ###可以用Harbor做以下事情:

  • Manage your projects.
  • Manage members of a project.
  • Replicate projects to a remote registry.
  • Search projects and repositories.
  • Manage Harbor system if you are the system administrator:
  • Manage users.
  • Manage destinations.
  • Manage replication policies.
  • Pull and push images using Docker client.
  • Delete repositories.

###Harbor提供RBAC (Role Based Access Control)能力

  • Guest: Guest has read-only privilege for a specified project.
  • Developer: Developer has read and write privileges for a project.
  • ProjectAdmin: When creating a new project, you will be assigned the "ProjectAdmin" role to the project. Besides read-write privileges, the "ProjectAdmin" also has some management privileges, such as adding and removing members.
  • SysAdmin: "SysAdmin" has the most privileges. In addition to the privileges mentioned above, "SysAdmin" can also list all projects, set an ordinary user as administrator and delete users. The public project "library" is also owned by the administrator.
  • Anonymous: When a user is not logged in, the user is considered as an "anonymous" user. An anonymous user has no access to private projects and has read-only access to public projects.

在我们的生产环境中,不会启动Anonymous用户。

###Harbor支持2种Project Types

  • Public: All users have the read privilege to a public project, it‘s convenient for you to share some repositories with others in this way.
  • Private: A private project can only be accessed by users with proper privileges.

##Harbor的架构 Harbor架构

##Harbor Workflow the workflow of docker login to harbor

the workflow of docker push to harbor

具体的架构说明和workflow说明请移步https://github.com/vmware/harbor/wiki/Architecture-Overview-of-Harbor

###Harbor replicate功能源码分析 Harbor中一个非常重要的功能就是同步复制,下面是我基于Harbor v0.4.1版本的代码做的源码分析,标明了其中我认为比较重要的逻辑。 code analysis for harbor replicate

注意,目前只支持从一个Harbor Instance同步到另一个或者多个Harbor Instance,不支持Target为Registry。

##Harbor HA 目前,Harbor官方还不提供HA的能力和方案(Harbor HA feature design proposal/discussion #327)。因此需要自己根据公司实际的场景进行HA方案的设计。 上面的PR中提到HA需具备的3个关键条件:

  • Harbor's registry should have multiple instances to provide service. Failure of any individual instance doesn't interrupt the service.
  • Image storage should have redundancy and shareable by multiple registry instances.
  • MySQL database should have high availability. ###Harbor HA One 你可能很快会想到如下的HA部署:

当然,实际上的DB HA方案不会是这样,你或许采用主备,读写分离等等,在这里只是表示简单表示要做DB的HA.

Harbor HA One 上面的部署架构需要你具备把Harbor的6个服务进行拆分的能力,丢弃官方方便的compose部署,实现自己的自动部署(ansible is good)。 多机房的镜像同步通过配置Harbor的replicated功能来完成。

###Harbor HA Two 如果你不想破坏Harbor官方部署的完整性,那么你可能会想到如下方案: Harbor HA Two 这个方案中,通过HAProxy代理后端多个完整的Harbor Instances,这样构建的Harbor Cluster还需要你配置多个mysql instance之间的数据同步。 同一机房的Harbor Cluster使用Ceph作为后端共享存储。 多机房的镜像同步仍然可以通过配置Harbor的replicated功能来完成。

###Our Harbor HA 家家有本难念的经! 由于各种原因,生产环境无法提供分布式存储的能力,只有使用local disk作为registry的存储。因此方案开始变得复杂,甚至可以说是恶心。 Our Harbor HA 由于这样的部署模型,带来很多原本Harbor好好的功能,变得不可用或者很多Bug,还好最终这些Bug都解决了,一言难尽。后面会提到一些。

##我们基于Harbor做了哪些定制开发 先看看我们用gitlab issues跟踪的任务清单: ![Task List]这里写图片描述 ###对接CAS

  • Harbor UI login/logout Redirect to CAS
  • code a golang cas client, to be a beego controller.
  • Detach CAS User with Harbor User
  • Bug fix
  • docker login 401
  • Modify harbor user password error
  • Portal modify slightly

###对接CMDB integration with cmdb 1 integration with cmdb 2

###对接OA integration with oa

###Harbor组件拆分 在我们的部署模型中,需要将mysql和registry单独部署在其他Host上,其他四个组件继续在一个Host上部署,这其中涉及到很多配置的更改。 我们的所有Deploy,都是基于Ansible进行自动化部署的。 harbor split

###其他工作

  • Build audit log file and adapt dragonfly
  • Format Harbor log to adapt dragonfly
  • Ansible scripts to deploy HA cluster
  • Integration with OA user validate api
  • HAProxy session affinity Config
  • Auto config target, auto create & enable policies for all domains
  • Bugs fix
  • Replicate Function cannot be used in our deploy scene.
  • Mistaken delete repositories when syncing from registry to DB .
  • Trigger endless loop to call “DELETE /api/repository” when Delete repository in Portal.

###下一步做什么

  • New Portal
  • Integerate with Clair
  • Integerate with PaaS CI/CD
  • New Deploy Model (urges using ceph)
  • Separate token service from harbor
  • Performance Test
  • Fault simulation
  • GC scheme
  • Known bugs fix
  • ......

© 著作权归作者所有

WaltonWang
粉丝 227
博文 106
码字总数 226882
作品 0
深圳
程序员
私信 提问
加载中

评论(2)

WaltonWang
WaltonWang 博主

引用来自“leiiwang”的评论

对于已经有的registry数据如何迁移到harbor?(即镜像信息迁移到harbor数据库)
harbor ui启动的时候,会进行`SyncRegistry`的操作。
`SyncRegistry`就是负责将registry中repositories同步到DB。
v0.4.1中对应代码请参考:ui/main.go, api/utils.go:245
leiiwang
leiiwang
对于已经有的registry数据如何迁移到harbor?(即镜像信息迁移到harbor数据库)
Linux搭建自己的Docker镜像仓库

介绍如何在自己的服务器搭建docker镜像仓库 一、查看宿主机docker版本 如果版本小于17,需要下载新的版本docker,如果你的 1、更新yum源 2、卸载旧版本的docker,如果有安装的话 3、安装需要...

阿靖哦
10/04
0
0
Docker镜像仓库Harbor之搭建及配置

目录 Harbor介绍 环境、软件准备 Harbor服务搭建 Harbor跨数据复制配置 FAQ 1、Harbor 介绍 Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从...

aixiaoyang168
2017/06/21
0
0
用Swagger调用Harbor Registry的REST API

本文原作者为开源企业级容器Registry Harbor项目的工程师王锟,主要介绍如何使用Harbor内置Swagger来测试和调用Harbor的API。笔者做了少量修改。 Swagger简介 Swagger是最流行的RESTful API...

project_harbor
2016/04/21
1K
0
巧用Docker镜像仓库Harbor部署私有Mirror服务

本文作者付广平,UnitedStack有云存储工程师,北京邮电大学硕士,从事大数据和云计算相关工作,2016年毕业后加入UnitedStack大数据&容器组,负责Docker、Magnum和Sahara相关工作,Openstack...

project_harbor
2016/04/27
2.5K
0
Harbor 1.8开拓镜像管理崭新应用场景

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/q48S71bCzBeYLOu9T0n/article/details/90745645...

q48s71bczbeylou9t0n
06/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
今天
5
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
今天
8
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
12
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
16
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部