01
Harbor是什么
它是构建企业级私有docker镜像的仓库的开源解决方案,它对原生Docker Registry实现了更高级封装(由国内Vmware团队开发),它除了提供友好的Web UI界面,角色和用户权限管理,用户操作审计、镜像同步复制、漏洞扫描等。
02
功能特性
RBAC访问控制,用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限;
镜像复制功能,镜像可以在多个Registry实例中复制,尤其适合于负载均衡、高可用、混合云和多云的场景;
图形化用户界面,用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间;
AD/LDAP支持,Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理;
审计管理,所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
国际化,已拥有英文、中文、德文、日文和俄文的本地化版本,更多的语言将会添加进来;
RESTful API,RESTful API 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易;
部署简单,提供在线和离线两种安装工具。(来源于网络)
03
Harbor安装方式
使用k8s插件(Add-on)的形式,或者使用helm,需要创建一些存储卷或者使用存储类(ceph、nfs)来完成,依赖于kubernetes,在集群内部,更为灵活;
使用docker-compose的形式,只需要docker 运行时引擎,使用本地的磁盘,更为可控,不受kubernetes集群影响;
注意:生产环境中,在满足线上要求的情况下,能少用一些组件,能少一些耦合就越好,事情并非绝对,这里给出使用docker-compose来管理的方式,这种方式也是官方提供的一种;
04
Harbor资源规划
中小型企业私有镜像仓库是一般是为了在docker build成功后,上传镜像仓库,k8s部署时下载使用,这里就有一个问题,相同业务镜像版本数要求,通常情况下不会太多,可以根据公司实际情况进行磁盘空间规划。
服务器规划
主机名 | IP | 磁盘要求(根据需求规划) | 操作系统版本 |
harbor01 | 192.168.16.113 | RAID5 (生产是10T左右) | 4.4.207-1.el7.elrepo.x86_64 |
harbor02 | 192.168.16.114 | RAID5 (生产是10T左右) | 4.4.207-1.el7.elrepo.x86_64 |
nginx | 192.168.16.112 | 无要求 | 4.4.207-1.el7.elrepo.x86_64 |
软件版本
软件名称 | 版本 | 下载链接 |
harbor-offline-installer-v1.9.4.tgz | v1.9.4 | https://github.com/goharbor/harbor/releases/download/v1.9.4/harbor-offline-installer-v1.9.4.tgz |
docker-compose | 1.25.4 | curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
05
Harbor架构图
06
Harbor组件说明
harbor-log:运行rsyslog进程的容器,为了监控Harbor运行状况,负责收集其他组件的log,供日后分析;
harbor-portal:提供图形化界面,使用图形化界面帮助用户管理registry上的镜像(image),并对用户进行授权,信息配置等;
redis:用于存储session;
harbor-db:为core services提供数据库服务,负责储存用户权限、审计日志、Docker image分组信息等数据;
registryctl :处理docker push/pull 命令行工具;
registry:官方的Docker registry ,负责储存Docker镜像;
harbor-core: 核心组件包;
nginx:使用Nginx做反向代理;
harbor-jobservice:提供镜像远程复制功能,可以把本地镜像同步到其他Harbor实例中;
07
Harbor安装
两台主组分别进行如下安装即可;
1. 确保安装docker 运行时环境并运行
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo &&yum makecache && yum -y install docker-ce
systemctl start docker.service
2. 下载docker-compose
curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o usr/local/bin/docker-compose
3. 下载离线安装包
https://github.com/goharbor/harbor/releases/download/v1.9.4/harbor-offline-installer-v1.9.4.tgz
4. 解压并安装
tar -zxf harbor-offline-installer-v1.9.4.tgz && cd harbor
修改配置文件harbor.yml
只需要简单修改下主机名即可,修改为本机IP hostname: x.x.x.x
运行sh install.sh
5. 安装成功
。。。
[Step 3]: starting Harbor ...
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating harbor-db ... done
Creating redis ... done
Creating registryctl ... done
Creating harbor-portal ... done
Creating registry ... done
Creating harbor-core ... done
Creating nginx ... done
Creating harbor-jobservice ... done
✔ ----Harbor has been installed and started successfully.----
Now you should be able to visit the admin portal at http://100.73.16.113.
For more details, please visit https://github.com/goharbor/harbor .
6. 配置说明
配置选项 | 选项说明 |
hostname: | 目标主机的主机名或IP,用于访问Portal和注册表服务, 它应该是目标计算机的IP地址或完全限定的域名(FQDN) |
http: | |
port: 80 | http的端口号 |
harbor_admin_password: Harbor12345 | 管理员的初始密码,默认用户名/密码为admin/Harbor12345,可以在Portal中修改 |
database: | |
password: root123 | 用于db_auth的数据库的root密码 |
max_idle_conns: 50 | 连接空闲数 |
max_open_conns: 100 | 最大连接数 |
data_volume: /data | 存储镜像数据的位置 |
clair: | |
updaters_interval: 12 | 设置Clair更新的间隔,该值为0则不允许更新,默认为12小时 |
jobservice: | |
max_job_workers: 10 | 镜像复制作业工作者数目,增加此数量可以在系统中执行更多并发复制作业,但是,由于每个工作者都消耗一定量的网络/CPU/ IO资源,请根据主机的硬件资源仔细选择该属性的值 |
notification: | |
webhook_job_max_retry: 10 | 设置webhook最大重试次数 |
chart: | |
absolute_url: disabled | 如果设置为启用chart将使用绝对网址,否则将其设置为禁用,图表将使用相对网址 |
log: | |
level: info | 日志级别 |
local: | |
rotate_count: 50 | 日志文件在被删除之前被轮换为log_rotate_count次数。如果count为0,则删除 |
rotate_size: 200M | 仅当日志文件大于log_rotate_size字节时才会轮换日志文件 |
location: /var/log/harbor | 日志路径 |
_version: 1.9.0 | 版本 |
proxy: | |
http_proxy: | 配置http代理,例如http://my.proxy.com:3128 |
https_proxy: | 配置https代理,例如http://my.proxy.com:3128 |
no_proxy: | 不设置配置代理,例如127.0.0.1,localhost,core,registry |
components: | 组件列表 |
- core | |
- jobservice | |
- clair |
以上配置为默认配置,还有一些额外配置可供选择;并且数据库和redis均可以由DBA同学额外提供,不使用默认容器形式,这里未提供,在离线安装时,会自动安装,并设置密码相关配置;
08
镜像复制配置
1. 两台机器均类似配置,登录192.168.16.113,默认用户名和密码admin/Harbor12345,请自行修改即可。
2. 删除libary项目,新建项目kubernetes,并公开(网络可达,即可下载,docker pull,不需要验证),这里可以设置磁盘配额等信息;
3. 仓库管理-->新建目标
目标是指,把本地仓库镜像复制到其它镜像仓库的配置,这里配置的远程仓库地址;
4. 同步管理-->新建规则
目的Registry即第3步中创建的远程目标,触发模式,可以选择事件驱动
、手动、定时均可以,根据需求自定义;
5. 类似配置另外一台,把目标指向对端的另一台即可;
09
镜像上传测试
给镜像打tag,上传镜像仓库,无论上传哪一个镜像仓库,另外的镜像仓库会很快的复制过来;
10
配置Nginx
注意nginx安装时要支持4层代理,配置如下
# 核心代码
upstream backend {
server 192.168.16.113:80;
server 192.168.16.114:80 backup;
}
server {
listen *:80;
proxy_connect_timeout 1s;
proxy_pass backend;
}
nginx服务器的地址是192.168.16.112,这样我们就可以使用域名的形式;
11
总结
Harbor还有很多功能(ladp认证、安全扫描、权限划分等)没有进行测试,这里只是讲到了镜像复制,提供企业级Harbor镜像仓库高可用方案。
分享使我快乐
往期分享