ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Harbor API实现镜像备份与恢复方案(2.0以上版本适用)

2022-01-31 14:34:51  阅读:546  来源: 互联网

标签:Harbor Image 备份 API 镜像 docker 2.0 image


一、需求

        只需要备份Harbor上的镜像,Harbor中存在很多不同的公有和私有项目,每个项目下又有很多镜像,每个镜像有不同版本的标签,考虑服务器成本,不能再搭一台Harbor来备份了,主备模式的备份方案无法使用;

        较完整的Harbor备份可查看专栏《Harbor实战宝典

二、方案设计

       1、编写一个shell脚本(在备份主机上):

           1)获取Harbor中所有的镜像;

           2)通过docker下载获取到的镜像列表;    

           3)将下载到本地的镜像打成tar包,以便恢复;

           4)删除下载到本地的镜像,减少磁盘空间的占用;

       2、在备份主机安装docker,配置文件中指定Harbor的地址;

       3、执行备份的shell脚本进行备份;

       4、定期备份的设定,观察镜像上传频率,只需要每周备份一次即可;

该方案仅占用备份主机的磁盘空间,通过Harbor的管理界面看到需要备份镜像总大小为2T,

该方案的难点再于如何获取镜像的列表,查看官方文档,可以通过调用API接口的方式来获取镜像列表。

三、实战操作

3.1、备份主机上安装docker

        本处以192.168.2.250:443为Harbor服务地址。

        192.168.2.266为备份主机,用于备份镜像操作,本文所有操作皆在备份主机完成。

        注意:需要在/etc/docker/damon.json文件中指定Harbor地址。

# yum install  -y docker
# systemctl enable  --now  docker.service
# cat > /etc/docker/damon.json << EOF
{
    "registry-mirrors": ["https://xcg41ct3.mirror.aliyuncs.com"], 
    "insecure-registries":["192.168.2.250:443"],
    "exec-opts": ["native.cgroupdriver=systemd"]            
}
EOF
# systemctl restart docker  && systemctl status docker

3.2、编写shell脚本

        Go、python可参考该处

# vim  Harback-v2.sh
#!/bin/bash
Harbor_Address=192.168.2.250:443       #Harbor主机地址
Harbor_User=admin                      #登录Harbor的用户
Harbor_Passwd=Harbor12345              #登录Harbor的用户密码
Images_File=harbor-images-`date '+%Y-%m-%d'`.txt                        #镜像清单文件
Tar_File=/backup/Harbor-backup/                                         #镜像tar包存放路径

###【】调用API接口获取Harbor中所有仓库的所有镜像及镜像的所有标签(tag):
#获取Harbor中所有的项目(含私有项目)
Project_List=`curl -u $Harbor_User:$Harbor_Passwd -X GET http://$Harbor_Address/api/projects | grep name | awk '/"name": /' | awk -F '"' '{print $4}'`
#获取项目下所有的镜像名称与标签:
for Project in $Project_List;do
    Image_Names=`curl -u $Harbor_User:$Harbor_Passwd -X GET http://$Harbor_Address/api/search?q=$Project | grep "repository_name" | awk -F "\"" '{print $4}'`
    for Image in $Image_Names;do
        Image_Tags=`curl -u $Harbor_User:Harbor_Passwd -X GET http://$Harbor_Address/api/repositories/$Image/tags | awk '/"name": /' | awk -F '"' '{print $4}'`
        for Tag in $Image_Tags;do
            echo "$Harbor_Address/$Image:$Tag" | grep -v Base | grep -v Image >> $Images_File
        done
    done
done

###使用docker从镜像文件中下载镜像——将下载的镜像进行打包保存——删除下载到本地的镜像——将封装好的镜像包移动到备份目录
Image_tags=$(cat $Images_File)
for image_tag in $Image_tags;do
    image_Name=$(echo $image_tag | awk -F/ '{print $3}' |  awk -F: '{print $1}')
    image_Lable=$(echo $image_tag | awk -F/ '{print $3}' |  awk -F: '{print $2}')
    docker pull $image_tag
    docker save $image_tag  -o $image_Name-$image_Lable.tar
    docker rmi  $image_tag
    mv $image_Name-$image_Lable.tar  $Tar_File
done

标签:Harbor,Image,备份,API,镜像,docker,2.0,image
来源: https://blog.csdn.net/qq_49496397/article/details/122272317

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有