harbor从1.2.2升级到1.5.0

目录

    • 前言
    • 重要提示
    • 升级
      • 1. 停止老harbor集群
      • 2. 备份老版本安装路径
      • 3. 下载新版本harbor的安装包
      • 4. 下载迁移工具镜像
      • 5. 备份 harbor.cfg 以及 数据库相关
      • 6. 升级数据库架构(schema)、harbor.cfg 并且 迁移数据
      • 7. 启动harbor1.5.0
      • 8. 如果还有一些不符合预期的再自行调节配置
    • 一些问题及解决办法
      • [ERROR] InnoDB: ./ibdata1 can't be opened in read-write mode
      • Plugin 'InnoDB' init function returned error.
      • FileNotFoundError: [Errno 2] No such file or directory: './docker-compose.yml'
      • ERROR: manifest for goharbor/harbor-log:__version__ not found
      • ERROR: for harbor-log Cannot create container for service log: b'Conflict. The container name "/harbor-log" is already in use by container
      • IOError: [Errno 21] Is a directory: '/harbor-migration/harbor-cfg/harbor.cfg'
      • ConfigParser.NoOptionError: No option u'verify_remote_cert' in section: u'configuration'
      • 下面的错误,忽略

前言

本文背景是对 harbor 进行升级,因为我的harbor版本是1.2.2,在当前2020年看来实在是有点过于陈旧,互联网搜索一番之后,不太建议直接升级到最新版,而是1.2.2 -> 1.5.0 -> 1.6 -> 1.7 -> 1.9,所以我在这里记录了第一次的升级操作和遇到的一些问题,部分问题的解决方法并非是最权威的,但是大体是白话的解释了原因和解决办法,ok!

重要提示

毕竟是在做升级操作,一定切记备份数据,备份数据分两部分:

  1. harbor 的整个安装目录
  2. harbor 存储的所有data数据(除非你熟悉,否则建议全量备份)

如下图:
harbor从1.2.2升级到1.5.0_第1张图片

升级

这里给出官网的流程 => Harbor upgrade and database migration guide

1. 停止老harbor集群

cd harbor
docker-compose down -v

harbor集群是通过 docker-compose 来管理的,可以批量操作一批相互关联的服务容器

2. 备份老版本安装路径

mv harbor harbor.1.2.2.bak

3. 下载新版本harbor的安装包

https://github.com/vmware/harbor/releases
https://gitea.com/goharbor/harbor/releases?page=6
国内镜像仓库地址:http://harbor.orientsoft.cn/
如果服务所在的网络环境无法访问外网(无法下载依赖的镜像),则可以使用offline的下载地址:
harbor从1.2.2升级到1.5.0_第2张图片
tar包中已经包含了对应的镜像,只需要使用 docker load 命令导入即可

4. 下载迁移工具镜像

迁移工具通过镜像的方式来提供,迁移工具提供了数据备份、数据库架构(database schema)升级、harbor.cfg 配置升级、以及数据迁移的能力

docker pull vmware/harbor-migrator:v1.5.0

5. 备份 harbor.cfg 以及 数据库相关

docker run -it --rm -e DB_USR=root -e DB_PWD={db_pwd} -v ${harbor_db_path}:/var/lib/mysql -v ${harbor_cfg}:/harbor-migration/harbor-cfg/harbor.cfg -v ${backup_path}:/harbor-migration/backup vmware/harbor-migrator:[tag] backup

注意,这里有一个出错的点,是权限问题,如果方便的话给所有的文件的所有用户可读可写权限,给所有的目录可读可写可执行的权限,我这里直接 777 了

  • {db_pwd}:数据库密码,默认 root123
  • {harbor_db_path}:目前正在使用的数据库数据路径,具体到 databases 即可,如我的路径:xxxx/harbor-data/database,一般安装的时候,registry、log等数据的路径都在一个集中的路径下,这里填写到集中路径的database即可
  • {harbor_cfg}:目前在用的harbor.cfg文件的路径,如果第一步已经mv,则这里的路径就是:xxx/harbor.1.2.2.bak/harbor.cfg
  • {backup_path}:要备份到的目标路径,这里自行创建一个备份路径即可,可以认为这里的路径是一个迁移中转路径

6. 升级数据库架构(schema)、harbor.cfg 并且 迁移数据

