• Harbor1.5.2批量清理无效镜像


    Harbor1.5.2批量清理无效镜像

    主要是通过shell调用harbor的api进行镜像tag的批量删除7天前的镜像,网上也有些python的例子

    1、删除多个命名空间下7天前镜像

    harbor中的项目名称和k8s中命名空间一致,需要用到3个文件,2个脚本,一个txt

    delete_harbor_tag.sh

    #!/bin/bash
    if [[ $# -lt 1 ]];then
            echo "Usage: sh delete_harbor_tag.sh namespaces(对应命名空间)"
            exit 1
    fi
    URL="https://harbor-master.yooli-me.com"
    USER="admin"
    PASS="密码"
    PRO="$1"
    
    # 软删除 harbor tags
    del_tags()
    {
        echo "软删除 ${rp}/${t}"
        curl -XDELETE -k -H 'Accept: text/plain' -u ${USER}:${PASS} "${URL}/api/repositories/${rp}/tags/${t}"
    
    }
    
    
    # 获取 project id
    PID=$(curl -s -k -XGET  --header 'Accept: application/json' "${URL}/api/projects"|grep -w -B 2 "${PRO}" |grep "project_id"|awk -F '[:, ]' '{print $7}')
    #echo ${PID}
    
    # 拿获取到的 projects_id 获取 repositories
    REPOS=$(curl -s -k -XGET --header 'Accept: application/json' "${URL}/api/repositories?project_id=${PID}"|grep "name"|awk -F '"' '{print $4}')
    for rp in ${REPOS}
    do
        echo ${rp}
    
        TAGS=$(curl -s -k -XGET --header 'Accept: application/json' "${URL}/api/repositories/${rp}/tags"|grep "name"|awk -F '"' '{print $4}'|sort -r |awk 'NR > 7 {print $1}')
    
        for t in ${TAGS}
        do
            echo ${t}
            del_tags
        done
    
        echo "=============================="
    done
    

    namespaces.txt

    把需要清理的命令空间名称写到这个namespaces.txt文件里

    bulk-deletion.sh(批量删除多个命名空间镜像清理脚本)

    #!/bin/bash
    
    HARBOR_PAHT="/usr/local/harbor"
    
    #软删除
    soft_del_tags()
    
    {
    
       for item in `cat /usr/local/shells/namespaces.txt`
       do
    
          sh /usr/local/shells/delete_harbor_tag.sh $item
            if [ $? -eq 0 ];then
    
            echo "命名空间$item内7天前的镜像tag已被删除"
    
          else
    
            exit 1
          fi
    
       done
    }
    
    #彻底从硬盘上删除
    har_del_tags()
    {
       sleep 10
       cd ${HARBOR_PAHT}
       docker-compose stop
       
       sleep 10
    
       if [ $? -eq 0 ];then
          docker run -it --name gc --rm --volumes-from registry vmware/registry:2.6.2-photon garbage-collect /etc/registry/config.yml
       else
          exit 1
    
       fi
       docker-compose start
    }
    
    
    soft_del_tags
    
    har_del_tags
    

    工具用法

    1、把对应的命名空间名字写入namespaces.txt文件
    2、修改delete_harbor_tag.sh脚本中URL和PASS这2个变量的值
    3、修改bulk-deletion.sh脚本中HARBOR_PATH这个变量的值
    4、执行脚本sh bulk-deletion.sh
    

    参考

    脚本大部分是用的网上一篇博客的文档,具体链接找不到了,改动的地方有2处,第1处是curl命令加了个-k,作用是:allow connections to SSL sites without certs;第2处是扩展了下,增加了for循环批量删除功能
    
  • 相关阅读:
    面对一个全新的环境,作为一个Mysql DBA,首先应该了解什么?
    Puppet学习之puppet的安装和配置
    Puppet学习之文件管理
    AJAx在windows 2003 系统下没有响应
    如何学习jquery
    系统底层图书推荐
    Jquery+Aspx实现Ajax得不到响应
    如何深入学习asp.net
    asp.net精华文章推荐
    爱恨交加的asp.net服务器控件
  • 原文地址:https://www.cnblogs.com/uglyliu/p/12225745.html
Copyright © 2020-2023  润新知