# Harbor 2.0 Migration ###### tags: `Harbor` ## 前言與目的 為了取代一案Harbor需撰寫完整SOP ## 事前準備 > - 確認一案images都是可以被pull狀態? > - 確認一案和二案harbor網路是通的? > - 申請CR單變更外部DNS設定之IPs ### 預計影響 | 項目 | Harbor(舊) | Harbor(新) | After Merge | | ------------ |:----------------- |:---------------- |:-------------- | | 專案數量 | 111 | 2 | 114 | | 網路環境(IP) | 172.16.31.111~115 | 172.29.101.1~5 | 172.29.101.1~5 | | 主機帳密 | | admin/nchcharbor | | | Domain name | registry.twcc.ai | registry2.twcc.ai | registry.twcc.ai 二案預計保留的映象檔有 AI Maker: AI Tranning and Inference 應用之映像檔 Data-Pipeline: Dadabase服務之映像檔 ### 資料備份 1. 備份一案MariaDB a. 連線至DB環境 (需申請登入帳密) b. command line備份 * 172.16.31.106 ``` mysqldump -u root -p air_service > backup_"$(date)".sql ``` 2. 備份二案PostgreSQL a. 連線至DB環境並轉換使用者身分為pstgres ``` # ssh 172.22.4.199 # su postgres ``` b. 透過pg_dump指令備份clair資料 ``` $ pg_dump clair > backup-clair.out ``` c. 透過pg_dump指令備份harbor資料 ``` $ pg_dump harbor > backup-harbor.out ``` d. 透過pg_dump指令備份所有資料 ``` $ pg_dumpall > db.out $ \q $ exit # exit ``` ### 整體流程 ***總執行時間約五個工作天*** 1. 現存專案與資料轉移 (replication) (done) a. 登入二案harbor進行設定 * 新增registry endpoint(一案) ![](https://i.imgur.com/drM68io.png) ![](https://i.imgur.com/3aex8Yn.png) * 新增replication rule ![](https://i.imgur.com/Rl2UkVM.png) ![](https://i.imgur.com/z0xkUwo.png) Override為同路徑的image若layer不同是否覆蓋 b. 開始複製 ![](https://i.imgur.com/8BciUWh.png) c. 確認replication task 執行成功 ![](https://i.imgur.com/p8A2LGf.png) d. 確認複製結果(示意圖) * 原一案 ![](https://i.imgur.com/QLGltif.png) * 原二案 ![](https://i.imgur.com/ktg6GUB.png) * 複製後的二案 ![](https://i.imgur.com/JJMipLi.png) * 路徑衝突且layer不同之處理 * 一案 ![](https://i.imgur.com/uqVk39q.png) * 二案 ![](https://i.imgur.com/vprUE61.png) * 複製後的二案(Override = true) ![](https://i.imgur.com/pNRUuDV.png) 路徑衝突且layer不同後覆寫的相關log ![](https://i.imgur.com/B4fnYkK.png) * 複製後的二案(Override = false) ![](https://i.imgur.com/4fmNqkx.png) 路徑衝突且layer不同後不覆寫的相關log ![](https://i.imgur.com/hz5gHML.png) e. 檢查搬移專案configuration i. 掃描功能相關設定 2. 環境測試(手動測試) (done) | 測項 | 說明 | note | | ----------------------- | ---------------------------------- | ---- | | HealthCheck(Harbor) | 驗證Harbor系統是否正常 | | | HealthCheck(Database) | 驗證後端資料庫系統叢集是否正常 | | | HealthCheck(Registry) | 驗證後端儲存系統是否正常 | | | HealthCheck(Core) | 驗證Harbor核心功能是否正常 | | | HealthCheck(Redis) | 驗證後端子系統Redis叢集是否正常 | | | HealthCheck(JobService) | 驗證任務派發功能是否正常 | | | HealthCheck(Portal) | 驗證Harbor原生管理者頁面是否正常 | | | HealthCheck(Clair) | 驗證後端掃描系統Clair是否正常 | | | docker pull | 手動驗證command line拉取映象檔是否正常 | | | docker push | 手動驗證command line推送映象檔是否正常 | | 3. issue fix (all) (on-going) 4. 執行 Harbor 初始化 script (on-going) 5. 服務入口轉移(併行測試結束後方可執行) a. 停止一案harbor b. 申請CR單變更外部DNS設定之IPs (國網同仁會幫忙申請) * 172.29.101.6~172.29.101.10 c. 修改Harbor主機設定檔 * 172.29.101.1~172.29.101.5 ``` # cd /opt/harbor # docker-compose down # vim /opt/harbor/harbor.yml +=: hostname: registry.twcc.ai # vim /opt/harbor/common/config/core/env +=: EXT_ENDPOINT=https://registry.twcc.ai # vim /opt/harbor/common/config/registry/config.yml +=: realm: https://registry.twcc.ai/service/token # docker-compose up -d ``` [待確認或討論問題] 3-1. 國網DNS修改這部分要請誰幫忙?怎麼進行? Ans: 內部DNS: 申請完程,併行測試中. 外部DNS: 預計使用一案外部DNS, 需走CR流程. <!-- ## 案例說明 ### case1: 本地project不存在 >在他端(128)存在路徑為t1/r1/mariadb:latest的image ![](https://i.imgur.com/TYp6fMb.png) 在本地端(129)則沒有t1這個project ![](https://i.imgur.com/EOyffYX.png) 在本地端自動生成project t1 ![](https://i.imgur.com/mi3aII8.png) image成功複製 ![](https://i.imgur.com/zLjTFRc.png) 在本地端設定他端的replication rule ![](https://i.imgur.com/DCfdnZn.png) 開始複製 ![](https://i.imgur.com/h7GrYi8.png) 確認複製進度及結果 ![](https://i.imgur.com/qnGAtKQ.png) ### case2: 本地project存在 >他端project ![](https://i.imgur.com/H259HXl.png) 本端同名project ![](https://i.imgur.com/aVVtfqI.png) 複製後結果 ![](https://i.imgur.com/bFjJW4H.png) ### case3: 本地project存在且存在相同路徑之image >他端images ![](https://i.imgur.com/uqVk39q.png) 本地端同路徑images ![](https://i.imgur.com/vprUE61.png) 路徑衝突且layer不同後覆寫的相關log ![](https://i.imgur.com/B4fnYkK.png) 路徑衝突且layer不同後不覆寫的相關log ![](https://i.imgur.com/hz5gHML.png) 路徑衝突後直接覆寫的相關log ![](https://i.imgur.com/mWW5ZSG.png) 路徑衝突後不覆寫的相關log ![](https://i.imgur.com/Nd3eZj1.png) 結論:本地的相同路徑若不存在則自動生成,若存在則直接放置於相同的本地路徑;路徑衝突且layer不同之image則須決定是否覆蓋 -->