harbor blobs占用的空間越來(lái)越大的情況記錄和解決辦法

harbor blobs占用的空間越來(lái)越大的情況記錄和解決辦法


2019-08-07

harbor所在的服務(wù)器突然提示磁盤(pán)空間不足,上去查看磁盤(pán)占用情況發(fā)現(xiàn),/data竟然達(dá)到了49GB:


導(dǎo)致磁盤(pán)剩余只有17GB



于是我就好奇,做了一個(gè)統(tǒng)計(jì),看看當(dāng)前harbor中的所有image加起來(lái)到底是多少,這一統(tǒng)計(jì)就發(fā)現(xiàn)了問(wèn)題,一共加起來(lái)才用了10GB不到,咋占用磁盤(pán)空間就達(dá)到了49GB呢?


所以懷疑,是否是產(chǎn)生了垃圾,導(dǎo)致了磁盤(pán)空間沒(méi)有釋放?。?!


于是查了一下解決辦法:

執(zhí)行如下的前提是必須保證harbor是處于stop狀態(tài),而不能是down狀態(tài):

先執(zhí)行:

docker-compose stop


然后執(zhí)行

dockerrun -it --name gc --rm--volumes-from registryvmware/registry-photon:v2.6.2-v1.5.0garbage-collect--dry-run /etc/registry/config.yml


如果harbor是down狀態(tài),則會(huì)報(bào)錯(cuò):

docker: Error responsefrom daemon: No such container: registry.


檢測(cè)出如下結(jié)果:


此時(shí)磁盤(pán)占用情況為:


然后執(zhí)行:

docker run -it --name gc --rm--volumes-from registry vmware/registry-photon:v2.6.2-v1.5.0garbage-collect /etc/registry/config.yml


可以看到上述并沒(méi)有起作用:



于是在harbor控制臺(tái)上手動(dòng)刪除了一些image,然后查看磁盤(pán)是沒(méi)有立即釋放的。

于是又執(zhí)行了一次垃圾回收:

docker run -it --name gc --rm--volumes-from registry vmware/registry-photon:v2.6.2-v1.5.0garbage-collect --dry-run /etc/registry/config.yml


docker run -it --name gc --rm--volumes-from registry vmware/registry-photon:v2.6.2-v1.5.0garbage-collect /etc/registry/config.yml



然后查看發(fā)現(xiàn),磁盤(pán)空間確實(shí)釋放了2GB:


此時(shí)的磁盤(pán)空間占用為:



最后再啟動(dòng)harbor:docker-compose start


這只是證明了垃圾回收針對(duì)刪除的image是起作用的。但是為啥blobs會(huì)占用這么大的空間呢?

于是接著查找原因,終于發(fā)現(xiàn)了一篇文章中記錄著解決辦法:

文章鏈接:https://www.cnblogs.com/xzkzzz/p/10151482.html

Harbor刪除鏡像后且GC清理后,磁盤(pán)空間沒(méi)有釋放。因?yàn)槲覀僷ush大量相同標(biāo)簽的鏡像,Docker?鏡像由標(biāo)簽引用,并由唯一的摘要標(biāo)識(shí)。這意味著如果myImage使用標(biāo)記推送兩個(gè)圖像,在DR內(nèi)部他們顯示的不同,它們將由兩個(gè)不同的digests標(biāo)識(shí)。最后推送的Images是當(dāng)前的。Docker?鏡像由layers組成,每個(gè)layers都關(guān)聯(lián)一個(gè)blob。該blob是最占用存儲(chǔ)的文件; 這些文件將由GC清理。正由上面的描述每個(gè)鏡像都會(huì)存儲(chǔ)一個(gè)引用,因?yàn)?,我們重?fù)提交10次,那一個(gè)標(biāo)簽在DR中會(huì)有10個(gè)引用,標(biāo)簽只能獲取tag。而其他9個(gè)只能用digest獲取了。

簡(jiǎn)單的來(lái)說(shuō)就是因?yàn)橄嗤臉?biāo)簽的鏡像重復(fù)提交次數(shù)過(guò)多導(dǎo)致。


通過(guò)向docker-compose.yml中添加:

ports:

? -127.0.0.1:5000:5000


然后通過(guò)執(zhí)行(需提前下載mortensrasmussen/docker-registry-manifest-cleanup):

docker run--network="host" -it -v /data/registry:/registry -eREGISTRY_URL=http://127.0.0.1:5000mortensrasmussen/docker-registry-manifest-cleanup


來(lái)清理已刪除未使用的那些blobs?。?!


執(zhí)行結(jié)果如下:


此時(shí)查看服務(wù)器磁盤(pán)空間,已經(jīng)釋放了:


可以看到,磁盤(pán)占用的情況已經(jīng)發(fā)生了變化:


這簡(jiǎn)直是太美妙了!問(wèn)題終于解決了!很久之前,在虛擬機(jī)中使用harbor,時(shí)間長(zhǎng)了就出現(xiàn)過(guò)一回這個(gè)情況,但是當(dāng)時(shí)沒(méi)有找到解決辦法,最后無(wú)奈遷移了harbor中的數(shù)據(jù)到新的harbor中。但是當(dāng)時(shí)就對(duì)harbor的這個(gè)情況印象深刻,終于在這個(gè)環(huán)境中再次出現(xiàn)了,并且終于解決了!又攻克了一道大山?。?!




補(bǔ)充一下通過(guò)harbor清理垃圾的方法:

首先必須以admin用戶登錄才行,普通用戶是看不到以下頁(yè)面的:


以上只是邏輯上的清理,但是磁盤(pán)空間并沒(méi)有釋放,必須要執(zhí)行如下命令才能釋放空間:

docker run -it --name gc --rm

--volumes-from registry vmware/registry-photon:v2.6.2-v1.5.0 garbage-collect

/etc/registry/config.yml


但是以上命令不能刪除多余的layer,只能釋放刪除的image的資源。若想真正刪除多余的layer,還是需要:mortensrasmussen/docker-registry-manifest-cleanup 出馬才行?。?!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 此文檔需要在docker安裝完成之后操作 安裝docker-compose curl方式 python-pip安裝...
    楊家小七閱讀 6,330評(píng)論 2 3
  • harbor官方下載地址: https://github.com/vmware/harbor/releases 配...
    酒館_1916閱讀 1,021評(píng)論 3 2
  • Harbor是一個(gè)用于存儲(chǔ)和分發(fā)Docker鏡像的企業(yè)級(jí)Registry服務(wù)器,通過(guò)添加一些企業(yè)必需的功能特性,例...
    大鵬之動(dòng)閱讀 6,596評(píng)論 0 2
  • Harbor簡(jiǎn)介 Harbor是一個(gè)用于存儲(chǔ)和分發(fā)Docker鏡像的企業(yè)級(jí)Registry服務(wù)器,通過(guò)添加一些企業(yè)...
    SetZero閱讀 3,565評(píng)論 3 6
  • 今天醒來(lái)第一次4:37,想著早起打卡快到了,就堅(jiān)持到5;00睡覺(jué)。 第二次7:33,收了能量繼續(xù)睡。 第三次8:0...
    我和遙遙閱讀 179評(píng)論 0 1

友情鏈接更多精彩內(nèi)容