harbor镜像清理脚本
清理harbor镜像
#!/bin/bash
set -e
HARBOR_URL=harbor.k8s-qa.eslink.net.cn
HARBOR_PASSWD=Harbor12345
OLD_VERSION_NUM=5
test_flag=0
function get_repos_list(){#repos_list:返回值为js格式,可以看到每一个仓库的portid等信息repos_list=$(curl -s -k -u admin:${HARBOR_PASSWD} http://${HARBOR_URL}/api/projects?page=1&page_size=50)mkdir -p $PWD/reposListecho "${repos_list}" | jq '.[]' | jq -r '.project_id' > $PWD/reposList/reposList.txt#把第一个命令作为第二个传入给下一个,获取 到有多少个镜像项目 1
}function get_images_list(){mkdir -p $PWD/imagesListfor repo in $(cat $PWD/reposList/reposList.txt);do#images_list:返回的是项目镜像里面的信息images_list=$(curl -s -k -u admin:${HARBOR_PASSWD} http://${HARBOR_URL}/api/repositories?project_id=${repo})echo "${images_list}" | jq '.[]' | jq -r '.name' > $PWD/imagesList/${repo}.txt#获取 每个项目下有多少个镜像 rancher/istio/examples-bookinfo-ratings-v1done
}function delete_images(){#=====初始化====#rm -fr delete_images_tagmkdir -p delete_images_flagmkdir -p delete_images_taglen=0num=0num_delete_p_row=0num_p_row=0num_all_row=0images_name_flag=$1all_images_tag=() test_flag=$[$test_flag+1]echo -e "\n \n第$test_flag镜像 ========== 执行镜像: $images_name_flag =============="echo "第$test_flag镜像 ========== 执行镜像: $images_name_flag =============="echo "第$test_flag镜像 ========== 执行镜像: $images_name_flag ==============" #=====初始化====##读取harbor信息
#信息输出到 delete_images_flag/images-htmlinfo.txt上 htmlinfo=$(curl -s -k -u admin:${HARBOR_PASSWD} http://${HARBOR_URL}/api/repositories/$images_name_flag/tags)echo "${htmlinfo}" > $PWD/delete_images_flag/images-htmlinfo.txt#打印镜像信息,tag,统计总行数num_all_row
#将tag打印到 delete_images_tag/no_arrange_tag_time.txt
#统计总行数num_all_row 大于设置值就不需要清理tag=$(echo "${htmlinfo}" |jq '.[]' | jq -r '.name') echo "${tag}" > $PWD/delete_images_tag/no_arrange_tag_time.txtnum_all_row=$( sed -n '$=' $PWD/delete_images_tag/no_arrange_tag_time.txt)echo "=====tag总行数 num_all_row=$num_all_row======="if [[ "${num_all_row}" -lt "${OLD_VERSION_NUM}" ]]; thenecho "$images_name_flag tag总行数小于设置值,不需要清理!!!"returnfi#打印的镜像排序,p-的不参与尽量,p-总行数num_delete_p_row
#将整理的 tag输出到 delete_images_tag/tag_time.txt,sort -n -k2 delete_images_tag/no_arrange_tag_time.txt |sed '/p-/d' > delete_images_tag/tag_time.txtecho "=====================检测是否能执行================="
echo "=====================检测是否能执行================="
echo "=====================检测是否能执行================="
echo "=====================检测是否能执行================="
#检测tag_time.txt一共多少行,num_delete_p_row,减去保留行数,还多少
#如果小于0,则不需要删除num_delete_p_row=$( sed -n '$=' $PWD/delete_images_tag/tag_time.txt) echo "=============$images_name_flag num_delete_p_row=$num_delete_p_row ==============="num=$[$num_delete_p_row - $OLD_VERSION_NUM]echo "=============$images_name_flag num=$num ==============="if [[ "${num}" -le "0" ]]; then #判断是否大于 0echo "$images_name_flag has no need of cleanup!!!"returnfi#读取tag_time.txt数据,将数据存放在flag_i_row数组上
#数据存在在数组上,等待删除flag_i_row=0for i_row_tag in $(cat $PWD/delete_images_tag/tag_time.txt); doflag_i_row=$[$flag_i_row+1]all_images_tag[flag_i_row]="${i_row_tag}"donelen=${#all_images_tag[@]}num=$[$len-$OLD_VERSION_NUM]echo "******* 总镜像数量len=$len 需要删除镜像数量 num=$num *******"echo -e "\n\n" >> $PWD/delete_images_tag.txtfor index in $(seq 1 ${num}); do# tag=$(echo "${htmlinfo}" | jq ".[${index}]" | jq -r '.name')tag=${all_images_tag[index]} echo "===需要删除的镜像 images=$images_name_flag tag=${all_images_tag[index]}"echo "$images_name_flag:${all_images_tag[index]}" >> $PWD/delete_images_tag.txt#echo "images=$1 ************************** tag= ${tag}" curl -s -k -u admin:${HARBOR_PASSWD} -X DELETE http://${HARBOR_URL}/api/repositories/$1/tags/${tag}done# if [[ test_flag -eq 100 ]]; then# #statements# exit 0# fi }function clean_registry(){#image_name:goharbor/registry-photon:v2.6.2-v1.7.5image_name=$(docker ps | grep registry | grep photon | awk -F " " '{print $2}')echo "===========image_name===================="echo ${image_name}export gcdockername=`date +'gcdocker-%Y%m%d%H%M'`docker run -it --name $gcdockername --rm --volumes-from registry ${image_name} garbage-collect /etc/registry/config.yml
}function entrance(){serverip=`ip addr|grep inet|grep 192.168|grep -v inet6|awk '{print $2}'|cut -d/ -f1`#获取到serverip 是 ip:192.16.200.17# echo "${serverip}" > $PWD/test_serverip/images_serverip.txt##检测输入url是否与服务器的url相等##if [[ "$serverip" != "${HARBOR_URL}" ]]; then# echo "harbor is not running in the machine!!!"# exit 1 #fi# get_repos_list# 获取到harbor上有几个项目#返回值 reposList.txt--》 12345678get_repos_list#get_images_list#获取到项目里面的镜像#返回值 rancher/istio/examples-bookinfo-ratings-v1get_images_list#for循环
#从项目1到项目7,检测每一个项目地下的镜像,例如for(i=0;i<8;i++){# for(j=0;j<镜像数量;j++) }
#rm -fr delete_images_tag.txtfor repo in $(cat $PWD/reposList/reposList.txt);dofor images in $(cat $PWD/imagesList/${repo}.txt); dodelete_images ${images}donedoneclean_registry
}
entrance
harbor镜像清理脚本相关推荐
- harbor镜像清理:使用registry:2.6.2-photon garbage-collect
试运行: docker run -it --name gc --rm --volumes-from registry 192.168.101.123:1603/lego/vmware/registry ...
- centos卸载harbor_【Harbor】Harbor镜像仓库的安装与历史版本镜像的清理
CentOS7.x上用harbor安装docker镜像仓库 Harbor私有仓库中如何彻底删除镜像释放存储空间? https://blog.51cto.com/10321203/2096294 通过A ...
- Harbor中镜像清理
Harbor中镜像清理 背景 项目的每日构建中,由于微服务比较多,每天会产生比较多的镜像,导致Harbor服务器很快被占满.所以要定期去清理不需要的镜像来释放存储空间. 使用的Harbor版本是2.5 ...
- 一:部署harbor镜像仓库
Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry 也是非常必要的.之前介绍了Docke ...
- docker部署harbor镜像仓库
Docker私有仓库Harbor介绍和部署记录 Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Reg ...
- 在Kubernetes集群上部署高可用Harbor镜像仓库
这里主要介绍使用kubectl部署Harbor镜像仓库到Kubernetes集群中. 使用Helm部署,参考: https://my.oschina.net/u/2306127/blog/181969 ...
- 5. harbor镜像私服
操作节点:node200.hzw.com 172.10.10.200 harbor镜像私服 下载harbor包 从github上获取:https://github.com/goharbor/harbo ...
- podman加速配置、harbor镜像仓库部署
podman镜像加速配置 镜像加速可以使用阿里云.清华大学.网易等多个镜像加速,这里我们使用阿里云的镜像加速. 前提需要你先登录,才可以获取你的镜像加速的地址 阿里云镜像加速 // 修改配置文件 ce ...
- k8s和harbor的集成_在Kubernetes集群上部署高可用Harbor镜像仓库
在Kubernetes集群上部署高可用Harbor镜像仓库 一.Kubernetes上的高可用Harbor方案 首先,我可以肯定给出一个回答:Harbor支持在Kubernetes部署.只不过Harb ...
最新文章
- java xftp_IDEA使用Xshell利用Xftp部署javaweb项目
- 十种工具审核网络安全
- c语言直接插入排序步骤,经典排序之直接插入排序(C语言)
- nodejs(1)---mongodb
- visual studio code 修改工具栏风格
- HDU - 5394 Trie in Tina Town(回文自动机+字典树)
- VC维与DNN的Boundary
- 区块链开发公司谈区块链与大数据的关系
- linux下c 编译脚本,Linux下编译C语言与makefile脚本语言
- Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法
- OJ1000: A+B Problem
- Python基础(使用print()函数输出格式化字符串)
- 业务用例模型涉及的主要概念
- 关于Symantec企业级防病毒软件的版本历史
- 质量管理体系和行业标准
- 迅盘从入门到精通 彻底告别WIN7关机烦恼 T400亲测
- 【office 2007~office 2019】Excel日期选择控件插件安装
- Python —对象的浅拷贝和深拷贝
- 初学者在VMware上搭建自己的CentOS8
- 在anaconda中安装tensorflow