首页 > 其他分享 >Harbor的逻辑备份与学习

Harbor的逻辑备份与学习

时间:2023-09-28 23:58:31浏览次数:51  
标签:逻辑 Harbor Image json awk File 镜像 备份

Harbor的逻辑备份与学习


背景

一直想处理一下一个有网络冲突的Harbor镜像服务器
但是因为网络层自己水平一直是不是非常自信
加上Harbor容器使用的compose的玩法, 自己不敢直接处理. 

所以想着至少能够备份一下Harbor仓库内的镜像. 
冷备方式不用说了, 想着处理一下逻辑备份. 

正好看到了 51cto里面一个高手的文档, 自己正好拿来验证一下. 

学习来源自:
https://blog.51cto.com/lidabai
感谢原作者, 这里仅是进行一下简单的演绎. 

版本确认

curl -s http://192.168.xxx.xx/api/version

现在一般都是 2.0的版本了 返回的结果一般为:

{"version":"v2.0"}

使用shell脚本获取镜像列表信息

Harbor_Address=http://192.168.xxx.xx       #Harbor主机地址
Harbor_Pulltag=192.168.xxx.xx:80
Harbor_User=admin                      #登录Harbor的用户
Harbor_Passwd=HarborPassword              #登录Harbor的用户密码
Images_File=ImageInHarbor-`date '+%Y-%m-%d'`.txt   # 镜像清单文件
echo "" > $Images_File
Tar_File=/backup/Harbor-backup/                 #镜像tar包存放路径
# set -x
# 注意可以关闭 set -x 不然会出现非常多的调试信息. 
# 获取Harbor中所有的项目(Projects)
Project_List=$(curl -s -u $Harbor_User:$Harbor_Passwd  -H "Content-Type: application/json" -X GET  $Harbor_Address/api/v2.0/projects  -k  | python -m json.tool | grep name | awk '/"name": /' | awk -F '"' '{print $4}')

for Project in $Project_List;do
   # 循环获取项目下所有的镜像
    Image_Names=$(curl -u $Harbor_User:$Harbor_Passwd  -H "Content-Type: application/json" -X GET $Harbor_Address/api/v2.0/projects/$Project/repositories -k | python -m json.tool | grep name | awk '/"name": /' | awk -F '"' '{print $4}')
    for Image in $Image_Names;do
        # 循环获取镜像的版本(tag)
        Image_Tags=$(curl -u $Harbor_User:$Harbor_Passwd   -H "Content-Type: application/json"   -X GET  $Harbor_Address/v2/$Image/tags/list  -k |  awk -F '"'  '{print $8,$10,$12}')
        for Tag in $Image_Tags;do
            # 格式化输出镜像信息
            echo "$Harbor_Pulltag/$Image:$Tag"   >> $Images_File
        done
    done
done

转储所有镜像

#!/bin/bash
Harbor_Address=http://192.168.xxx.xx       #Harbor主机地址
Harbor_Pulltag=192.168.xxx.xx:80
Harbor_User=admin                      #登录Harbor的用户
Harbor_Passwd=HarborPassword              #登录Harbor的用户密码
Images_File=ImageInHarbor-`date '+%Y-%m-%d'`.txt   # 镜像清单文件
echo " " > $Images_File
Tar_File=/data/Harbor-backup    #镜像tar包存放路径
mkdir -p $Tar_File
# set -x
# 获取Harbor中所有的项目(Projects)
Project_List=$(curl -u $Harbor_User:$Harbor_Passwd  -H "Content-Type: application/json" -X GET  $Harbor_Address/api/v2.0/projects  -k  | python -m json.tool | grep name | awk '/"name": /' | awk -F '"' '{print $4}')

for Project in $Project_List;do
    mkdir -p ${Tar_File}/${Project}
   # 循环获取项目下所有的镜像
    Image_Names=$(curl -u $Harbor_User:$Harbor_Passwd  -H "Content-Type: application/json" -X GET $Harbor_Address/api/v2.0/projects/$Project/repositories -k | python -m json.tool | grep name | awk '/"name": /' | awk -F '"' '{print $4}')
    for Image in $Image_Names;do
        # 循环获取镜像的版本(tag)
        Image_Tags=$(curl -u $Harbor_User:$Harbor_Passwd   -H "Content-Type: application/json"   -X GET  $Harbor_Address/v2/$Image/tags/list  -k |  awk -F '"'  '{print $8,$10,$12}')
        for Tag in $Image_Tags;do
        docker pull  "$Harbor_Pulltag/$Image:$Tag"
        mkdir -p ${Tar_File}/${Image}
        docker save  "$Harbor_Pulltag/$Image:$Tag" |gzip > ${Tar_File}/${Image}.${Tag}.tar.gz
        # 直接修改为导出镜像 并且进行压缩
        done
    done
done

仅转储最大tag编号的镜像

  • 需要主要, 这个里面存在风险, 必须保证镜像tag的顺序递增才有效果
#!/bin/bash
Harbor_Address=http://192.168.xxx.xx       #Harbor主机地址
Harbor_Pulltag=192.168.xxx.xx:80
Harbor_User=admin                      #登录Harbor的用户
Harbor_Passwd=HarborPassword              #登录Harbor的用户密码
Images_File=ImageInHarbor-`date '+%Y-%m-%d'`.txt   # 镜像清单文件
echo " " > $Images_File
Tar_File=/data/Harbor-backup_new   #镜像tar包存放路径
mkdir -p $Tar_File
#set -x
# 获取Harbor中所有的项目(Projects)
Project_List=$(curl -s -u $Harbor_User:$Harbor_Passwd  -H "Content-Type: application/json" -X GET  $Harbor_Address/api/v2.0/projects  -k  | python -m json.tool | grep name | awk '/"name": /' | awk -F '"' '{print $4}')

