harbor从v1.1.1升级到v1.5.1的记录(一)

由于之前在生产环境出现了一次harbor的事故,因此考虑harbor升级,升级到1.5.1,但是看了官方文档只支持1.2.x,1.3.x,1.4.x的,只好自己升级了

之前的问题主要是ui模块并发修改pull的次数引起panic,以及ui程序启动时同步数据到mysql时同步不完全引起的,也涉及到了存储的问题,关于docker storage请,更多信息请前往docker storage
问题涉及到的函数
ui模块的main.go

initRouters()
    //if err := api.SyncRegistry(); err != nil {
    //  log.Error(err)
    //}
    beego.Run()

ui service notification.go模块的函数

if action == "pull" {
            //go func() {
            //  log.Debugf("Increase the repository %s pull count.", repository)
            //  if err := dao.IncreasePullCount(repository); err != nil {
            //      log.Errorf("Error happens when increasing pull count: %v", err)
            //  }
            //}()
        }

以上问题引起ui服务不断地重启,导致harbor无法使用,因此考虑了升级harbor,但是猜想不会根本解决问题

升级步骤

1.同步数据库的数据
2.同步镜像仓库的镜像
3.修改代码(需要特别功能)

同步数据库的数据

对比了相关的数据表结构
1.5.1的数据库表结构在harbor项目下的make/photon/db目录下,1.1.1的数据库表结构在make/common/db目录下,
harbor 1.1.1的mysql数据库表结构
1.1.1
harbor1.5.1的数据库表结构目录
1。5。1
对比了数据结构,发现了以下不同点

DROP TABLE IF EXISTS `access_log`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `access_log` (
  `log_id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL, /*之前是user_id 现在改为username*/
  `project_id` int(11) NOT NULL,
  `repo_name` varchar(256) DEFAULT NULL,
  `repo_tag` varchar(128) DEFAULT NULL,
  `GUID` varchar(64) DEFAULT NULL,
  `operation` varchar(20) NOT NULL,
  `op_time` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`log_id`),
  KEY `pid_optime` (`project_id`,`op_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

新增表

clair_vuln_timestamp harbor_label harbor_resource_label img_scan_job img_scan_overview  user_group

保持一样的表

alembic_version role user

项目project表少了个public的字段

DROP TABLE IF EXISTS `project`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `project` (
  `project_id` int(11) NOT NULL AUTO_INCREMENT,
  `owner_id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `creation_time` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `update_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `deleted` tinyint(1) NOT NULL DEFAULT 0, /*少了public,跟新增的表project_metadata结合在一起了*/
  PRIMARY KEY (`project_id`),
  UNIQUE KEY `name` (`name`),
  KEY `owner_id` (`owner_id`),
  CONSTRAINT `project_ibfk_1` FOREIGN KEY (`owner_id`) REFERENCES `user` (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

project_member表修改user_id 为entity_id,新增entity_type字段,字段的值有u以及g

DROP TABLE IF EXISTS `project_member`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `project_member` (
  `id` int(11) NOT NULL AUTO_INCREMENT,/*多了id这个字段*/
  `project_id` int(11) NOT NULL,
  `entity_id` int(11) NOT NULL, /*user_id entity_id*/
  `entity_type` char(1) NOT NULL,/*实体类型 u*/
  `role` int(11) NOT NULL,/*admin 1 开发人员2 访客3*/
  `creation_time` timestamp NOT NULL DEFAULT current_timestamp(),
  `update_time` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_project_entity_type` (`project_id`,`entity_id`,`entity_type`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

另外这张表properties也用了,主要存相关的配置信息以及配置的密码

这张新增的表replication_immediate_trigger,主要针对同步规则时,选择的时立即同步而设计的

replication_job 表多了个job_uuid字段

replication_policy多了cron_str,filters,replicate_deletion这三个字段,另外harbor1.5.1还添加了过滤功能
相关功能如下图
111

replication_target 表多了insecure字段,用来区分是否校验同步目标仓库的证书开关

repository 仓库表少了owner_id字段

通过比较以上harbor1.1.1和harbor1.5.1的表数据结构的改变情况,本人写了相关的同步数据的code,github地址:https://github.com/qinzhao168/harbor_upgrade
进到项目,配置好数据库运行go run main.go就可以同步了

这一部分是同步数据,接下来的另一编写部署的注意事项

猜你喜欢

转载自blog.csdn.net/qq_21816375/article/details/81301339