成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Harbor鏡像倉庫清理小竅門

IT那活兒 / 1797人閱讀
Harbor鏡像倉庫清理小竅門

點(diǎn)擊上方“IT那活兒”公眾號(hào),關(guān)注后了解更多內(nèi)容,不管IT什么活兒,干就完了!?。?/strong>


  
由于集團(tuán)上云進(jìn)度不斷向前推進(jìn),各種大小系統(tǒng)紛紛上云,隨著各系統(tǒng)鏡像不斷push到harbor,harbor倉庫磁盤空間逐漸吃緊, 空間告警頻繁出現(xiàn),由于項(xiàng)目眾多,harbor空間清理起來紛繁復(fù)雜,讓人撓頭。


01


為了讓harbor正常健康運(yùn)行,為各系統(tǒng)上云提供服務(wù),我們要保障harbor 存儲(chǔ)空間的使用率,需要定期清理垃圾,過期鏡像。但人為清理太過繁雜,我們需要設(shè)計(jì)一個(gè)自動(dòng)化流程來完成這一項(xiàng)工作,減少人工消耗。
首先,我們的架構(gòu)是由k8s和harbor倉庫2部分組成,垃圾清理分為2個(gè)階段,第一個(gè)階段是清理鏡像標(biāo)簽,第二個(gè)階段是清理垃圾,釋放磁盤空間,流程如下圖所示:


02

階段一實(shí)現(xiàn)鏡像清理

第一階段使用python實(shí)現(xiàn),大致步驟如下:

  • 獲取harbor連接,登陸指定harbor;
  • 獲取各系統(tǒng)項(xiàng)目名稱清單,獲取相關(guān)項(xiàng)目分組;
  • 獲取各項(xiàng)目鏡像的標(biāo)簽名稱,然后按照時(shí)間排序;
  • 按保留個(gè)數(shù),依次刪除項(xiàng)目中的過期鏡像標(biāo)簽。
代碼實(shí)現(xiàn)部分:
#! /usr/bin/env python3
# -*- coding:utf-8 -*-
import requests
import os
class HarborRequest(object):
   def __init__(self, login_url, username, password):
       self.username = username
       self.password = password
       self.login_url = login_url
       self.session = requests.Session()
       self.login()
   def login(self):
       requests.packages.urllib3.disable_warnings()
       self.session.get(self.login_url, params={"principal": self.username, "password": self.password}, verify=False)
class CleanHarbor(object):
   def __init__(self, harbor_domain, username, password, num, schema="http", ):
       self.num = num
       self.schema = schema
       self.harbor_domain = harbor_domain
       self.harbor_url = self.schema + "://" + self.harbor_domain
       self.login_url = self.harbor_url + "/login"
       self.api_url = self.harbor_url + "/api"
       self.pro_url = self.api_url + "/projects"
       self.repos_url = self.api_url + "/repositories"
       self.username = username
       self.password = password
       self.client = HarborRequest(self.login_url, self.username, self.password)
   def __fetch_pros_obj(self):
       # 獲取所有項(xiàng)目名稱
       self.pros_obj = self.client.session.get(self.pro_url).json()
       for n in self.pros_obj:
           print("分組:",n.get("name"))
       return self.pros_obj
   def fetch_pros_id(self):
       # 獲取所有項(xiàng)目ID
       self.pros_id = []
       pro_res = self.__fetch_pros_obj()
       for i in pro_res:
           self.pros_id.append(i[project_id])
       print("所有項(xiàng)目ID:",self.pros_id)
       return self.pros_id
   def fetch_del_repos_name(self, pro_id):
       # 鏡像tag數(shù)量大于self.num的鏡像倉庫名稱
       self.del_repos_name = []
       repos_res = self.client.session.get(self.repos_url, params={"project_id": pro_id})
       #print("項(xiàng)目信息:",repos_res.json())
       for repo in repos_res.json():
           if repo["tags_count"] > self.num:
              # print("鏡像倉庫名稱:",repo[name])
               self.del_repos_name.append(repo[name])
       return self.del_repos_name
   def fetch_del_repos(self, repo_name):
       # 刪除鏡像倉庫tag
       
       self.del_res = []
       tag_url = self.repos_url + "/" + repo_name + "/tags"
       # 項(xiàng)目鏡像倉庫的所有tags,按創(chuàng)建時(shí)間排序
       tags = self.client.session.get(tag_url).json()
       tags_sort = sorted(tags, key=lambda a: a["created"])
       #print(len(tags_sort),tags_sort)
       # 除了最新的self.num個(gè),其他的tag都添加到待刪除列表del_tags
       del_tags = tags_sort[0:len(tags_sort) - self.num]
       # print(del_tags)
       for tag in del_tags:
           del_repo_tag_url = tag_url + "/" + tag[name]
           print(del_repo_tag_url)
           del_res = os.popen(curl -X DELETE -u %s:%s -s -w %s %s % (self.username,self.password,%{http_code},del_repo_tag_url)).readlines()
           self.del_res.append("鏡像: %s 刪除狀態(tài): %s" % (del_repo_tag_url,del_res))
       return self.del_res
   def work(self):
       # 遍歷project id
       for i in self.fetch_pros_id():
           # 獲取所有tag超過self.num的repos
           repos = self.fetch_del_repos_name(i)
           if repos:
               for repo in repos:
                   del_repos = self.fetch_del_repos(repo)
                   print(del_repos)
if __name__ == "__main__":
   clean = CleanHarbor(harbor_domain="192.168.xx.xxx",
                       username="harbor",
                       password="Harbor@123",
                       num=3)
   clean.work()

階段二實(shí)現(xiàn)垃圾回收

