Harbor镜像仓库的导出与整理之二
  HL7exJhKg9j2 2023年11月19日 42 0

Harbor镜像仓库的导出与整理之二


背景

前几天参照大神的blog进行了一下harbor的镜像列表的获取与下载.
当时发现一个很诡异的问题. 
实际上镜像仓库里面的镜像很多.
但是导出和列表里面的却很少.

经过查询发现harbor的v2.0的API里面存在一些限制.
每次api的返回结果最多是 100 个项目. 
默认值是10个. 
所以理论上他的数值就是 projects * 10 的最大值.

这个与项目的需求和场景是严重不符合的. 

所以查询了下方式方法进行了一下改进.

curl的参数有配置

curl 能够设置项目信息等. 但是发现, 这个里面其实还是存在坑的. 
尤其是需要注意 & 等特殊符号的处理. 

curl -s -u 'admin:harborpassword' --limit-rate 1M -H 'Content-Type: application/json' \
-X GET http://192.168.xxx.xx/api/v2.0/projects/erp/repositories?page_size=100 -k \
| python -m json.tool | grep name | awk '/"name": /' | awk -F '"' '{print $4}' |wc -l

能够法相这个project 下面其实是有 98个 镜像的. 
然后可以使用这个命令进行一下获取. 如果某个项目超过了 98 最好是需要使用 page2的方式进行处理

curl -s -u 'admin:harborpassword' --limit-rate 1M -H 'Content-Type: application/json' \
-X GET http://192.168.xxx.xx/api/v2.0/projects/someProject/repositories/repositories?page_size=50\&page=2 -k \
| python -m json.tool | grep name | awk '/"name": /' | awk -F '"' '{print $4}' |wc -l

注意 如果是多个条件, 需要 & 前面增加反斜线进行分割. 
我改为 50的pagesize 第二页就会有 48个镜像. 问题是可控的

导出最新的镜像

Harbor_Address=http://192.168.xxx.xx       #Harbor主机地址
Harbor_Pulltag=192.168.xxx.xx:80
Harbor_User=admin                      #登录Harbor的用户
Harbor_Passwd=harborpassword              #登录Harbor的用户密码
Images_File=ImageInHarbor-`date '+%Y-%m-%d'`.txt   # 镜像清单文件
echo " " > $Images_File
Tar_File=/data/Harbor-backup_new   #镜像tar包存放路径
mkdir -p $Tar_File
#set -x
# 获取Harbor中所有的项目(Projects)
Project_List=$(curl -s -u $Harbor_User:$Harbor_Passwd  -H "Content-Type: application/json" -X GET  $Harbor_Address/api/v2.0/projects?page_size=100   -k  | python -m json.tool | grep name | awk '/"name": /' | awk -F '"' '{print $4}')

for Project in $Project_List;do
   # 循环获取项目下所有的镜像
    mkdir -p ${Tar_File}/${Project}
    Image_Names=$(curl -s -u $Harbor_User:$Harbor_Passwd  -H "Content-Type: application/json" -X GET $Harbor_Address/api/v2.0/projects/$Project/repositories?page_size=100  -k | python -m json.tool | grep name | awk '/"name": /' | awk -F '"' '{print $4}')
    for Image in $Image_Names;do
        # 循环获取镜像的版本(tag)
        Image_Tags=$(curl -s -u $Harbor_User:$Harbor_Passwd   -H "Content-Type: application/json"   -X GET  $Harbor_Address/v2/$Image/tags/list?page_size=100  -k |  awk -F '"'  '{print $8,$10,$12}')
        Tag=$(echo $Image_Tags |sort |awk '{print $NF}')
        docker pull  "$Harbor_Pulltag/$Image:$Tag"
        docker save  "$Harbor_Pulltag/$Image:$Tag" |gzip > ${Tar_File}/${Image}.${Tag}.tar.gz
    done
done

镜像文件太多时的留存策略

同事这边给出过一个处理方式.
我这边东施效颦一下进行一下简单总结

Harbor其实是有一个基本的留存策略的
可以保证每个项目仅保留部分镜像信息. 

具体的方法为:

admin 登录harbor 
->打开 项目
->选择最大磁盘空间的项目
->选中项目的 tag retention 或者是中文 策略 标签页
->选中tag保留
->操作,编辑后者是新增策略 输入
->以artifact 数量或者是天数为条件
->保留最近推送的#个镜像, 输入个数为5 或这个特性需要的个数. 
->保留
->运行 或者是 模拟运行. 
->可以设置定时执行, 比如每周执行一次. 

验证镜像容量就会出现了很大的缩小. 

需要注意 可能还需要执行一次->系统管理->垃圾清理



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月19日 0

暂无评论

推荐阅读
HL7exJhKg9j2