harbor 如何做到物理删除镜像 harbor镜像清理脚本

一、背景

相比于nexus,harbor的一大优点是方便及时清理无用的docker镜像。本文就harbor怎么设置清理,梳理一下具体的操作办法。

  • harbor 版本是 v2.9.0

二、目标

随着我们推送至仓库的镜像越来越多,带来的一个最大运维问题就是存储空间的浪费,需要我们能够把旧的镜像清理出去。这就要求我们按推送的时间倒序排列,保留最新推送的多少个,从而删除较早推送的记录。

 三、设置

  • 已使用存储空间为2.54GB
  • library/vue-cli镜像已推送的总数为4个
  • library/node镜像已推送的总数为3个

所以,我们测试规则中的保留数不宜过多,暂定为3个。
预期效果是:library/vue-cli的最早的一个镜像将被清理掉,而 library/node 因为没有超过阈值,所以不会变化。

 

 1、策略

策略支持多个规则,不过我们不需要那么多。我这里选择的是第一个默认规则,保留最近推送的3个。

然后执行的频率是每周,这个频率看每个人的使用场景。

 

2、模拟运行

查看清理的明细日志:

2023-10-10T01:02:19Z [INFO] [/pkg/retention/job.go:86]: Run retention process.
 Repository: library/vue-cli
 Rule Algorithm: or
 Dry Run: true
 2023-10-10T01:02:21Z [INFO] [/pkg/retention/job.go:101]: Load 4 candidates from repository library/vue-cli
 2023-10-10T01:02:21Z [INFO] [/pkg/retention/job.go:212]:
 | Digest | Tag | Kind | Labels | PushedTime | PulledTime | CreatedTime | Retention |
 |-------------------------------------------------------------------------|-------------------------|-------|--------|---------------------|---------------------|---------------------|-----------|
 | sha256:9ebe43b637dbda81e0513ef21b950a4fcf3319482fe6f25e16653b41406370ef | 3.3.0_build202309150905 | image | | 2023/10/09 01:21:56 | 2023/10/09 09:40:53 | 2023/10/09 01:21:56 | RETAIN |
 | sha256:dce192888562d266e6959776f1fd772e89f1f654044fbd445e4475d5ba4d7f7e | 3.3.0_build202303140655 | image | | 2023/10/09 01:20:50 | | 2023/10/09 01:20:49 | RETAIN |
 | sha256:165463708f354f8d96ba083b7fbbb1f25b9c8533cbc01117e7648c195733cc8d | 3.3.0_build202109241209 | image | | 2023/10/09 01:20:11 | | 2023/10/09 01:20:11 | RETAIN |
 | sha256:5a9e9334f5db76e592ca22c6b31755ce666742ff0a7dc7834b53c5bc7eaae5e4 | 3.3.0_build202108200549 | image | | 2023/10/09 01:20:01 | | 2023/10/09 01:20:01 | DEL |

日志是按创建时间排序排列,可以看出,标签为3.3.0_build202108200549的镜像将被移除,它的推送时间是2023/10/09 01:20:01,为最早推送的一个,因此符合我们对清理的预期。

  • 作为对比,另外一个镜像的清理日志就不会出现DEL的操作。(因为library/node总共只有3个,而清理的规则也恰好是3个,意味着没有超过清理的阈值)