docker run -it --rm -e DB_USR=root -e DB_PWD={db_pwd} -v ${harbor_db_path}:/var/lib/mysql -v ${harbor_cfg}:/harbor-migration/harbor-cfg/harbor.cfg vmware/harbor-migrator:[tag] up
  • {db_pwd}:数据库密码,默认 root123
  • {harbor_db_path}:目前正在使用的数据库数据路径,具体到 databases 即可,如我的路径:xxxx/harbor-data/database,一般安装的时候,registry、log等数据的路径都在一个集中的路径下,这里填写到集中路径的database即可
  • {harbor_cfg}:不同于第5步,这里是要升级harbor.cfg,升级的是第5部导出的harbor.cfg,也就是会重写第5步 {backup_path}/harbor.cfg文件

7. 启动harbor1.5.0

  1. 先用第6步中经升级工具升级后的 harbor.cfg 覆盖掉1.5.0 中的harbor.cfg
  2. 调用 ./install.sh 启动

8. 如果还有一些不符合预期的再自行调节配置

理论上到了第7步就应该完成了,如果有一些要调节的,如端口,自行在docker-compose.yml文件中调节就好了

一些问题及解决办法

[ERROR] InnoDB: ./ibdata1 can’t be opened in read-write mode

[ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
[ERROR] InnoDB: ./ibdata1 can't be opened in read-write mode
[ERROR] InnoDB: The system tablespace must be writable!
[ERROR] Plugin 'InnoDB' init function returned error.
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting

数据库数据权限错误,给所有的文件的所有用户添加可读可写权限,目录添加可读可写可执行权限,可能只有部分文件,这里我对所有文件均添加了操做,为了方便,直接chmod 777 -R xxx/harbor-data/database

Plugin ‘InnoDB’ init function returned error.

InnoDB: No valid checkpoint found.
InnoDB: If you are attempting downgrade from MySQL 5.7.9 or later,
InnoDB: please refer to http://dev.mysql.com/doc/refman/5.6/en/upgrading-downgrading.html
InnoDB: If this error appears when you are creating an InnoDB database,
InnoDB: the problem may be that during an earlier attempt you managed
InnoDB: to create the InnoDB data files, but log file creation failed.
InnoDB: If that is the case, please refer to
InnoDB: http://dev.mysql.com/doc/refman/5.6/en/error-creating-innodb.html
[ERROR] Plugin 'InnoDB' init function returned error.
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting

因为之前备份的时候失败了,导致了部分错误,我的出错就是因为之前数据库数据文件权限不对,导致创建InnoDB出错,解决就是直接用提前做好的备份直接恢复了数据,添加了权限重来,如果不嫌麻烦,也可以参考 http://dev.mysql.com/doc/refman/5.6/en/error-creating-innodb.html 来修正.

FileNotFoundError: [Errno 2] No such file or directory: ‘./docker-compose.yml’

docker-compose.yml 文件不存在,如果安装方式是offline 安装,则需要复制 harbor 目录下 make 子目录中的 docker-compose.tpl文件为docker-compose.yml

ERROR: manifest for goharbor/harbor-log:version not found

需要修改 docker-compose.yml 里面的 version

ERROR: for harbor-log Cannot create container for service log: b’Conflict. The container name “/harbor-log” is already in use by container

老版本barbor未关闭,使用docker-compose down -v进行关闭

IOError: [Errno 21] Is a directory: ‘/harbor-migration/harbor-cfg/harbor.cfg’

这里是在执行第五步备份的时候或者第六部升级配置的时候出错

  • 如果是第五步,则是老版本的 harbor.cfg 路径填写错误
  • 如果是第六步,则是在第五步导出的备份的 harbor.cfg 路径填写错误

ConfigParser.NoOptionError: No option u’verify_remote_cert’ in section: u’configuration’

用错了harbor的配置文件,经过步骤六升级之后的harbor.cfg是给新版本harbor用的,不同版本之间的harbor.cfg文件中配置有差异,不能混用

下面的错误,忽略

官方文档指出,如果harbor能启动成功,则忽略,往往出现在 1.2 -> 1.3以上版本的升级过程中

[ERROR] Missing system table mysql.roles_mapping; please run mysql_upgrade to create it
[ERROR] Incorrect definition of table mysql.event: expected column 'sql_mode' at position ... ...
[ERROR] mysqld: Event Scheduler: An error occurred when initializing system tables. Disabling the Event Scheduler.
[Warning] Failed to load slave replication state from table mysql.gtid_slave_pos: 1146: Table 'mysql.gtid_slave_pos' doesn't exist

你可能感兴趣的:(Docker&k8s)