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
發現空間釋放了。