Harbor鏡像倉庫的導出與整理之二

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 或這個特性需要的個數. 
->保留
->運行 或者是 模擬運行. 
->可以設置定時執行, 比如每週執行一次. 

驗證鏡像容量就會出現了很大的縮小. 

需要注意 可能還需要執行一次->系統管理->垃圾清理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章