︿
Top

升級 Harbor Registry to v2.13.2


先決條件:作業系統需事前安裝好 docker
本例作業系統為 Rocky Linux 9.2x64、docker 版本為20.10.24、原始 harbor 版本 2.8.2
本例 harbor 目錄位置於 /opt/docker/harbor

前往 Harbor 官網查看升級路徑,先查找當下最新版本的升級文件,目前最新版本為 2.13.2,可以看到該版本的文件說明只支持從 2.11.0 以上的升級指南,因此我們往下翻閱稍舊版本的升級文件


確認了要先從 v2.8 升級至 v2.10 版本,後續的路徑則會是 v2.10 > v2.11 > v2.13




嘗試按照升級文件下方步驟進行初次升級:

停止 harbor 實例

docker compose down

備份整個 harbor 目錄

cd ..
cp -rp harbor /tmp/harbor-bak

備份數據庫

cp -rp harbor/data/database /tmp/harbor-database-bak

取得指定版本的 harbor Release

wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.10.0.tgz


解壓並匯入新版本 harbor 的映像檔

tar zxvf ./harbor-offline-installer-v2.10.0.tgz
docker image load -i harbor/harbor.v2.10.0.tar.gz

安裝新版本,如需 Trivy 只需後面加上參數
--with-Trivy


cd harbor
./install.sh

重新登入 Harbor 頁面查看版本資訊,成功升級到了 v2.10.0


功能驗證完畢後,記得刪除不需要的舊版映像檔

docker image lsDD




Troubleshooting

實際上我們在初次執行升級 script 的時候是出現錯誤的,原因是每個版本的 harbor.yml 內容參數有可能異動

File "/usr/lib/python3.11/site-packages/click/core.py", line 1137, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/click/core.py", line 1062, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/click/core.py", line 1668, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/click/core.py", line 763, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/app/commands/prepare.py", line 33, in prepare
    config_dict = parse_yaml_config(conf, with_trivy=with_trivy)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/app/utils/configs.py", line 224, in parse_yaml_config
    config_dict['job_loggers'] = js_config["job_loggers"]
                                 ~~~~~~~~~^^^^^^^^^^^^^^^
KeyError: 'job_loggers'

最保險的做法是先執行讓 harbor 生成最新版本的 harbor.yml,再去逐次調整其中參數內容

docker run -it --rm -v /:/hostfs goharbor/prepare:v2.10.0 migrate -i /opt/docker/harbor/harbor.yml

查閱 github 上的 issues 我們找到真正的問題是出在 2.9.0 版本後的 harbor.yml 在 jobservice 區塊裡多了一個 job_loggers 新參數,本次在沒有執行 prepare 的情況之下,我們給 harbor.yml 加上以下內容便是

jobservice:
  # Maximum number of job workers in job service
  max_job_workers: 10
  # The jobLoggers backend name, only support "STD_OUTPUT", "FILE" and/or "DB"
  job_loggers:
    - STD_OUTPUT
    - FILE

最後無需 prepare 的情況下逐次升級到了最終版本 v2.13.2


tomy

來自台灣的系統工程師,一直熱衷於 Open source 相關技術的學習、建置、應用與分享。

  • Image
  • Image
  • Image
  • Image
  • Image

0 Comments:

張貼留言