站长资讯网
最全最丰富的资讯网站

镜像仓库Harbor解析

一、Harbor特性介绍

1. 基于角色访问控制

每个人角色不同,需求也不同,因此就需要访问权限控制,根据角色分配相应的权限。例如,开发人员需要对项目构建这就需要用到读写权限(push/pull),测试人员只需要读权限(pull),运维一般管理镜像仓库,具备权限分配能力,项目经历具有所有权限。

在 Harbor 中,有三种角色:

(1)Guest:对指定项目有只读权限。

(2)Developer:开发,读写项目的权限。

(3)Admin:管理者,所有权限。

Anonymous:当用户未登录时,该用户被设为匿名用户。匿名用户不能访问私有项目,只能访问公开项目。

2. 镜像复制

可以将仓库中的镜像同步到远程的 Harbor。

3. LDAP

Harbor 支持 LDAP 认证,可以很轻易接入已有的 LDAP。

4. 镜像删除和空间回收

Harbor 支持在 Web 删除镜像,回收无用的镜像,释放磁盘空间。

5. 图形页面管理

用户很方面搜索镜像及项目管理

6. 审计

对仓库的所有操作都有记录

7. RESET API

完整的API,方便与外部集成。

二、Harbor高可用方案介绍

1. 共享存储

多个实例共享数据,共享一个存储。任何一个实例持久化存储的镜像,其它实例都可以读取到,通过前置负载均衡分发请求。

2. 复制同步

利用其镜像复制功能,实现双向复制保持数据一致,通过前置负载均衡分发请求。

三、Harbor组件

MODULE FUNCTION

harbor-adminserver 配置管理中心

harbor-db MySQL 数据库

harbor-jobservice 负责镜像复制

harbor-log 记录操作日志

harbor-ui Web 管理页面和 API

nginx 前端代理,负责前端页面和镜像上传/下载转发

redis 会话

registry 镜像存储

四、Harbor部署

Harbor有三种安装方式

(1)在线安装:从 Docker Hub 下载 Harbor 相关镜像,因此安装软件包非常小。

(2)离线安装:安装包包含部署的相关镜像,因此安装包较大。

(3)OVA安装程序:当用户具有 vCenter 环境时,使用此安装程序,在部署 OVA 后启动 Harbor。

这里采用离线安装 https://github.com/goharbor/harbor/releases

既然部署私有 registry,那么无疑是在自建的私网,达到便于管理,传输快速的目的。如果是异地的话,是不建议自建 registry的,因为这样的话,反而更加慢。

默认情况下,Docker 请求 registry 时是使用 https 协议的,但我们在私网搭建 registry 通常是 http 协议的。因此等下需要给 Docker 指明要采用 http 协议。

Harbor 在部署和使用时需要借助 Docker 的单机编排工具 Docker compose

# yum install -y docker-compose

切到解压目录,简单的修改一下配置文件,hostname 指明 harbor 地址,协议是 http,登录密码是 pwd@123。

# tar -zxf harbor-offline-installer-v1.5.1.tgz

# cd harbor/

# vim harbor.cfg

hostname = 192.168.5.155

ui_url_protocol = http

harbor_admin_password = pwd@123

准备配置文件

# ./prepare

安装并启动 harbor

# ./install.sh

查看运行状态,部署完成

# docker-compose ps

Name Command State Ports

————————————————————————————————–

harbor-adminserver /harbor/start.sh Up

harbor-db /usr/local/bin/docker-entr … Up 3306/tcp

harbor-jobservice /harbor/start.sh Up

harbor-log /bin/sh -c /usr/local/bin/ … Up 127.0.0.1:1514->10514/tcp

harbor-ui /harbor/start.sh Up

nginx nginx -g daemon off; Up 0.0.0.0:443->443/tcp,

0.0.0.0:4443->4443/tcp,

0.0.0.0:80->80/tcp

redis docker-entrypoint.sh redis … Up 6379/tcp

registry /entrypoint.sh serve /etc/ … Up 5000/tcp

如果有非 Up 状态,就去看日志

# ls /var/log/harbor/

adminserver.log jobservice.log mysql.log proxy.log redis.log registry.log ui.log

五、Harbor管理

访问 Harbor 地址 http://192.168.5.155 登录到 Web 页面

libariy 项目是默认自带的,通常用这个存储一些公共的镜像,默认情况下,这个项目下的镜像谁都可以 pull,但不能 push,push需要先登录。

接下来,新建一个 hello_harbor 项目,给用户 qkc 赋予 push 权限

我这里搭建的 Harbor 是以 http 提供服务的,而 Docker Client 默认是以 https 访问仓库,所以要先配置可信任,否则对镜像仓库的请求会非常蛋疼。

# cat /etc/docker/daemon.json

{

"registry-mirrors": ["http://bc437cce.m.daocloud.io"],

"insecure-registries": ["192.168.5.155"]

}

# systemctl restart docker

注意 REPOSITORY 的这一列,如果镜像只放在本地存储的话,REPOSITORY 写什么都可以,但推送到镜像仓库就必须指定仓库中心地址。所以先重命名 REPOSITORY 为镜像仓库服务器地址。

$ docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

tomcat8 v2 9ce8e9caec7b 6 hours ago 249MB

tomcat8 latest 89365c870fc9 6 hours ago 244MB

nginx v1 7788133766ea 7 hours ago 323MB

nginx1.14 latest bcd632d57f44 7 hours ago 323MB

centos latest 5182e96772bf 7 weeks ago 200MB

在 Docker 主机上传镜像到 Harbor

$ docker tag tomcat8:v2 192.168.5.155/hello_harbor/tomcat8:v2

$ docker push 192.168.5.155/hello_harbor/tomcat8:v2

在 Harbor 上查看镜像

下载镜像

$ docker pull 192.168.5.155/hello_harbor/tomcat8:v2

$ docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

192.168.5.155/hello_harbor/tomcat8 v2 9ce8e9caec7b 6 hours ago 249MB

定期垃圾收集,释放磁盘空间

存储库删除分为两步:

1. 第一步在 UI 中删除:在 Harbor UI 中 删除,这是标记删除,但是存储库的文件仍然保留在 Harbor 存储中。

2. 第二步执行垃圾收集(GC):在执行 GC 之间,确保没人在推送镜像或没人访问 Harbor。如果有人推送镜像可能会错误的删除镜像,从而导致镜像损坏。因此在运行 GC 之前,建议停止 Harbor。注意,启动的时候需要到 Harbor 的解压目录下进行。

启动一个 GC 容器,并共享 registry 的数据卷,执行程序对该数据卷扫描清理

# docker-compose stop

# docker run -it –name gc –rm –volumes-from registry vmware/registry:2.6.2-photon garbage-collect /etc/registry/config.yml

# docker-compose start

用户配置及管理手册: https://github.com/goharbor/harbor/blob/master/docs/user_guide.md

赞(0)
分享到: 更多 (0)
网站地图   沪ICP备18035694号-2    沪公网安备31011702889846号