成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Harbor鏡像倉庫清理小竅門

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

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


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


01


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


02

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

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

  • 獲取harbor連接,登陸指定harbor;
  • 獲取各系統(tǒng)項目名稱清單,獲取相關(guān)項目分組;
  • 獲取各項目鏡像的標簽名稱,然后按照時間排序;
  • 按保留個數(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):
       # 獲取所有項目名稱
       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):
       # 獲取所有項目ID
       self.pros_id = []
       pro_res = self.__fetch_pros_obj()
       for i in pro_res:
           self.pros_id.append(i[project_id])
       print("所有項目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("項目信息:",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"
       # 項目鏡像倉庫的所有tags,按創(chuàng)建時間排序
       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個,其他的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()

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

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

END




本文作者:李 震(上海新炬王翦團隊)

本文來源:“IT那活兒”公眾號

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

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/129429.html

相關(guān)文章

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

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

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

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

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

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

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

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

    impig33 評論0 收藏0
  • 【容器實例Cube】自建鏡像倉庫支持:自建鏡像倉庫,更強安全性

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

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

    摘要:正好我們在使用作為的倉庫,同時提供了等諸多類型的倉庫功能。值得一提的是,我們可以使用這個倉庫從和下載鏡像,但是我們不能通過這個倉庫推送鏡像到遠程倉庫。 背景 我們一直使用 harbor 作為docker的鏡像倉庫,但Harbor只能作為私有倉庫,當需要Docker Hub 或 Google Cloud Containers 上的鏡像時,我們只能自己手動pull,重新打tag,再push...

    HollisChuang 評論0 收藏0

發(fā)表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<