Harbor是什么
第一次听到这个名字应该是2016年初的时候,那是在容器技术已经兴起的,各个容器管理平台正处于群雄逐鹿的时候,mesos、kubernetes、swarm等被国内外各个厂商用来作为容器的管理系统。这个时候突然冒出一个词harbor,港湾,同事是这样介绍的:几个VMware中国的人搞了一个容器镜像仓库。于是变成为harbor的第一批用户,后来也有幸成为contributor。说了半天,harbor是什么呢?简单来说,容器是集装箱,集装箱放哪里呢?对,港湾!官方的说法是:Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器。
我对Harbor的误解
1.Harbor是负责存储容器镜像的
Harbor是镜像仓库,那么就应当是存储镜像的,这个可能是大多数接触harbor的人的一个误区,当深入了解以后才发现,镜像的存储harbor使用的是官方的docker registry服务去完成,至于registry是用本地存储或者s3都是可以的,harbor的功能是在此之上提供用户权限管理、镜像复制等功能,提高使用的registry的效率。
2.Harbor镜像复制是存储直接复制
这个是我对harbor的第二个误解,镜像的复制,我第一反应应该是镜像分层文件的直接拷贝,当时我还在思考怎么保证复制时镜像分层文件的拷贝冲突、不同存储直接如何转化,如:aufs和devicemapper以及分层文件索引创建等问题,当查看harbor源代码时候才发现,harbor采用了一个更加通用、高屋建瓴的做法,通过docker registry 的API去拷贝,这不是省事,这种做法屏蔽了繁琐的底层文件操作、不仅可以利用现有docker registry功能不必重复造轮子,而且可以解决冲突和一致性的问题。
Harbor的架构
harbor的整体架构还是很清晰的,下面简单介绍一下,下图展示harbor主要的功能组件和信息流向。
主要组件包括proxy,他是一个nginx前端代理,主要是分发前端页面ui访问和镜像上传和下载流量,上图中通过深蓝色先标识;ui提供了一个web管理页面,当然还包括了一个前端页面和后端API,底层使用mysql数据库;registry是镜像仓库,负责存储镜像文件,当镜像上传完毕后通过hook通知ui创建repository,上图通过红色线标识,当然registry的token认证也是通过ui组件完成;adminserver是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回需要加载adminserver的配置,通过灰色线标识;jobsevice是负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log,上图通过紫色线标识;log是日志汇总组件,通过docker的log-driver把日志汇总到一起,通过浅蓝色线条标识。
Harbor使用
我们当前升级的版本是harbor 1.1.1,是从0.5版本升级过来,下面简单从页面角度讲解一下harbor的使用.
1.用户管理
基于角色的访问控制,RBAC,这个是k8s 1.6以后才加入的功能,harbor在设计的开始就考虑进去,用户分为三种角色:项目管理员(MDRWS)、开发人员(RWS)和访客(RS),当然还有一个最高管理员权限admin系统管理员。
上面的简称大概说一下,M:管理、D:删除、R:读取、W:写入、S:查询,非常细致的权限管理体系。当然一个用户可以在不同的项目里面扮演不同角色,这个和现实的用户管理体系非常吻合。
2.项目管理
项目管理是系统最主要的一个功能模块,项目是一组镜像仓库的逻辑集合,是权限管理和资源管理的单元划分。一个项目下面有多个镜像仓库,并且关联多个不同角色的成员,镜像复制也是基于项目的,通过添加复制规则,可以将项目下面的镜像从一个harbor迁移到另一个harbor,并且可以通过日志查看复制过程,并有retry机制。
3.配置管理和日志查询
配置管理主要是配置harbor的认证模式,企业内部使用,通常都是对接到公司LDAP上面,当然harbor也支持数据库认证;还可以设置token的有效时间。用户对镜像的pull和push操作都可以被harbor记录下来,这样为排查文件提供了重要手段。
当然harbor功能不止我上面说的,譬如harbor集成了clair镜像扫描功能,它是cereos开发的一款漏洞扫描工具,可以检查镜像操作系统以及上面安装包是否与已知不安全的包版本相匹配,从而提高镜像安全性。
4.Harbor高可用部署
通过三个harbor完成高可用部署,前面通过负载均衡器对外提供服务。共享数据库与缓存。结构如下
Harbor和kubernetes结合
kubernetes是什么我就不在此赘述了,简单一句话,它是一个用于自动部署,扩展和管理容器化应用程序的开源系统。它的详细内容参考请参考官网。kubernetes中的kubelet组件负责容器的生命周期管理,通过CRI对接到不同的容器实现如:rkt、Docker等,目前默认是Docker,kubelet启动Docker容器的时候,会根据策略IfNotPresent是如果本地不存在则拉取,打上latest标签或者设置Always策略则是一直拉取最新镜像。我们在当前的企业中,Docker的镜像仓库配置成harbor,在容器启动是会拉取harbor中的镜像。这里又几个问题需要注意
第一,imagePullSecrets
镜像拉取需要先登录,在kubernetes多用户使用场景中,镜像的安全必须要保证,一个用户是没有权限拉取另一个用户下面的镜像。kubernetes提供了imagePullSecrets负责管理镜像拉取时的安全认证。其实kubelet就是模拟了一次用户登录,并且会在~/.docker/config.json下面生成auth认证信息。当然如果是绝对单个用户的场景,为了避免麻烦,你也是使用admin到每台机器上面登录(docker login)一下,这样镜像拉取就都是通过admin来完成。
第二,https
为了安全建议使用https,我们在生成环境中使用的是自签名的证书,如果是设置成https,需要在设置非安全仓库–insecure-registry,并重启Docker服务。
反过来,harbor本身的部署也可以通过kubernetes来完成,通过kubernetes的rc和svc以及pv的配合完成harbor的创建。目前我们的生成环境还是沿用docker-compose的方式部署。
Harbor的未来和改进
Harbor的使用有一年多的时间了,也根据自己企业内的需求定制了一些功能,如:直接从公网上面拉取镜像,镜像在不同的项目之间拷贝等功能。这里再给Harbor提几个新能点希望以后能添加:1.镜像同步可以不仅限于harbor之间,只要是实现docker registry API接口镜像仓库都可以同步,2.镜像资源可以有策略的自动回收,避免的资源浪费和撑爆磁盘的问题,作为一个harbor的长期使用者,希望harbor能走的更远,但对Harbor的未来多少有点担忧,主要是因为,Harbor的其实本质还是围绕Docker Registry来做业务扩展,很容易被复制,并且和Docker捆绑。
Harbor源码分析
Harbor的源代码主体采用的是beego框架,之前写了一些harbor部署和源码分析的文章这里就不再重复赘述了。
但是这里主要讲解一些Harbor设计比较好的地方:
1.镜像复制过程中状态机的使用,由于镜像的复制是个比较繁琐的过程,涉及到很多方面,如:网络中断、权限不足、服务重启等为止因素,都有可能会失败,通过状态机的方式,很好的控制了镜像拷贝过程,从初始化到项目校验,到Manifest拉取,然后比较blob确定需要复制的blob,等blob复制完毕最后还要上传Manifest文件。整个过程通过状态机串联在一起,并且失败情况能够retry。
2.整体架构,结构简单分工明确,这个系统的设计每个模块都可以打包成独立的Docker镜像,方便部署和升级,adminserver作为整体配置中心,jobservice作为镜像同步服务分工明确。并且编译打包工具完善,方便用户使用。
3.LDAP企业集成,这个对于我们企业用户非常实用,免去很多用户对接的繁琐工作。
Harbor是什么的更多相关文章
- docker 私有镜像管理工具harbor 安装
因为各种原因,官方的离线安装包下载比较费事,经常不成功,所以通过分部安装解决问题 1. docker yum install libdevmapper* -y -H tcp://0.0.0.0:237 ...
- ubuntu 14.04 https 形式安装docker 私有库 harbor
起始目录/root,root 登陆后,直接在该目录进行下面的命令 下载harbor 预编译包 0.4.5 准备通过域名 reg.server.com 来访问镜像库所以需要在/etc/hosts 文件中 ...
- (三)Harbor使用OpenLDAP认证登陆
接上一篇<安装Harbor>,安装好之后,接下来我们使用OpenLDAP来进行Harbor web界面的登陆验证及权限分配! OpenLDAP: 使用OpenLDAP的都知道,这是一个集 ...
- (二)Harbor WEB的使用
接上一篇<安装Harbor>,安装好之后,接下来我们就进行Harbor web界面的操作吧! 转载请标明出处:http://www.cnblogs.com/huangjc/p/62704 ...
- (一)Harbor安装 -- 企业级Registry仓库
根据Harbor官方描述: Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全.标识和管理等,扩展了开源Docker Distri ...
- docker 镜像仓库 Harbor 部署 以及 跨数据复制
docker 镜像仓库 Harbor 部署 跨数据复制 Harbor 是 Vmwar 公司开源的 企业级的 Docker Registry 管理项目 它主要 提供 Dcoker Registry 管理 ...
- .NET遇上Docker - Harbor的安装与基本使用
Harbor是一个开源企业级Docker注册中心,可以用于搭建私有的Docker Image仓库.可以实现权限控制等. 安装Harbor 首先,需要安装Docker和Docker Compose,参考 ...
- 安装harbor私有镜像仓库
有朋友安装harbor的过程中遇到很多问题,为此写一篇最简单安装harbor的文档,希望能帮助所有刚开始接触harbor的新手.harbor的架构不做探究. 实验验环境:os --> cento ...
- 企业级Docker私有仓库之Harbor部署(http)
部署环境 Centos7.3 x64 docker-ce-17.06.0 docker-compose-1.15.0 Python-2.7.5(系统默认) Docker及Docker-compose安 ...
- 企业级docker仓库Harbor部署
1.安装环境下载离线安装包地址https://github.com/vmware/harbor/releases/yum install -y dockerpip install -i https:/ ...
随机推荐
- [PHP] 算法-字符串的全排列的PHP实现
输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 思路: 1.利用递归形成 ...
- Java高并发--线程安全策略
Java高并发--线程安全策略 主要是学习慕课网实战视频<Java并发编程入门与高并发面试>的笔记 不可变对象 发布不可变对象可保证线程安全. 实现不可变对象有哪些要注意的地方?比如JDK ...
- Java细节整理——数组与内存控制
重点:使用Java数组之前,必须对数组对象进行初始化. 当数组的所有元素都被分配了合适的内存空间,并指定了初始值时,数组的初始化完成.程序以后将不能重新改变数组对象在内存中的位置和大小. 知识点整理: ...
- Java中重写与重载
重写(覆盖):发生在子类与父类之间:方法名相同方法的个数.类型相同返回值类型小于等于父类的返回值类型 重载:发生在一个类中:方法名相同方法的个数.类型不同返回值类型可以相同也可以不相同
- sublime快捷方式小结
插件 package control安装 代码地址:https://packagecontrol.io/installation //TEXT3 import urllib.request,os,ha ...
- 关于购物车添加按钮的动画(vue.js)
来自:https://segmentfault.com/a/1190000009294321 (侵删) git 源码地址 https://github.com/ustbhuangyi/vue-sel ...
- JMeter http(s)请求插件jmeter-plugin-httpBinaryFileUpload.jar
JMeter http(s)请求插件jmeter-plugin-httpBinaryFileUpload.jar by:授客 QQ:1033553122 1. 测试环境 apache-jmeter ...
- Windows上通过bat调用jmx进行循环运行
1.jmx测试脚本中有两个线程组: 1)第一个线程组:模拟60台客户机并发像服务器发送上报请求,需要调用线程组的循环运行 2)第二个线程组:60台客户机上线后,模拟管理平台对客户机进行基础操作,如:创 ...
- (后台)SQL Server 代理(已禁用代理 XP) 怎么解决(转)
百度知道搜索的答案: 在SQL Server Management Studio中连接到SQL Server实例后,会显示“SQL Server 代理”节点.如果当前该实例的Agent服务没有启动,“ ...
- html5常见新增标签
本文内容: header nav article footer section aside datalist 音频标签: audio 视频标签: video 插入媒体标签: embed 新增input ...