2023-10-10T00:59:41Z [INFO] [/pkg/retention/job.go:86]: Run retention process.
 Repository: library/node
 Rule Algorithm: or
 Dry Run: true
 2023-10-10T00:59:43Z [INFO] [/pkg/retention/job.go:101]: Load 3 candidates from repository library/node
 2023-10-10T00:59:43Z [INFO] [/pkg/retention/job.go:212]:
 | Digest | Tag | Kind | Labels | PushedTime | PulledTime | CreatedTime | Retention |
 |-------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------|-------|--------|---------------------|---------------------|---------------------|-----------|
 | sha256:1b7e5ae382ed76a8e39a4afaa968f4b68f00501db7e8b91e5870117b881207c9 | 3.3.0_build202310090525 | image | | 2023/10/09 05:30:15 | 2023/10/10 00:41:02 | 2023/10/09 05:30:14 | RETAIN |
 | sha256:9ebe43b637dbda81e0513ef21b950a4fcf3319482fe6f25e16653b41406370ef | 3.3.0_build202310090127,3.3.0_build202309210924,3.3.0_build202309150958,3.3.0_build202309150956 | image | | 2023/10/09 01:27:10 | 2023/10/09 01:30:42 | 2023/10/09 01:25:00 | RETAIN |
 | sha256:59167f718a1f6daecb900ffbb4f5b09f0dca709c5d7e180f33bbaeac076cdb7b | 16.20.2-bullseye | image | | 2023/10/09 01:24:56 | | 2023/10/09 01:24:56 | RETAIN |

3、立即执行

在你使用模拟运行确认无误后,一定会要点击“立即运行”。

但是运行完成后,持续时间是4秒,可harbor的存储空间并无变化。(仍旧是2.54GB)

四、清理服务

点击“立即清理垃圾”,看到下面的任务记录。

2023-10-10T01:42:45Z [INFO] [/jobservice/job/impl/gc/garbage_collection.go:599]: ID-3 MediaType-application/vnd.docker.container.image.v1+json ManifestMediaType-application/vnd.docker.distribution.manifest.v2+json RepositoryName-library/vue-cli Digest-sha256:5a9e9334f5db76e592ca22c6b31755ce666742ff0a7dc7834b53c5bc7eaae5e4 CreationTime-2023-10-10 01:38:52
 2023-10-10T01:42:45Z [INFO] [/jobservice/job/impl/gc/garbage_collection.go:341]: [05491b08-f601-4ee7-a5bf-c32a76cd96ca][3/11] delete the manifest with registry v2 API: library/vue-cli, application/vnd.docker.distribution.manifest.v2+json, sha256:5a9e9334f5db76e592ca22c6b31755ce666742ff0a7dc7834b53c5bc7eaae5e4
 2023-10-10T01:42:45Z [INFO] [/jobservice/job/impl/gc/garbage_collection.go:370]: [05491b08-f601-4ee7-a5bf-c32a76cd96ca][3/11] delete manifest from storage: sha256:5a9e9334f5db76e592ca22c6b31755ce666742ff0a7dc7834b53c5bc7eaae5e4
 2023-10-10T01:42:45Z [INFO] [/jobservice/job/impl/gc/garbage_collection.go:398]: [05491b08-f601-4ee7-a5bf-c32a76cd96ca][3/11] delete artifact blob record from database: 3, library/vue-cli, sha256:5a9e9334f5db76e592ca22c6b31755ce666742ff0a7dc7834b53c5bc7eaae5e4
 2023-10-10T01:42:45Z [INFO] [/jobservice/job/impl/gc/garbage_collection.go:406]: [05491b08-f601-4ee7-a5bf-c32a76cd96ca][3/11] delete artifact trash record from database: 3, library/vue-cli, sha256:5a9e9334f5db76e592ca22c6b31755ce666742ff0a7dc7834b53c5bc7eaae5e4

 五、查看清理后

观察镜像library/vue-cli 的数量,可以看出,最早的标签已被清理。

六、保留最近多少天被拉取过的artifact

由于xxx/api-platform镜像只推送过一次镜像,为了演示“立即运行”的清理,我使用另外一个规则,“保留最近多少天被拉取过的artifact”。(因为xxx/api-platform镜像好久没被拉取过,所以预期将被清理)

从上图也可以看出,它将保留0个,也即全部清理。

