harbor GC優(yōu)化(ceph后端)

背景

  • harbor版本 1.6坪郭。
  • distribution(原來的名字叫registry)版本為2.7.1,存儲后端對接ceph (s3)脉幢,線上環(huán)境ceph存儲性能一般截粗。
  • 應(yīng)用會定期刪除不需要的鏡像,每個鏡像只保留一定個數(shù)的tag數(shù)鸵隧。
  • harbor的bucket占用了52T的存儲容量绸罗。
  • 執(zhí)行g(shù)c,耗時過長豆瘫。

針對以上問題珊蟀,需要深入研究distribution gc的原理和s3相關(guān)的接口,進而優(yōu)化gc代碼,理想目標(biāo)是gc在8個小時以內(nèi)育灸。

鏡像倉庫中的相關(guān)概念

  • registry
    docker的鏡像管理工具腻窒,負(fù)責(zé)對接各種不同的存儲后端,后來改名為distribution磅崭。
    distribution的github鏈接
  • harbor
    開源的私有倉庫管理工具儿子,在distribution的基礎(chǔ)上增加了ui、認(rèn)證砸喻、配額等等功能柔逼。
    harbor的github鏈接
  • manifest
    鏡像的描述文件,如鏡像的配置信息割岛,數(shù)據(jù)信息(layers)
    manifest官方解釋
  • blob
    blob這個詞應(yīng)該是參考自mysql中的數(shù)據(jù)類型blob愉适,在distribution中表示一個存儲數(shù)據(jù)的文件。

GC邏輯簡介

在1.6版本的harbor中癣漆,暫時還沒有GC的概念维咸,所以這里個GC是指對于鏡像倉庫(distribution)的GC。下面簡單介紹下GC的邏輯惠爽。

  1. 將倉庫設(shè)置為只讀
  2. 遍歷distribution的存儲目錄癌蓖,獲取到鏡像列表。
  3. 遍歷鏡像的revisions目錄婚肆,獲取鏡像的不同版本號的manifest文件费坊。
  4. 根據(jù)3中的manifest,標(biāo)記blob信息旬痹,保存到markSet(字典結(jié)構(gòu))附井,可以索引到的blob就可以認(rèn)為不能刪除。
  5. 遍歷所有blob文件两残,如果blob不在markSet中永毅,則認(rèn)為該blob無鏡像引用,加入到deleteSet中
  6. 遍歷deleteSet人弓,調(diào)用存儲接口挨個刪除blob數(shù)據(jù)沼死,完成鏡像倉庫的清理。

GC的delete-untagged參數(shù)

harbor [ / ]$ registry_DO_NOT_USE_GC garbage-collect --help
`garbage-collect` deletes layers not referenced by any manifests

Usage: 
  registry garbage-collect <config> [flags]
Flags:
  -m, --delete-untagged=false: delete manifests that are not currently referenced via tag
  -d, --dry-run=false: do everything except remove the blobs
  -h, --help=false: help for garbage-collect

通過查詢相關(guān)文檔崔赌,并沒有查看到具體的解釋意蛀,通過梳理代碼流程,這個參數(shù)的作用是清理以下兩種情況下的鏡像健芭。

  1. 使用相同的鏡像tag推送不同的鏡像內(nèi)容县钥,之前的鏡像就不能再通過tag的方式拉取。
docker tag centos:7 myos:v1
docker push myos:v1   # 生成一個sha256值
docker tag ubuntu:20 myos:v1
docker push myos:v1   # 生成一個sha256值

經(jīng)過上訴步驟后慈迈,使用docker pull myos:v1只能拉取到ubuntu的鏡像若贮,但是centos:7這個鏡像并沒有被刪除,可以通過centos:7sha256值的方式進行拉取。

  1. 如果通過sha256的方式刪除鏡像谴麦,那么此sha256對應(yīng)鏡像的tag將無法被拉取蠢沿。
docker push myos:v2  # 生成一個sha256值,比如是987654321
docker tag myos:v2 centos:7
docker push centos:7
docker tag myos:v2 ubuntu:20
docker push ubuntu:20
docker remove remote myos@987654321

