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 或這個特性需要的個數.
->保留
->運行 或者是 模擬運行.
->可以設置定時執行, 比如每週執行一次.
驗證鏡像容量就會出現了很大的縮小.
需要注意 可能還需要執行一次->系統管理->垃圾清理