このトピックでは、ダウンロードした OVA ファイルからプライベート Harbor イメージ レジストリをアップグレードし、オフラインの vSphere 環境の Tanzu Kubernetes Grid (TKG) をアップグレードする方法について説明します。この Harbor レジストリは、TKG が使用するコンポーネント イメージを保存および管理するために、TKG と並行して、ただし TKG とは別に実行されます。
重要この仮想マシンベースの Harbor 展開は、インターネットが制限された環境またはエアギャップされた環境で TKG システム イメージをホストする場合にのみサポートされます。本番環境でホスト型アプリケーションの多数のイメージを管理できるスケーラブルで高可用性の Harbor を展開するには、『Tanzu CLI を使用した TKG 2.4 ワークロード クラスタの作成と管理』の「サービス レジストリ用の Harbor のインストール」に従って、Harbor パッケージを TKG クラスタに展開します。
オフラインの Harbor レジストリをバックアップおよびリストアするには、「vSphere でのオフライン Harbor レジストリのバックアップとリストア」を参照してください。
次の手順では、2 つの OVA を使用して、vSphere で実行されている Harbor インスタンスをアップグレードします。
OVA 1 のデータ ディスクには、イメージ、ユーザー、プロジェクト、パスワードなど、Harbor で現在使用されているすべてのデータが含まれています。
Harbor を古い OVA (OVA 1) から新しい OVA (OVA 2) にアップグレードする場合は、スクリプトを実行して自動的にアップグレードするか、手動でアップグレードすることができます。
注OVA アップグレード プロセスは、[テンプレートのカスタマイズ (Customize Template)] > [Harbor 構成 (Harbor Configurations)] にある [管理者パスワード (Administrator Password)] 設定と [データベース パスワード (Database Password)] 設定を、OVA 1 のパスワード設定で上書きします。
Harbor OVA 2.8.2 以降では、Docker
daemon.json
のbip
およびdefault-address-pools
の構成がサポートされています。この構成は、手動の手順またはharbor-upgrade.sh
スクリプトの実行によって移行されません。新しい OVA (OVA 2) を展開するときに再度構成する必要があります。
Harbor OVA 2.8.2 以降では、Harbor OVA のアップグレードを自動的に実行するスクリプト harbor-upgrade.sh
が提供されます。
重要
harbor-upgrade.sh
スクリプトを実行する前に、OVA 1 仮想マシンから既存のすべてのスナップショットを削除する必要があります。OVA 1 仮想マシンにスナップショットが存在する場合、自動アップグレードを実行するときにデータ ディスクを拡張できず、スクリプトは実行せずに終了します。スナップショットを削除しない場合は、手動でアップグレードする必要があります。
/etc/goharbor/harbor/harbor-upgrade.sh
スクリプトを実行します。
スクリプトを実行する前に、スクリプトの実行に必要な情報を収集する必要があります。
/etc/goharbor/harbor/harbor-upgrade.sh --old-ova-vm-name OLD_OVA_VM_NAME
harbor-upgrade.sh
スクリプトの使用方法については、/etc/goharbor/harbor/harbor-upgrade.sh -h
を実行します。
Harbor を手動でアップグレードするには、OVA 1 データ ディスクを既存のディスクとして OVA 2 に追加し、その内容をコピーしてデータを移行します。
Tanzu Kubernetes Grid ダウンロード ページから新しい Harbor OVA をダウンロードし、「vSphere でのオフライン Harbor レジストリの展開」の手順に従って vSphere に展開します。
OVA 1 をパワーオフします。
vSphere で、インベントリにある OVA 1 を右クリックし、[電源 (Power)] > [ゲスト OS のシャットダウン (Shut Down Guest OS)] の順に選択します。
OVA 1 のスナップショットを作成します。
このバックアップからリストアするには、「vSphere でのオフライン Harbor レジストリのバックアップとリストア」を参照してください。
OVA 1 のディスク ファイルの場所を取得します。インベントリにある OVA 1 を右クリックし、[設定の編集 (Edit Settings)] > [ディスク ファイル (Disk File)] の順に選択して、値を記録します。
アップグレード プロセスの実行中は、OVA 1 をパワーオンしないでください。
ssh
を使用して、OVA 2 にログインします。
ssh root@OVA2-IP
OVA 2 で Harbor を停止します。
Harbor が実行されていることを確認します。
docker ps
Harbor プロセスを停止します。
systemctl stop harbor
Harbor が停止し、実行されていないことを確認します。
docker ps
OVA 1 のデータ ディスクを「既存のディスク」として OVA 2 に追加します。
vSphere で、OVA 2 仮想マシンを右クリックし、[設定の編集 (Edit Settings)] を選択します。
新しいウィンドウが開きます。右上の [新規デバイスを追加 (ADD NEW DEVICE)] ドロップダウンで、[既存のハード ディスク (Existing Hard Disk)] を選択します。
[ファイルの選択 (Select File)] で、OVA 1 データストア(vsanDatastore など)と、前に記録したディスク ファイルの場所を選択します。ファイルの場所は、末尾が .vmdk
です。[OK] をクリックします。
[新規ハード ディスク (New Hard Disk)] のリストが、[設定の編集 (Edit Settings)] > [仮想設定 (Virtual Settings)] タブに追加されます。[OK] をクリックします。
[最近のタスク (Recent Tasks)] バーで、新しいディスクの追加が完了するまで待機します。
ova1 のデータ ディスクが ova2 に追加されたことを確認するには、リストをもう一度右クリックし、[設定の編集 (Edit Settings)] を選択します。
OVA 1 データを含むディスクを OVA 2 ファイル システムにマウントします。
ssh
経由で OVA 2 にログインしたコマンド プロンプトから、lsblk
を実行して、新たに追加されたディスクの追加先のブロック デバイスを確認します。
mkdir -p /ova1
を実行して、OVA 2 ファイル システムに新しいディスクのマウント ポイントを作成します。
mount
コマンドを実行して、ファイル システムの最上位レベルのマウント ポイントにブロック デバイスをマウントします。次に例を示します。
mount DEVICE /ova1
ここで DEVICE
は、lsblk
などの、/dev/sdc1
によってリストされる新しいデバイスです。
harbor.yml
ファイルを、OVA 2 Harbor バージョンを示すファイル名にバックアップします。次に例を示します。
新しい Harbor OVA (ova2) バージョンが 2.8.4 の場合は、harborXYZ.origin.yml を harbor284.origin.yml
に変更します。
mv /etc/goharbor/harbor/harbor.yml /etc/goharbor/harbor/harborXYZ.origin.yml
harbor.yml
ファイルを、移行された OVA 1 データ ディスクから OVA 2 Harbor ディレクトリにコピーします。次に例を示します。
cp -pr /ova1/harbor.yml /etc/goharbor/harbor/harbor.yml
OVA 2 に、動的に割り当てられた IP アドレス、または OVA 1 とは異なる固定 IP アドレスか FQDN がある場合は、/etc/goharbor/harbor/harbor.yml
ファイルの hostname
設定をそれに合わせて更新することが必要になる場合があります。OVA 1 からコピーされた hostname
の値が OVA 2 にとっては正しくない場合、OVA 2 の正しいアドレスまたは FQDN に変更します。
注OVA 1 から OVA 2 に証明書をコピーする必要はありません。ネットワーク管理に応じ、OVA 2 の証明書は新しい証明書か、OVA 1 の証明書と同一になりますが、どちらも機能します。
OVA 2 から次のディレクトリを削除します。
rm -rf /storage/data/!(ca_download)
rm -rf /storage/log/*
データ ディレクトリを OVA 1 データ ディスクから OVA 2 にコピーします。
cp -pr /ova1/data/!(ca_download) /storage/data
Harbor ログ ディレクトリを OVA 1 データ ディスクから OVA 2 にコピーします。
cp -pr /ova1/log/* /storage/log
OVA 1 ディスクを OVA 2 からアンマウントします。
umount /ova1
rm -rf /ova1
OVA 1 データ ディスクを OVA 2 から削除します。OVA 2 について、vCenter Server の [仮想ハードウェア (Virtual Hardware)] > [設定の編集 (Edit Settings)] で、追加された OVA 1 ハード ディスクをリストしている行の [X] ボタンをクリックします。[データストアからファイルを削除します (Delete files from datastore)] チェックボックスは有効にせず、[OK] をクリックして確認します。
Harbor コンテナの migrate
を実行することで、コピーした harbor.yml
ファイルをアップグレードします。
cd /etc/goharbor/harbor
docker run -it --rm -v /:/hostfs vmware.io/goharbor/prepare:TAG migrate -i /etc/goharbor/harbor/harbor.yml
ここで、TAG
は OVA 2 の Harbor イメージ タグです。例:
root@localhost [ /etc/goharbor/harbor ]# docker images | grep vmware.io/goharbor/prepare
vmware.io/goharbor/prepare v2.8.4_vmware.2 a82940c8052a 2 weeks ago 163MB
root@localhost [ /etc/goharbor/harbor ]# docker run -it --rm -v /:/hostfs vmware.io/goharbor/prepare:v2.8.4_vmware.2 migrate -i /etc/goharbor/harbor/harbor.yml
migrating to version 2.7.0
migrating to version 2.8.0
Written new values to /etc/goharbor/harbor/harbor.yml
新しい OVA 2 バージョンの Harbor harbor.yml
を /storage/harbor.yml
にコピーします。
cp -pr /etc/goharbor/harbor/harbor.yml /storage/harbor.yml
OVA 2 で Harbor prepare
スクリプトを実行します。OVA 1 で Harbor のデフォルト スキャナを有効にしたかどうかに応じて、--with-trivy
フラグの追加が必要になる場合があります。
スキャナが有効でない場合:
cd /etc/goharbor/harbor && /etc/goharbor/harbor/prepare
スキャナが有効な場合:
cd /etc/goharbor/harbor && /etc/goharbor/harbor/prepare --with-trivy
Harbor サービスを開始します。
systemctl start harbor