天天看點

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

更新

這裡給出官網的流程 => 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

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
           

繼續閱讀