經(jīng)過上訴步驟后匾效,centos:7和````ubuntu:20``均無法被拉取舷蟀。

優(yōu)化思路

了解原有g(shù)c速度慢是因為ceph性能低的原因后,就可以做針對性的優(yōu)化面哼。
1野宜、通過s3 list 遍歷獲取鏡像列表 改為 從pgsql中中獲取鏡像列表
2、去掉stat獲取key的狀態(tài)精绎。
3速缨、遍歷blob锌妻,不需要遍歷到data文件代乃。
4、去掉刪除函數(shù)中的list操作仿粹。
5搁吓、合并刪除請求,挨個刪除blob數(shù)據(jù)吭历,修改為每500個blob(這個量要控制一下堕仔,防止ceph崩潰和其他影響),調(diào)用s3接口刪除一次晌区。
6摩骨、為方便觀察GC效率,增加GC記錄信息朗若,每隔5分鐘輸出一次剩余的待刪除layers的數(shù)據(jù)恼五。

GC優(yōu)化流程圖.png

總結(jié)

相關(guān)代碼就不展示了,需要的同學(xué)可以私信獲取哭懈。優(yōu)化的第一步就是要了解到性能慢的細(xì)節(jié)和代碼執(zhí)行的完整步驟灾馒,在有限的條件下思考每個步驟是否有優(yōu)化的空間。本次優(yōu)化遣总,將GC時間從原來的至少兩天縮短到了不到3個小時睬罗,性能提升了20多倍。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末旭斥,一起剝皮案震驚了整個濱河市容达,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌垂券,老刑警劉巖董饰,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡卒暂,警方通過查閱死者的電腦和手機啄栓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來也祠,“玉大人昙楚,你說我怎么就攤上這事≌┖伲” “怎么了堪旧?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長奖亚。 經(jīng)常有香客問我淳梦,道長,這世上最難降的妖魔是什么昔字? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任爆袍,我火速辦了婚禮,結(jié)果婚禮上作郭,老公的妹妹穿的比我還像新娘陨囊。我一直安慰自己,他們只是感情好夹攒,可當(dāng)我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布蜘醋。 她就那樣靜靜地躺著,像睡著了一般咏尝。 火紅的嫁衣襯著肌膚如雪压语。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天编检,我揣著相機與錄音胎食,去河邊找鬼。 笑死蒙谓,一個胖子當(dāng)著我的面吹牛斥季,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播累驮,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼酣倾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谤专?” 一聲冷哼從身側(cè)響起躁锡,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎置侍,沒想到半個月后映之,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拦焚,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年杠输,在試婚紗的時候發(fā)現(xiàn)自己被綠了赎败。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡蠢甲,死狀恐怖僵刮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鹦牛,我是刑警寧澤搞糕,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站曼追,受9級特大地震影響窍仰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜礼殊,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一驹吮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧膏燕,春花似錦钥屈、人聲如沸悟民。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽射亏。三九已至近忙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間智润,已是汗流浹背及舍。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留窟绷,地道東北人锯玛。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像兼蜈,于是被迫代替她去往敵國和親攘残。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 以下內(nèi)容轉(zhuǎn)載于Breeze原博客地址:https://www.cnblogs.com/breezey/[https...
    jan29閱讀 1,764評論 0 0
  • Harbor是一個用于存儲和分發(fā)Docker鏡像的企業(yè)級Registry服務(wù)器为狸,通過添加一些企業(yè)必需的功能特性歼郭,例...
    大鵬之動閱讀 6,464評論 0 2
  • 參考文章 https://github.com/goharbor/harbor-helm https://www....
    東子_8d2f閱讀 562評論 0 0
  • Harbor簡介 Harbor是一個用于存儲和分發(fā)Docker鏡像的企業(yè)級Registry服務(wù)器,通過添加一些企業(yè)...
    SetZero閱讀 3,368評論 3 6
  • 由于docker registry只提供了基本的鏡像上傳下載保存功能辐棒,在用戶認(rèn)證及鑒權(quán)病曾、多用戶管理牍蜂、安全掃描、鏡像...
    wangfeiq閱讀 4,198評論 0 1