出力を入力へ

プログラミングに関する自分が考えた事を中心にまとめます

Harbor 1.1を1.5にアップグレードする

新しくCNCFプロジェクトに入ったHarborを今まで利用してきた1.1から 現時点で最新の1.5.2にアップグレードする. 今後大きく変更が生じることが予測され, 実際1.6からはDBをPostgresqlに移行する計画なので それまでにプロジェクトの構成を確認しておく.

前提

現在は以下の設定で運用している

  • Harbor1.1.1を利用
  • Docker Registryファイルはローカルファイルシステム
  • Notary / Clairは利用していない

これを以下の通りアップグレードする

  • Harbor 1.5.2を利用
  • Docker Registryファイルはローカルファイルシステム
  • Clairのみ利用し,Notaryは利用しない

Docker Registryファイル(おそらくイメージファイル)はS3などに保存することもできるが今回は変更しない. また,Clairのみ有効化する.

アップグレード方針

詳細はドキュメントを参照.ただし,あまり整備されていない様子なので 読み解くのが大変だった(自分は苦労した).

github.com

結論として,マイグレーションの対象は /data/databaseharbor.cfg. NotaryやClairを利用している場合はこれに加えて/data/notary-db/data/clair-dbが増える様子.

上記データをマイグレーションツールのバックアップ機能でバックアップしておき, マイグレーション機能でDBスキーマと設定ファイルを変換した上で Harborをセットアップ・実行することでアップグレードが完了する.

ただし,設定ファイルのマイグレーションは1.2以降からのサポート. このため自分の環境では一度1.1 -> 1.2 にDBスキーマをツールで移行し,設定ファイルを手動で移行する. その後マイグレーションツールを利用して 1.2 -> 1.5にDBスキーマと設定ファイルを自動移行させる.

1.1 -> 1.5に直接移行できればよかったが, 特に1.1の扱いが他のバージョンとは異なる様子. マイグレーションツールで1.5に移行できないのはもちろん, 論理バックアップしても正常にリストアできなかった. このため,1.1の状態では物理バックアップ (/data/database自体をコピーしておく)しておき, 1.2で動作することを確認した状態で論理バックアップなどを行い 1.5へのマイグレーションの準備を整備する.

アップグレード手順

まずはHarbor 1.1のDBの物理バックアップと設定ファイルのバックアップを行う.

$ sudo tar cfz /backup/harbor-database-1.1.1.tar.gz -C /data database
$ sudo cp ~/harbor-1.1.1/harbor.cfg /backup/harbor-1.1.1.cfg

次にHarbor 1.2へのDBスキーマと設定ファイルのマイグレーションを行う. GitHubのリリースページから 1.2.2の(online/offline)インストーラをダウンロードし, ホームディレクトリにharbor-1.2.2とリネームして展開する. DBのマイグレーションは以下のスクリプトを実行する. 設定ファイルは手動で変更する必要があるので, Harbor 1.1に変更を加えた内容に従い, harbor-1.2.2/harbor.cfgに同等の変更を加える.

マイグレーション実行後は, harbor-1.2.2/install.sh を実行し, Harbor 1.2.2が正常に動作することを確認する. docker-compose psですべてのコンテナがUpであること, Harborページにアクセスして画面が表示されることが確認できればおそらく大丈夫. 動作確認後はdocker-compose downでHarborを停止させておく.

Harbor 1.1の状態でDBの物理バックアップは行っているので大丈夫だが, 必要であればこの時点で論理バックアップを行う. 論理バックアップは以下のスクリプトを実行する.

リストアしたい場合は, /data/database以下を削除した上で 以下のリストアスクリプトを実行すればよい.

最後にHarbor 1.5へのマイグレーションを行う. GitHubのリリースページから 1.5.2の(online/offline)インストーラをダウンロードし, ホームディレクトリにharbor-1.5.2とリネームして展開する. harbor-1.2.2/harbor.cfgでharbor-1.5.2/harbor.cfgを上書きし, DBのマイグレーションは以下のスクリプトを実行する. 今回は,設定ファイルも自動マイグレーションしてくれるので1.2時点での設定内容をそのままに, harbor-1.5.2/harbor.cfgを上書きして1.5用に自動修正してくれる.

マイグレーション実行後は, clairを有効にするため以下のスクリプトを実行する.

$ /home/thaim/harbor-1.5.2/install.sh --with-clair

DBおよび設定ファイルのマイグレーションが成功しており, 必要なコンテナやClairの設定が正常終了するとアプリが動作した状態になる. docker-compose -f docker-compose.yml -f docker-compose.clair.yml ps ですべてのコンテナがUpであること, Harborページにアクセスして画面が表示されることが確認して Harbor 1.5へのアップグレードは完了.

おそらく,1.2などで運用していれば問題なかったのだろうが 1.1という中途半端な(?)バージョンで運用していなかったのが問題だった.