Kubernetes实录系列记录文档完整目录参考: Kubernetes实录-目录
相关记录链接地址 :
- 集群部署配置(2) 配置企业级镜像仓库Harbor
- [集群部署配置(3) 配置企业级镜像仓库Harbor集成]openLDAP(https://blog.csdn.net/oyym_mv/article/details/107067097)
- 集群部署配置(4) harbor功能介绍与使用流程约定
- 集群部署配置(5) 配置企业级镜像仓库harbor升级
集群部署配置(2) 配置企业级镜像仓库Harbor 文档配置了docker 镜像注册服务器系统harbor 1.6.1版本.
这个版本缺少一个很重要的功能那就是将一个镜像从一个项目/仓库"拷贝"到另一个项目仓库。这个需求的使用场景是什么呢,例如:一个注册服务器实现开发(dev),测试(test),预发(uat),生产(prod)环境共同使用,可以这么做,在注册服务器创建多个项目。
例如有个demo在开发环境开发时使用仓库dev/demo进行管理,开发验证完成后,需要推送到测试仓库,以及预发仓库,产线仓库,在持续集成开发过程中非常有用(可以在一个阶段完成后直接调用harbor API完成操作)。流程如下
1.7.0版本之前可以不同阶段使用不同环境的注册服务器,仓库名称相同,根据过滤规则将相同仓库名称的镜像(可以根据tag规则过滤)复制到远程的注册服务器上。在Harbor里面无法直接达到上图显示的场景(当然使用docker client修改tag重新push是可以达到这个目标的)。
以上功能在1.7.x版本实现了,新版本还实现了一些其他功能,参考 https://github.com/goharbor/harbor/releases .本文档记录从1.6.1版本升级到1.7.0版本的过程。
升级前的注意事项:
升级版本可能需要migrate数据,可能会改变数据schema。
- 升级版本前一定要备份数据
- 这里的升级时从1.6.x 到 1.7.x。其他版本没有测试过,根据官方文档来说需要逐步升级(1.y.x -> 1.6.0 -> 1.7.x)而且该文档可能不适应与老版本到1.6.0版本的升级
从1.6.0版本开始,Harbor启动时会自动尝试migrate DB schema,所以从>=1.6.0 不需要使用迁移工具迁移schema
从1.6.0版本开始数据库从mariadb切换到了Postgresql
一、升级版本
从1.6.1升级到1.7.0(当前最新版本)
第一步:停止harbor实例
cd /opt/app/harbor
docker-compose down
第二步:备份当前Harbor文件,用于版本回滚
mkdir /opt/app/backup
mv /opt/app/harbor /opt/app/backup/
cp -r /data/database /opt/app/backup/
#为升级做准备,在migrate是会覆盖生成新的harbor.cfg, 也可以将harbor.cfg拷贝到其他路径用来进行迁移变更操作。
cp /opt/app/backup/harbor/harbor.cfg /opt/app/backup/harbor/harbor.cfg.1.6.1
harbor_cfg=/opt/app/backup/harbor/harbor.cfg #环境变量
第三步:下载最新版本或者你需要版本的harbor安装包
wget -c --limit-rate=1024K https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.0.tgz
tar zxvf harbor-offline-installer-v1.7.0.tgz -C /opt/app/
第四步:下载迁移使用的docker镜像
docker pull goharbor/harbor-migrator:v1.7.0
v1.7.0: Pulling from goharbor/harbor-migrator
Digest: sha256:3f1a762f60bd4c7b3006bbdff3d360347a7158179b7b05952ef84e899582df64
Status: Image is up to date for goharbor/harbor-migrator:v1.7.0
第五步:升级harbor.cfg,注意环境变量${harbor_cfg}路径下的harbor.cfg会被重写覆盖。完成后拷贝到新的安装目录
注意:升级配置后我观察了下文件,这里新生成的harbor.cfg文件只是迁移了必要参数项,可选参数项并没有更新到文件中,我使用的是db认证,参数是已经写入数据库的(文件的参数只是初始化使用一次,之后重复安装不在改变数据库),如果是ldap等认证是否有影响我没有测试
docker run -it --rm -v ${harbor_cfg}:/harbor-migration/harbor-cfg/harbor.cfg goharbor/harbor-migrator:v1.7.0 --cfg up
cp ${harbor_cfg} /opt/app/harbor
#我之前使用的证书是自签发的,需要拷贝过来
cp -r /opt/app/backup/harbor/certs /opt/app/harbor/
第六步:执行升级安装
cd /opt/app/harbor
./install.sh
升级完成,可以访问了。如果升级过程中有错误可以查看adminserver日志 path: /var/log/harbor/adminserver.log
可以看到账户密码都在,容器镜像也在,而且多了功能retag功能也就是【复制镜像】,支持从本地一个项目仓库到本地另一个项目仓库。
回滚
支持1.6.0之后的版本回滚,之前的版本使用的是mariadb数据,迁移工具不支持从PostgreSQL 到MariaDB的回滚。
# 1. 停止服务
cd /opt/app/harbor
docker-compose down
# 2. 删除新版本
rm -rf harbor
# 3. 将老版本移过来
mv /opt/app/backup/harbor /opt/app/harbor
cp /opt/app/harbor/harbor.cfg.1.6.1 /opt/app/harbor/harbor.cfg
# 4. 数据库文件拷贝。
rm -rf /data/database
mv /opt/app/backup/database /data/database
# 5. 回滚启动服务
cd /opt/app/harbor
./install.sh
追加,从1.7.0版本再次升级到最新的1.8.1版本
mv /opt/app/backup /opt/app/backup_1.6.1 #这个是将原来的备份一走
mkdir /opt/app/backup
mv /opt/app/harbor /opt/app/backup/
cp -r /data/database /opt/app/backup/
#为升级做准备,在migrate是会覆盖生成新的harbor.cfg, 也可以将harbor.cfg拷贝到其他路径用来进行迁移变更操作。
cp /opt/app/backup/harbor/harbor.cfg /opt/app/backup/harbor/harbor.cfg.1.7.0
harbor_cfg=/opt/app/backup/harbor/harbor.cfg #环境变量
wget -c https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.1.tgz
tar zxvf harbor-offline-installer-v1.8.1.tgz -C /opt/app/
cp -r /opt/app/backup/harbor/certs /opt/app/harbor/
docker run -it --rm -v ${harbor_cfg}:/harbor-migration/harbor-cfg/harbor.cfg -v /opt/app/harbor/harbor.yml:/harbor-migration/harbor-cfg-out/harbor.yml goharbor/harbor-migrator:v1.8.1 --cfg up
Please backup before upgrade,
Enter y to continue updating or n to abort: y
Command for config file migration: python ./cfg/run.py --input /harbor-migration/harbor-cfg/harbor.cfg --output /harbor-migration/harbor-cfg-out/harbor.yml
input version: 1.7.0, migrator chain: ['1.8.0']
migrating to version 1.8.0
Written new values to /harbor-migration/harbor-cfg-out/harbor.yml
cd /opt/app/harbor
./install.sh
[Step 0]: checking installation environment ...
Note: docker version: 18.06.1
Note: docker-compose version: 1.23.2
[Step 1]: loading Harbor images ...
...
...
[Step 2]: preparing environment ...
prepare base dir is set to /opt/app/harbor
Generated configuration file: /config/log/logrotate.conf
Generated configuration file: /config/nginx/nginx.conf
Generated configuration file: /config/core/env
Generated configuration file: /config/core/app.conf
Generated configuration file: /config/registry/config.yml
Generated configuration file: /config/registryctl/env
Generated configuration file: /config/db/env
Generated configuration file: /config/jobservice/env
Generated configuration file: /config/jobservice/config.yml
loaded secret from file: /secret/keys/secretkey
Generated certificate, key file: /secret/core/private_key.pem, cert file: /secret/registry/root.crt
Generated configuration file: /compose_location/docker-compose.yml
Clean up the input dir
[Step 3]: starting Harbor ...
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating harbor-db ... done
Creating redis ... done
Creating registryctl ... done
Creating registry ... done
Creating harbor-core ... done
Creating harbor-portal ... done
Creating harbor-jobservice ... done
Creating nginx ... done
✔ ----Harbor has been installed and started successfully.----
Now you should be able to visit the admin portal at https://csrepo.ejuops.com.
For more details, please visit https://github.com/goharbor/harbor .