Python实现Harbor私有镜像仓库垃圾自动化清理详情

yizhihongxing

Python实现Harbor私有镜像仓库垃圾自动化清理详情

在使用容器时,镜像管理非常重要。一个镜像存在于仓库中,仓库最好具有自动清理功能以避免垃圾堆积。Harbor 是一款私有 Docker 镜像仓库管理软件,它可以实现镜像仓库的自动化清理功能。这里我们将详细讲解如何使用 Python 实现 Harbor 私有镜像仓库垃圾自动化清理。

安装依赖

首先,我们需要安装 Python3 和 Python requests 库。可以使用以下命令进行安装:

sudo apt-get update
sudo apt-get install python3
sudo apt-get install python3-pip
pip3 install requests

生成访问 Token

为了自动化删除 Harbor 中的垃圾镜像,我们需要使用 Harbor 的 API。首先,我们需要生成用于访问 API 的 Token。可以使用以下命令来生成 Token:

curl -u 'username:password' "https://harbor.example.com/service/token?account=admin&client_id=harbor&offline_token=true&service=harbor-registry" -k | jq -r '.token'

其中,usernamepassword 分别修改为你的 Harbor 管理员用户名和密码。harbor.example.com 修改为你的 Harbor 地址。如果没有安装 jq 工具,可以忽略 -r '.token'

程序中需要使用到 Token,可以将其存为环境变量或写入配置文件。

编写自动清理脚本

接下来,我们可以编写 Python 脚本来实现自动清理 Harbor 中的垃圾镜像。详细代码见下:

# -*- coding: utf-8 -*-
import requests
import os
import json
import datetime

harbor_host = "https://harbor.example.com"

headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer %s" % os.getenv("HARBOR_TOKEN")
}

def list_all_repo():
    url = harbor_host + "/api/repositories"
    res = requests.get(url=url, headers=headers, timeout=60, verify=False)
    if res.status_code != 200:
        print("Get repo list failed with HTTP Status: %s" % res.status_code)
        return None
    return json.loads(res.text)

def list_all_tags(repo):
    url = "%s/api/repositories/%s/tags" % (harbor_host, repo)
    res = requests.get(url=url, headers=headers, timeout=60, verify=False)
    if res.status_code != 200:
        print("Get tag list failed with HTTP Status: %s" % res.status_code)
        return None
    return json.loads(res.text)

def delete_tag(repo, tag):
    url = "%s/api/repositories/%s/tags/%s" % (harbor_host, repo, tag)
    res = requests.delete(url=url, headers=headers, timeout=60, verify=False)
    if res.status_code != 200:
        print("Delete tag %s failed with HTTP Status: %s" % (tag, res.status_code))
        return False
    return True

if __name__ == '__main__':
    repo_list = list_all_repo()
    for repo in repo_list:
        print("Cleaning repo: %s" % repo.get("name"))
        tags = list_all_tags(repo.get("name"))
        if tags:
            for tag in tags:
                timestamp = int(tag.get("created", "0"))
                if timestamp:
                    created_time = datetime.datetime.fromtimestamp(timestamp)
                    days = (datetime.datetime.now() - created_time).days
                    if days >= 30:
                        print("Deleting tag: %s, created: %s, age: %s days" % (tag.get("name"), created_time.strftime("%Y/%m/%d"), days))
                        delete_tag(repo.get("name"), tag.get("name"))

上述代码中,我们编写了三个函数:

  • list_all_repo:获取 Harbor 中所有仓库的列表。
  • list_all_tags:获取指定仓库的所有镜像标记列表。
  • delete_tag:删除指定仓库中指定镜像标记。

if __name__ == '__main__' 分支中,我们首先获取所有仓库的列表,然后遍历每个仓库的所有镜像标记。对于每个镜像标记,我们计算它的创建时间,如果它的年龄超过 30 天,则删除它。

示例应用

以下是对上述代码的两个示例应用:

示例1:使用 cron 任务定期清理

cron 是一个用于在 Linux 上设置定期任务的工具。我们可以使用如下命令设置一个每天清理一次垃圾镜像的定期任务:

crontab -e
0 0 * * * /usr/bin/python3 /path/to/cleanup.py

以上命令表示在每天午夜(0点)执行 /path/to/cleanup.py 脚本。

示例2:手动清理所有仓库

如果您想手动清理所有仓库的所有镜像标记:

python3 cleanup.py