2023-10-10T01:57:03Z [INFO] [/pkg/retention/job.go:86]: Run retention process.
 Repository: xxx/api-platform
 Rule Algorithm: or
 Dry Run: false
 2023-10-10T01:57:05Z [INFO] [/pkg/retention/job.go:101]: Load 1 candidates from repository xxx/api-platform
 2023-10-10T01:57:05Z [INFO] [/pkg/retention/job.go:212]:
 | Digest | Tag | Kind | Labels | PushedTime | PulledTime | CreatedTime | Retention |
 |-------------------------------------------------------------------------|-------|-------|--------|---------------------|------------|---------------------|-----------|
 | sha256:f7f0721d6ce20278942c97b59c361a0256fc8330a1c21fe0044bc85e6ce91d58 | 1.0.2 | image | | 2023/10/09 01:26:25 | | 2023/10/09 01:26:25 | DEL |

 七、总结

这里通过清理的对比实验,可以看出“策略”–》“立即运行”,也可以清理掉无用的构建物;那么外面单独的菜单–“清理服务”是起何作用?

清理服务,从日志内容可以看到,它清理的是垃圾:“xx个 blob(s) 和 xx个 manifest(s) 将被删除”,另外它还可以清理harbor本身的日志记录。

2023-10-10T02:13:03Z [INFO] [/jobservice/job/impl/gc/garbage_collection.go:162]: Garbage Collection parameters: [delete_untagged: false, dry_run: true, time_window: 2, workers: 1]
2023-10-10T02:13:03Z [INFO] [/jobservice/job/impl/gc/garbage_collection.go:172]: start to run gc in job.
2023-10-10T02:13:03Z [WARNING] [/jobservice/job/impl/gc/garbage_collection.go:213]: no removed artifacts.
2023-10-10T02:13:04Z [INFO] [/jobservice/job/impl/gc/garbage_collection.go:261]: blob eligible for deletion: sha256:d5db42f314af162c5dc93a6c89a5bfeda6307f9acf3c2290d41c32668855016d
2023-10-10T02:13:04Z [INFO] [/jobservice/job/impl/gc/garbage_collection.go:261]: blob eligible for deletion: sha256:076545cf68e620c922789f9321e2de7f8eb88b850906d53194eeb5c77f1ff23d
2023-10-10T02:13:04Z [INFO] [/jobservice/job/impl/gc/garbage_collection.go:261]: blob eligible for deletion: sha256:330d755f124c8b8e56a11ad2b053fb4eee18a0399b6ec8acc777bb712ba12b30
2023-10-10T02:13:04Z [INFO] [/jobservice/job/impl/gc/garbage_collection.go:261]: blob eligible for deletion: sha256:eac1b95df832dc9f172fd1f07e7cb50c1929b118a4249ddd02c6318a677b506a
2023-10-10T02:13:04Z [INFO] [/jobservice/job/impl/gc/garbage_collection.go:261]: blob eligible for deletion: sha256:47aa3ed2034c4f27622b989b26c06087de17067268a19a1b3642a7e2686cd1a3
2023-10-10T02:13:04Z [INFO] [/jobservice/job/impl/gc/garbage_collection.go:261]: blob eligible for deletion: sha256:0a34e63c37606f57dbba92a722b19bfb743d619a48ea93de80548ca5198ad22d
2023-10-10T02:13:04Z [INFO] [/jobservice/job/impl/gc/garbage_collection.go:261]: blob eligible for deletion: sha256:e29a0832e742d9ab0040e9bab8f502b7890d9d17bc6a140432deee5659710e27
2023-10-10T02:13:04Z [INFO] [/jobservice/job/impl/gc/garbage_collection.go:261]: blob eligible for deletion: sha256:f7f0721d6ce20278942c97b59c361a0256fc8330a1c21fe0044bc85e6ce91d58
2023-10-10T02:13:04Z [INFO] [/jobservice/job/impl/gc/garbage_collection.go:261]: blob eligible for deletion: sha256:5bd4f271ae1c8e7db16cdd6948b5c2736852247ff16414102dd568e5f11f94b5
2023-10-10T02:13:04Z [INFO] [/jobservice/job/impl/gc/garbage_collection.go:261]: blob eligible for deletion: sha256:17497ec24c6e61e3f16afadd5e376e9bf737edb2175e62864d26806bf328a496
2023-10-10T02:13:04Z [INFO] [/jobservice/job/impl/gc/garbage_collection.go:273]: 9 blobs and 1 manifests eligible for deletion
2023-10-10T02:13:04Z [INFO] [/jobservice/job/impl/gc/garbage_collection.go:274]: The GC could free up 373 MB space, the size is a rough estimation.
2023-10-10T02:13:04Z [INFO] [/jobservice/job/impl/gc/garbage_collection.go:200]: success to run gc in job.

