国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Harbor鏡像倉庫清理小竅門

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

點擊上方“IT那活兒”公眾號,關注后了解更多內容,不管IT什么活兒,干就完了!!!


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


01


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


02

階段一實現鏡像清理

第一階段使用python實現,大致步驟如下:

  • 獲取harbor連接,登陸指定harbor;
  • 獲取各系統項目名稱清單,獲取相關項目分組;
  • 獲取各項目鏡像的標簽名稱,然后按照時間排序;
  • 按保留個數,依次刪除項目中的過期鏡像標簽。
代碼實現部分:
#! /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數量大于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,按創建時間排序
       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 刪除狀態: %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()

階段二實現垃圾回收

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

END




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

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129429.html

相關文章

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

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

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

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

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

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

    simon_chen 評論0 收藏0
  • Docker相關環境全套安裝文檔兼技能

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

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

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

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

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

    HollisChuang 評論0 收藏0

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

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