for Project in $Project_List;do
   # 循环获取项目下所有的镜像
    mkdir -p ${Tar_File}/${Project}
    Image_Names=$(curl -s -u $Harbor_User:$Harbor_Passwd  -H "Content-Type: application/json" -X GET $Harbor_Address/api/v2.0/projects/$Project/repositories -k | python -m json.tool | grep name | awk '/"name": /' | awk -F '"' '{print $4}')
    for Image in $Image_Names;do
        # 循环获取镜像的版本(tag)
        Image_Tags=$(curl -s -u $Harbor_User:$Harbor_Passwd   -H "Content-Type: application/json"   -X GET  $Harbor_Address/v2/$Image/tags/list  -k |  awk -F '"'  '{print $8,$10,$12}')
        Tag=$(echo $Image_Tags |sort |awk '{print $NF}')
        docker pull  "$Harbor_Pulltag/$Image:$Tag"
        docker save  "$Harbor_Pulltag/$Image:$Tag" |gzip > ${Tar_File}/${Image}.${Tag}.tar.gz
    done
done

标签:逻辑,Harbor,Image,json,awk,File,镜像,备份
From: https://www.cnblogs.com/jinanxiaolaohu/p/17736039.html

相关文章

  • aruba无线控制器配置和license备份
    备份配置备份系统导出备份到FTP导出license到FTP......
  • R语言非线性回归和广义线性模型:泊松回归、伽马回归、逻辑回归、Beta回归分析机动车事
    全文链接:https://tecdat.cn/?p=33781原文出处:拓端数据部落公众号我们使用广义线性模型(GeneralizedLinearModels,简称GLM)来研究客户的非正态数据,并探索非线性关系。GLM是一种灵活的统计模型,适用于各种数据类型和分布,包括二项分布、泊松分布和负二项分布等非正态分布。通过GLM,我......
  • R语言决策树、随机森林、逻辑回归临床决策分析NIPPV疗效和交叉验证|附代码数据
    全文链接:http://tecdat.cn/?p=32295原文出处:拓端数据部落公众号临床决策(clinical decision making)是医务人员在临床实践过程中,根据国内外医学科研的最新进展,不断提出新方案,与传统方案进行比较后,取其最优者付诸实施,从而提高疾病诊治水平的过程。在临床医疗实践中,许多事件......
  • k8s部署 harbor
    1.创建Harbor的命名空间:kubectlcreatensharbor2.创建harbor秘钥主harbor秘钥mkdir-p/home/master/harbor_crtcd/home/master/harbor_crt##获得证书opensslreq-newkeyrsa:4096-nodes-sha256-keyoutca.key-x509-days3650-outca.crt-subj"/C=CN/ST=Guan......
  • 备份
    name title details created_datelldxjw P7154&CF1778F&CF1276D&P8863 #P7154&CF1778F&CF1276D&P8863P7154题意有两个长度为\(N\)的数列\(s\)和\(t\)。对于每个\(s_i\)都尝试与\(t\)中的元素进行匹配,\(s_i\)与\(t_j\)能够匹配当且仅当\(s_i\let_i\)......
  • Lvextend扩容逻辑卷
    一、LVM概述在Linux系统中,我们经常使用LVM(逻辑卷管理)的方式去管理和使用磁盘,LVM可以动态扩容,给我们的使用带来了很多的便捷性LVM结构图如下:物理卷(PhysicalVolume,PV)指磁盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理......
  • Linux系统下创建LV(逻辑卷)并挂载
    1、查看磁盘情况[root@ecs-34a8-0913916~]#fdisk-lDisk/dev/vda:107.4GB,107374182400bytes,209715200sectorsUnits=sectorsof1*512=512bytesSectorsize(logical/physical):512bytes/512bytesI/Osize(minimum/optimal):512bytes/512bytes......
  • JVS低代码如何通过逻辑触发变量节点进行表单数据回显?
    使用说明通常业务中会涉及到表单上部分字段填写后通过触发逻辑处理已填写的数据进行回显到表单上,这时我们可以采用业务逻辑来配置对象变量节点进行表单数据回显。对象变量:将自定义字段重新组装新的数据结构,数据结构类型为对象。设计表单入口在表单中配置按钮组件或者是设置组件的网......
  • linux文件上传至百度网盘备份
    一、摘要说明1.工具:百度网盘的python客户端--bypy2.下载方式:通过pip下载3.实现方案:安装pip-->安装bypy-->百度网盘授权-->测试验证-->扩展4.注意事项:使用bypy工具绑定后,由于百度PCSAPI权限限制,程序只能存取百度云端/apps(我的应用数据)/bypy目录下面的文件和目录。5.命令解释:......
  • 逻辑树(LogicTree)和可视化树(VisualTree)
    遍历逻辑树和可视化树FrameworkElementLevel.(FrameworkElementType).(FrameworkElementName)[DataContextType]publicstaticclassTreeHelper{publicstaticstringgetTree(FrameworkElementcontainer){StringBuildersb=newStringBuilder();......