使用harbor管理界面,配置清理任務(wù)。
  • 登陸harbor倉庫配置web界面
  • 配置任務(wù)垃圾清理,定時(shí)清理垃圾,釋放系統(tǒng)磁盤空間
總結(jié):隨著云化的不斷推進(jìn),諸多傳統(tǒng)的運(yùn)維動(dòng)作變的異常復(fù)雜,我們需要不斷的創(chuàng)新、改造運(yùn)維手段,并持續(xù)學(xué)習(xí)掌握新的運(yùn)維工具和云化相關(guān)組件,才能夠適應(yīng)如今不斷更新迭代的云化產(chǎn)品以及相關(guān)的DevOps工作。

END




本文作者:李 震(上海新炬王翦團(tuán)隊(duì))

本文來源:“IT那活兒”公眾號(hào)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/129429.html

相關(guān)文章

  • 可能是最詳細(xì)的部署:Docker Registry企業(yè)級(jí)私有鏡像倉庫Harbor管理WEB UI

    摘要:私有倉庫是,并在中運(yùn)行。不要使用或?yàn)橹鳈C(jī)名注冊(cè)表服務(wù)需要由外部客戶端訪問或,默認(rèn)為用于訪問和令牌通知服務(wù)的協(xié)議。打開或關(guān)閉,默認(rèn)打開打開此屬性時(shí),準(zhǔn)備腳本創(chuàng)建私鑰和根證書,用于生成驗(yàn)證注冊(cè)表令牌。 上一篇文章搭建了一個(gè)具有基礎(chǔ)功能,權(quán)限認(rèn)證、TLS 的私有倉庫,但是Docker Registry 作為鏡像倉庫,連管理界面都沒有,甚至連一些運(yùn)維必備的功能都是缺失的,還有什么 Docker...

    沈儉 評(píng)論0 收藏0
  • 基于 Harbor 搭建 Docker 私有鏡像倉庫

    摘要:的每個(gè)組件都是以容器的形式構(gòu)建的,使用來對(duì)它進(jìn)行部署。登錄輸入用戶名,默認(rèn)密碼或已修改密碼登錄系統(tǒng)。 showImg(https://segmentfault.com/img/remote/1460000012261129?w=1280&h=786); 什么是 Harbor? 第一次使用這個(gè)的時(shí)候是剛進(jìn)公司處理的第一個(gè)任務(wù)的時(shí)候,發(fā)現(xiàn) Harbor 就是一個(gè)用于存儲(chǔ)和分發(fā) Docker...

    lvzishen 評(píng)論0 收藏0
  • VMware Harbor:基于 Docker Distribution 的企業(yè)級(jí) Registry

    摘要:架構(gòu)介紹主要組件在架構(gòu)上主要由五個(gè)組件構(gòu)成的等服務(wù),通過一個(gè)前置的反向代理統(tǒng)一接收瀏覽器客戶端的請(qǐng)求,并將請(qǐng)求轉(zhuǎn)發(fā)給后端不同的服務(wù)。目前不支持功能已提交。 前言 對(duì)于 Harbor 這樣一個(gè)優(yōu)秀的 Docker Registry 管理開源項(xiàng)目,以下內(nèi)容基本上來自前人已有的研究,我只是將其在實(shí)踐中進(jìn)行了測(cè)試,并整理匯集了相關(guān)資料供大家參考,同時(shí)針對(duì) Harbor 與 Rancher產(chǎn)品的...

    simon_chen 評(píng)論0 收藏0
  • Docker相關(guān)環(huán)境全套安裝文檔兼技能

    摘要:在年的月號(hào)之后,的版本命名開始發(fā)生變化,同時(shí)將版本和版本進(jìn)行分開,表示年月發(fā)布。離線安裝命名前安裝我們可以使用來對(duì)多個(gè)容器進(jìn)行管理。離線安裝安裝公司開源的企業(yè)級(jí)的管理項(xiàng)目。 以下環(huán)境皆為ubuntu16.04,主要安裝docker,docker-compose,docker倉庫等。 Docker安裝 參考官方 A: 有源安裝 sudo apt-get remove docker doc...

    impig33 評(píng)論0 收藏0
  • 【容器實(shí)例Cube】自建鏡像倉庫支持:自建鏡像倉庫,更強(qiáng)安全性

    摘要:輸入鏡像地址后,在自建鏡像倉庫欄,輸入自建鏡像倉庫詳細(xì)信息,字段說明如下,當(dāng)前只支持基于同一主賬號(hào)下云主機(jī)搭建的鏡像倉庫。自建鏡像倉庫支持容器鏡像封裝了應(yīng)用代碼,是用戶的重要資產(chǎn)之一,出于強(qiáng)安全性的考慮,部分用戶在容器應(yīng)用的使用過程中有使用自建鏡像倉庫的需求。Cube 支持拉取同一 VPC 下的自建鏡像倉庫,豐富了使用場(chǎng)景,確保用戶鏡像和代碼安全??刂婆_(tái)創(chuàng)建 / 修改 Cube 實(shí)例在控制臺(tái)...

    Tecode 評(píng)論0 收藏0
  • 使用nexus3.x配置docker鏡像倉庫倉庫代理

    摘要:正好我們?cè)谑褂米鳛榈膫}庫,同時(shí)提供了等諸多類型的倉庫功能。值得一提的是,我們可以使用這個(gè)倉庫從和下載鏡像,但是我們不能通過這個(gè)倉庫推送鏡像到遠(yuǎn)程倉庫。 背景 我們一直使用 harbor 作為docker的鏡像倉庫,但Harbor只能作為私有倉庫,當(dāng)需要Docker Hub 或 Google Cloud Containers 上的鏡像時(shí),我們只能自己手動(dòng)pull,重新打tag,再push...

    HollisChuang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<