执行结束后,所有年龄超过 30 天的镜像标记将被删除。

总结

使用 Python 实现 Harbor 私有镜像仓库垃圾自动化清理并不难。通过编写简单的脚本,我们可以轻松地清理过期的镜像标记,避免仓库内的垃圾堆积。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现Harbor私有镜像仓库垃圾自动化清理详情 - Python技术站

(0)
上一篇 2023年6月5日
下一篇 2023年6月5日

相关文章

  • Python进阶教程之创建本地PyPI仓库

    下面给出创建本地PyPI仓库的完整攻略,具体步骤如下: 第一步:安装并配置twine库 twine库是PyPI官方提供的一个上传Python项目的工具,我们需要先安装这个库,并且配置好自己的PyPI账号。 安装:在命令行中输入以下命令:pip install twine 配置账号:在命令行中输入以下命令,按照提示输入自己的PyPI用户名和密码即可: twin…

    python 2023年5月14日
    00
  • python 判断文件还是文件夹的简单实例

    下面是完整攻略: 判断文件和文件夹的简单实例 在Python中,使用os模块可以方便地判断一个路径是文件还是文件夹。常用的函数有os.path.isfile()和os.path.isdir()。 isfile()函数 判断一个路径是否为文件,可以使用os.path.isfile()函数。示例代码如下: import os # 判断文件是否存在 file_pa…

    python 2023年6月2日
    00
  • Python机器学习之决策树算法

    下面是关于“Python机器学习之决策树算法”的完整攻略。 1. 决策树算法的基本原理 决策树算法是一种基于树形结构的分类算法,它通过对数据集进行递归分割,生成一棵树形结构,用于对新数据进行分类。决策树算法的基本流程如下: 选择最优特征:根据某种评估指标,选择最优的特征作为当前节点的分裂特征。 分裂节点:根据分裂特征的取值,将当前节点分裂成多个子节点。 递归…

    python 2023年5月13日
    00
  • Python字符串的创建和驻留机制详解

    Python字符串的创建和驻留机制详解 字符串的创建 在Python中,可以通过以下方式创建一个字符串: 使用单引号或双引号括起来的文字(比如:’hello’ 或 “world”) 使用三个单引号或三个双引号括起来的文字(比如:”’this is a multi-line string”’ 或 “””another multi-line string””…

    python 2023年6月5日
    00
  • 遗传算法python版

    下面是关于“遗传算法Python版”的详细讲解。 1. 遗传算法的基本原理 遗传算法是一种基于自然选择和遗传学原理的优化算法,它通过模拟生物进化过程来寻找最优解。遗传算法的基本流程如下: 初始化种群:随机生成一组初始解作为种群。 选择:根据适应度函数选择一部分优秀的个体作为父代。 交叉:将父代个进行交叉操作,生成新的子代个体。 变异:对子代个体进行变异操作,…

    python 2023年5月13日
    00
  • python好玩的项目—色情图片识别代码分享

    Python 好玩的项目 – 色情图片识别代码分享 本文介绍一种基于 Python 的色情图片识别程序,它能够有效地帮助用户鉴别图片中是否包含色情内容。 开发背景 随着互联网的普及,大量的图片资源在网上流传。其中,有不少图片内容是涉及到黄、赤、绿等等的。有时候我们不小心看到这些图片,不仅令人感到不适,也会影响我们的心情。 因此,开发一款色情图片识别程序是非常…

    python 2023年5月18日
    00
  • Python list运算操作代码实例解析

    以下是详细讲解“Python列表运算操作代码实例解析”的完整攻略。 在Python中,列表是一种常用的数据类型,可以用来存储一组有序的数据。除了基本的增删改查操作,Python还提供了一些列表运算操作,可以更加方便地处理列表数据。本文将介绍Python中常用的列表运算操作,并提供两个示例说明。 运算操作一:列表拼接 列表拼接是将两个或多个列表合并成一个新的列…

    python 2023年5月13日
    00
  • python图片二值化提高识别率代码实例

    下面我将详细讲解“python图片二值化提高识别率代码实例”的完整攻略。 什么是图片二值化? 图片二值化是将彩色或灰度图像转换为黑白(二值)图像的过程。在二值图像中,每个像素的像素值只有两种可能:0或1。通常情况下,0代表黑色,1代表白色。将图像转换为二值图像有助于减少噪声,提高图像的识别率,以及减小处理图像所需的计算量。 如何使用Python进行二值化? …

    python 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部