使用建议

 先对各个项目的策略进行配置,配合使用清理服务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/893670.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SL3037B降压恒压芯片DC24伏输入5伏输出带单片机,电流100mA

一、SL3037B芯片概述 SL3037B是一款内置功率MOSFET的单片降压型开关模式转换器,具有高效、稳定、外围元器件少等特点。它能够在宽输入电源范围(5.5~60V)内实现0.6A的峰值输出电流,并具有出色的线电压和负载调整率。此外&#xff…

利用LangChain实现大语言模型与数据库的交互对话

大语言模型使用LangChain与数据库对话 大型语言模型(LLMs)的兴起在技术上带来了重大转变,使开发者能够创建曾经难以想象的应用程序。LangChain 是一个提示编排工具,利用LLMs的能力改变你与数据库的通信方式。通过LangChain&#…

从零讲解线性回归(Linear Regression)

Linear Regression 线性回归 线性回归是一种简单且常用的技术,用来预测连续变量,假设预测变量(自变量, x_i )和结果变量(因变量, y_i )之间存在线性关系。线性回归公式&#xff08…

Qt自定义一个圆角对话框

如何得到一个圆角对话框? 步骤: 1、继承自QDiaglog 2、去掉系统自带的边框 3、设置背景透明,不设置4个角会有多余的部分出现颜色 4、对话框内部添加1个QWidget,给这个widget设置圆角,并添加到布局中让他充满对话框 5、后续对…

智慧校园打架斗殴检测预警系统 异常奔跑检测系统 Python 和 OpenCV 实现简单

在当今数字化时代,智慧校园建设已成为教育领域的重要发展方向。校园安全作为学校管理的重中之重,如何借助先进的技术手段实现高效、精准的安全监控,成为了教育工作者和技术专家共同关注的焦点。其中,智慧校园打架斗殴检测预警系统…

linux线程 | 线程的控制(上)

前言:本节内容为线程的控制。在本篇文章中, 博主不仅将会带友友们认识接口, 使用接口。 而且也会剖析底层,带领友友们理解线程的底层原理。 相信友友们学完本节内容, 一定会对线程的控制有一个很好的把握。 那么&#…

Spring AI 整体介绍_关键组件快速入门_prompt_embedding等

Spring AI:Java开发者的AI集成新利器 在过去,Java开发者在构建AI应用时面临着缺乏统一框架的问题,导致不同AI服务的集成过程复杂且耗时。Spring AI应运而生,旨在为基于Java的应用程序提供一个标准化、高效且易于使用的AI开发平台…

用PHP爬虫API数据获取商品SKU信息实战指南

在电子商务的精细化运营中,SKU(Stock Keeping Unit,库存单位)信息是商品管理的核心。它不仅包含了商品的规格、价格、库存等关键数据,还直接影响到库存管理、价格策略和市场分析等多个方面。本文将介绍如何使用PHP爬虫…

Java程序设计:spring boot(3)——spring boot核心配置

目录 1 设置 Banner 图标 1.1 Banner 图标⾃定义 1.2 Banner 图标关闭 2 Spring Boot 配置⽂件 3 Starter 坐标 & ⾃动化配置 3.1 Starter坐标配置 3.1.1 Web starter 3.1.2 Freemarker Starter & Thymeleaf starter 3.1.3 JavaMail邮件发送 Starter 3.1.4 引…

mysql--表的约束

