1. 程式人生 > 其它 >harbor映象倉庫清理操作

harbor映象倉庫清理操作

兩年前清理過一次harbor映象,而現在又要面臨清映象的操作了,筆者目前所在的公司映象是存放在ceph叢集內部的,目前約200T,且該儲存池是兩副本,那麼佔用空間是400T左右。真的是相當浪費空間了。
harbor映象倉庫由於過大,需要清理老版本映象,以釋放空間。清理之前有一些需要注意事項,提前說一下
1、太老版本的harbor可能不帶有清理機制(也就是下文講的清理操作)
2、清理期間harbor倉庫處於只讀狀態,期間不能推映象,但可以拉映象。清理的過程也稱為gc
3、生產環境當中的harbor只讀是不被允許的,因此開發出線上不停服gc的功能會更加受用(目前網上沒有找到該案例,需要自己研發)

實踐過程如下:

1、現在倉庫有如下映象
2、harbor映象倉庫存放的位置

一般上來說,harbor本身就是由docker跑起來的。harbor的資料儲存是在映象goharbor/harbor-registryctl當中。進入到這個容器內部,找到/storage/docker/registry/v2目錄,可以看到blobs和repositories兩個目錄。如下所示:

root [ /storage/docker/registry/v2 ]# du -sm *
1140    blobs
1       repositories

當我們推上去一個映象的時候,blobs目錄的大小會隨之發生變化,至於增大多少空間,取決於你在harbor裡面看到的映象大小,如圖所示:

大約是702MB。所以上面看到的blobs目錄的大小就是在推上去一個gitlab映象後,由原來的438MB增長到現在的1140MB

3、開始清理

清理操作我們可以在harbor的webUI介面上來點點進行刪除,映象超級多的時候就是有點費手。

選中並刪除,刪除成功後會在右側進行提示。但是這種刪除只是邏輯上的刪除,並不會真正釋放空間,可以去/storage/docker/registry/v2驗證一下看看,空間還是沒有釋放。所以還需要下面的一步

4、垃圾清理(線上gc)

點選進行垃圾清理操作,期間會在下面生成一個清理任務。注意清理期間harbor倉庫處於只讀狀態,此時不可推映象。

顯示已完成表示清理成功了

5、驗證空間是否釋放

此時再去檢視空間

root [ /storage/docker/registry/v2 ]# du -sm *
438     blobs
1       repositories

發現空間釋放了。