作者简介

211工程院校贵州大学管理学院硕士研究生、互联网金融行业资深DevOps研发工程师. 曾在国内多家知名互联网公司 平安科技、微众银行、顺丰科技、魅族任职. 具有多年国内一线互联网公司自动化运维平台设计与开发经验。
Harbor高可用集群解决方案--实践篇
双主复制与镜像清理
写在前面:
所谓的双主复制其实就是利用主从复制的方式实现两个Harbor节点之间的双向同步来保证数据的一致性。在两台harbor前端加入负载均衡(LVS、HAProxy、F5等)将进来的请求分流到不同的实例中去,只要有一个实例中有了新的镜像,就会自动的同步复制到另外的的实例中去,这样既实现了负载均衡又避免了单点故障,可以在一定程度上实现Harbor仓库的高可用性。但是根据笔者本人实际工作中踩过的坑,不太推荐使用这种方式实现高可用,原因如下:
多台Harbor实例的账号体系是相互独立的, HarborA的账号与权限在其他的Harbor实例上也需要创建并授权
配置相对繁琐人工介入成本增加,需在WEB管理台中额外配置项目同步策略
如果镜像既大且多, Harbor实例之间进行镜像同步将会占用大量磁盘IO与网络IO,实时性差
镜像清理:
此处会分别介绍在Harbor新老版本中进行镜像清理的方式,老版本采用v1.5、新版采用v1.8。新版本中解决了在老版本Harbor中镜像清理的繁琐的过程,可以在图形化界面中配置垃圾回收,实现镜像清理。

步骤2. 配置目标Harbor实例参数



步骤5. 编辑策略详情

步骤6. 添加策略成功执行初始化同步任务

步骤7. 查看同步状态

综上,新Harbor节点上接收到了主节点发送过来的容器镜像,同步配置成功。
2.1 Harbor(v1.5)镜像删除
Harbor仓库中的镜像如果不再使用可以通过WEB管理台进行清理,但通过这种方式清理镜像仅仅只是实现了在WEB页面上不再显示,实际上并没有删除磁盘上的文件并释放磁盘空间。由于磁盘空间并没有被释放,这就导致了随着时间的累积,Harbor服务器所占用的磁盘空间就会越来越大,这显然是不合理的。
那么如何才能深度删除镜像并释放磁盘空间呢? 下面我们一起来一探究竟。
2.1.1 自定义配置文件如下
version: 0.1
log:
fields:
service: registry
storage:
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: storage
2.1.2 拷贝配置文件至registry容器
[root@harbor-a tmp]# docker cp tmp/clean_regsitry.yml fbe86b16c669:/
2.1.3 在registry容器中关联配置文件执行镜像清理指令
[root@harbor-a tmp]# docker exec fbe86b16c669 registry garbage-collect --dry-run clean_regsitry.yml
注意:
--dry-run参数用来进行清理检测,将会删除的镜像及各镜像之间的依赖关系,并不是真正的执行删除操作,所以在真正执行删除任务之前,建议先使用该参数,验证一下删除操作究竟会删除哪些数据。
输出如下:
webapps/harbor-ui
webapps/harbor-ui: marking manifest sha256:a20152e75eda6bf425f44d1560db683ff5b141af7653bee25aacac23153a0bf3
webapps/harbor-ui: marking blob sha256:a942b187d9a4c360075db0cb1a5d299fe1e88aa51010c85a50f042488e3c8199
webapps/harbor-ui: marking blob sha256:67b38845fad17e2bc52920dabbc7324b676262cc7671ffa3ac2b8a44625bb734
webapps/harbor-ui: marking blob sha256:6fde824ffce37d8597395138461d648ed734f8126ba6e6fbd74067d48c1bfed9
webapps/harbor-ui: marking blob sha256:ec536270c9157b8b2ae6299fc63de06316a9406ccfb3f8ef3ceab29cb1f8e314
webapps/harbor-ui: marking blob sha256:35c180d9141a5f565f5ba8700c13259a359af77a938b1f055b67308222ffb5b1
webapps/harbor-ui: marking blob sha256:9689a4ba6d4c1d76de069ee3a66828be04a16222f909892a8c24b6eccbe911ea
webapps/harbor-ui: marking blob sha256:6e3021be2c44415cbb44fd39cb055f5c5f97d5aab8d50679ea88567fec80832e
webapps/ngins
8 blobs marked, 3 blobs eligible for deletion
blob eligible for deletion: sha256:745d4571052dd39d20825635cc2fc0668d313d8147bbe4366d41d3584b4a687e
blob eligible for deletion: sha256:cd19d787004dd245ad49dab9f17b2a394135f5dfd0604b1b5b3a4c543511f79f
blob eligible for deletion: sha256:de393f48e89e3c018415deb7fb35981773772d7f37f96b651264d937d15c23fa
2.1.4 删除前查看Harbor镜像目录所占空间
[root@harbor-a tmp]# du -sh mnt/harbor_disk/
117M mnt/harbor_disk/
2.1.5 正式清理镜像
[root@harbor-a tmp]# docker exec fbe86b16c669 registry garbage-collect clean_regsitry.yml
2.1.6 再次查看磁盘空间
[root@harbor-a tmp]# du -sh mnt/harbor_disk/
95M /mnt/harbor_disk/
综上Harbor镜像所占用的磁盘空间从115M降低至95M,镜像深度清理成功!
2.2. Harbor(v1.8)镜像删除
在新版Harbor中,镜像清理工作不再像老版本中那样繁琐,在WEB控制台可通过图形化界面即可进行配置。清理周期根据实际情况选择小时、天等维度。
步骤1. 配置清理策略

步骤2. 查看清理历史

3
结束语






