目錄
-
- 前言
- 重要提示
- 更新
-
- 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!
重要提示
畢竟是在做更新操作,一定切記備份資料,備份資料分兩部分:
- harbor 的整個安裝目錄
- harbor 存儲的所有data資料(除非你熟悉,否則建議全量備份)
如下圖:
更新
這裡給出官網的流程 => 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的下載下傳位址:
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
- 先用第6步中經更新工具更新後的 harbor.cfg 覆寫掉1.5.0 中的harbor.cfg
- 調用 ./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