目录 理解表的约束和操作 如何理解? 1、空属性null 2、默认值default 3、列描述comment 4、自动填充zorefill 5、主键primary key (1)创建表时指定可以 (2)创建表后指定key (3)删除主…

注册函数和回调函数使用讲解

1.概念 注册和回调函数在C语言编程中非常常见,也经常用到。注册和回调的机制也大量使用在Linux内核中。学会使用注册和回调函数是C语言开发者应当掌握的一项编程技能。 函数的本质在内存上体现的是地址。我们知道函数的地址后,就能够调用这个函数。 …

ESP32移植Openharmony外设篇(1)MQ-2烟雾传感器

外设篇 实验箱介绍 旗舰版实验箱由2部分组成:鸿蒙外设模块(支持同时8个工作)、鸿蒙平板。 其中,鸿蒙平板默认采用RK3566方案。 OpenHarmony外设模块采用底板传感器拓展板方式,底板默认采用ESP32方案,也…

部署Qwen2.5-7b大模型详解

部署Qwen2.5-7b大模型详解 本文参考教程:https://qwen.readthedocs.io/en/latest/getting_started/quickstart.html 下载模型 https://modelscope.cn/organization/qwen 搜索 qwen2.5-7b 可以看到它提供了六个模型,以满足不同的需求,从下…

HBuilder X中搭建Vue-cli项目组件和路由以及UI库使用(二)

一、创建组件 &#xff08;1&#xff09;在vj1项目src|右键|vue文件 &#xff08;2&#xff09;组件常用模版 <!--该标签用于写HTML代码,必须有一个根标签,如下<div>是根标签--> <template> <div>首页</div> </template><!--该标签用…

c++算法第3天

本篇文章包含三道算法题&#xff0c;难度由浅入深&#xff0c;适合新手练习哟 目录 第一题 题目链接 题目解析 代码原理 代码编写 本题总结 第二题 题目链接 题目解析 代码原理 代码编写 第三题 题目链接 题目解析 代码原理 代码编写 第一题 题目链接 [NOIP2…

【word】页眉横线无法取消

小伙伴们日常想在页眉里加横线&#xff0c;直接双击页眉&#xff0c;然后在页眉横线里选择自己喜欢的横线样式就可以了。 但今天我遇到的这个比较奇特&#xff0c;有些页有这个横线&#xff0c;有些页没有&#xff0c;就很奇怪。 最后排查完&#xff0c;发现是只有标题2的页…

拓数派创始人冯雷出席联合国人居署《未来城市顾问展望2024》 报告结题专家会

近日&#xff0c;联合国人居署中国未来城市顾问委员会在内蒙古鄂尔多斯市国际会展中心召开《未来城市顾问展望2024&#xff1a;数字城市治理》报告结题会暨走进鄂尔多斯市活动。拓数派创始人、董事长兼首席执行官冯雷&#xff08;Ray Von&#xff09;应邀出席本次活动&#xff…

《计算机视觉》—— 疲劳检测

文章目录 一、疲劳检测实现的思想二、代码实现 一、疲劳检测实现的思想 了解以下几篇文章有助于了解疲劳检测的方法 基于dlib库的人脸检测 https://blog.csdn.net/weixin_73504499/article/details/142977202?spm1001.2014.3001.5501 基于dlib库的人脸关键点定位 https://blo…

个人博客搭建 | Hexo框架

文章目录 1.Hexo安装2.创建博客3.将博客通过GitHub来部署4.更换主题 1.Hexo安装 Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown&#xff08;或其他标记语言&#xff09;解析文章&#xff0c;在几秒内&#xff0c;即可利用靓丽的主题生成静态网页。搭建Hexo首先要…

基于vue框架的的大连金州红星社区物业管理系统dg6co(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;楼栋信息,住户,社区投诉,设备报修,报修完成,车位信息,缴费信息,房屋信息,维修工,保安,来访人员,缴费申诉,公共设备,设备类型,消防设备,公共场地 开题报告内容 基于Vue框架的大连金州红星社区物业管理系统的设计与实现开题报告 一、研究…