3.7. 非接続クラスターで使用する Operator カタログのミラーリング
oc adm catalog mirror コマンドを使用して、Red Hat が提供するカタログまたはカスタムカタログの Operator コンテンツをコンテナーイメージレジストリーにミラーリングできます。ターゲットレジストリーは Docker v2-2 をサポートする必要があります。ネットワークが制限された環境のクラスターの場合、このレジストリーには、ネットワークが制限されたクラスターのインストール時に作成されたミラーレジストリーなど、クラスターにネットワークアクセスのあるレジストリーを使用できます。
- OpenShift イメージレジストリーはターゲットレジストリーとして使用できません。これは、ミラーリングプロセスで必要となるタグを使わないプッシュをサポートしないためです。
-
oc adm catalog mirrorを実行すると、error: unable to retrieve source imageエラーが発生する場合があります。このエラーは、イメージレジストリーに存在しなくなったイメージへの参照がイメージインデックスに含まれている場合に発生します。イメージインデックスは、それらのイメージを実行しているユーザーがアップグレードグラフの新しいポイントへのアップグレードパスを実行できるように、古い参照を保持する場合があります。一時的な回避策として、--skip-missingオプションを使用してエラーを回避し、イメージインデックスのダウンロードを続行できます。詳細は、Service Mesh Operator mirroring failed を参照してください。
oc adm catalog mirror コマンドは、Red Hat が提供するインデックスイメージであるか、独自のカスタムビルドされたインデックスイメージであるかに関係なく、ミラーリングプロセス中に指定されるインデックスイメージをターゲットレジストリーに自動的にミラーリングします。次に、ミラーリングされたインデックスイメージを使用して、Operator Lifecycle Manager (OLM) がミラーリングされたカタログを OpenShift Container Platform クラスターにロードできるようにするカタログソースを作成できます。
3.7.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
非接続クラスターで使用する Operator カタログのミラーリングには、以下の前提条件があります。
- ネットワークアクセスが無制限のワークステーション
-
podmanバージョン 1.9.3 以降。 既存のカタログをフィルタリングまたは プルーニング して、Operator のサブセットのみを選択的にミラーリングする場合は、次のセクションを参照してください。
Red Hat が提供するカタログをミラーリングする場合は、ネットワークアクセスが無制限のワークステーションで以下のコマンドを実行し、
registry.redhat.ioで認証します。podman login registry.redhat.io
$ podman login registry.redhat.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Docker v2-2 をサポートするミラーレジストリーへのアクセス。
-
ミラーレジストリーで、ミラーリングされた Operator コンテンツの保存に使用するリポジトリーまたは namespace を決定します。たとえば、
olm-mirrorリポジトリーを作成できます。 - ミラーレジストリーにインターネットアクセスがない場合は、ネットワークアクセスが無制限のワークステーションにリムーバブルメディアを接続します。
registry.redhat.ioなどのプライベートレジストリーを使用している場合、後続の手順で使用するためにREG_CREDS環境変数をレジストリー認証情報のファイルパスに設定します。たとえばpodmanCLI の場合は、以下のようになります。REG_CREDS=${XDG_RUNTIME_DIR}/containers/auth.json$ REG_CREDS=${XDG_RUNTIME_DIR}/containers/auth.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.7.2. カタログコンテンツの抽出およびミラーリング リンクのコピーリンクがクリップボードにコピーされました!
oc adm catalog mirror コマンドは、インデックスイメージのコンテンツを抽出し、ミラーリングに必要なマニフェストを生成します。コマンドのデフォルト動作で、マニフェストを生成し、インデックスイメージからのすべてのイメージコンテンツを、インデックスイメージと同様にミラーレジストリーに対して自動的にミラーリングします。
または、ミラーレジストリーが完全に非接続または エアギャップ 環境のホスト上にある場合、最初にコンテンツをリムーバブルメディアにミラーリングし、メディアを非接続環境に移行してから、メディアからレジストリーにコンテンツをレジストリーに対してミラーリングできます。
3.7.2.1. 同じネットワーク上のレジストリーへのカタログコンテンツのミラーリング リンクのコピーリンクがクリップボードにコピーされました!
ミラーレジストリーがネットワークアクセスが無制限のワークステーションと同じネットワーク上に置かれている場合は、ワークステーションで以下のアクションを実行します。
手順
ミラーレジストリーに認証が必要な場合は、以下のコマンドを実行してレジストリーにログインします。
podman login <mirror_registry>
$ podman login <mirror_registry>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、コンテンツをミラーレジストリーに対して抽出し、ミラーリングします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ミラーリングするカタログのインデックスイメージを指定します。
- 2
- Operator の内容をミラーリングするターゲットレジストリーの完全修飾ドメイン名 (FQDN) を指定します。ミラーレジストリー
<repository>には、前提条件で説明したolm-mirrorなど、レジストリー上の既存のリポジトリーまたは namespace を指定できます。ミラーリング中に既存のリポジトリーが見つかった場合は、そのリポジトリー名が結果のイメージ名に追加されます。イメージ名にリポジトリー名を含めたくない場合は、この行から<repository>値を省略します (例:<mirror_registry>:<port>)。 - 3
- オプション: 必要な場合は、レジストリー認証情報ファイルの場所を指定します。
registry.redhat.ioには、{REG_CREDS}が必要です。 - 4
- オプション: ターゲットレジストリーの信頼を設定しない場合は、
--insecureフラグを追加します。 - 5
- オプション: 複数のバリアントが利用可能な場合に、選択するインデックスイメージのプラットフォームおよびアーキテクチャーを指定します。イメージは
'<platform>/<arch>[/<variant>]'として渡されます。これはインデックスで参照されるイメージには適用されません。有効な値は、linux/amd64、linux/ppc64le、linux/s390x、linux/arm64です。 - 6
- オプション: 実際にイメージコンテンツをレジストリーにミラーリングせずに、ミラーリングに必要なマニフェストのみを生成します。このオプションは、ミラーリングする内容を確認するのに役立ちます。また、パッケージのサブセットのみが必要な場合に、マッピングのリストに変更を加えることができます。次に、
mapping.txtファイルをoc image mirrorコマンドで使用し、後のステップでイメージの変更済みの一覧をミラーリングできます。これは、カタログからのコンテンツの高度な選択可能ミラーリングの実行に使用するためのフラグです。
出力例
src image has index label for database path: /database/index.db using database path mapping: /database/index.db:/tmp/153048078 wrote database to /tmp/153048078 ... wrote mirroring manifests to manifests-redhat-operator-index-1614211642
src image has index label for database path: /database/index.db using database path mapping: /database/index.db:/tmp/153048078 wrote database to /tmp/1530480781 ... wrote mirroring manifests to manifests-redhat-operator-index-16142116422 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- コマンドで生成された一時的な
index.dbデータベースのディレクトリー。 - 2
- 生成される manifests ディレクトリー名を記録します。このディレクトリーは、後続の手順で参照されます。注記
Red Hat Quay では、ネストされたリポジトリーはサポート対象外です。その結果、
oc adm catalog mirrorコマンドを実行すると、401unauthorized エラーで失敗します。回避策として、oc adm catalog mirrorコマンドを実行するときに--max-components = 2オプションを使用して、ネストされたリポジトリーの作成を無効にすることができます。この回避策の詳細は Unauthorized error thrown while using catalog mirror command with Quay registry のナレッジソリューションを参照してください。
3.7.2.2. カタログコンテンツをエアギャップされたレジストリーへのミラーリング リンクのコピーリンクがクリップボードにコピーされました!
ミラーレジストリーが完全に切断された、またはエアギャップのあるホスト上にある場合は、次のアクションを実行します。
手順
ネットワークアクセスが無制限のワークステーションで以下のコマンドを実行し、コンテンツをローカルファイルにミラーリングします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ミラーリングするカタログのインデックスイメージを指定します。
- 2
- 現在のディレクトリーのローカルファイルにミラーリングするコンテンツを指定します。
- 3
- オプション: 必要な場合は、レジストリー認証情報ファイルの場所を指定します。
- 4
- オプション: ターゲットレジストリーの信頼を設定しない場合は、
--insecureフラグを追加します。 - 5
- オプション: 複数のバリアントが利用可能な場合に、選択するインデックスイメージのプラットフォームおよびアーキテクチャーを指定します。イメージは
'<platform>/<arch>[/<variant>]'として指定されます。これはインデックスで参照されるイメージには適用されません。使用できる値は、linux/amd64、linux/ppc64le、linux/s390x、linux/arm64、および.*です。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドにより、現在のディレクトリーに
v2/ディレクトリーが作成されます。-
v2/ディレクトリーをリムーバブルメディアにコピーします。 - メディアを物理的に削除して、これをミラーレジストリーにアクセスできる非接続環境のホストに割り当てます。
ミラーレジストリーに認証が必要な場合は、非接続環境のホストで以下のコマンドを実行し、レジストリーにログインします。
podman login <mirror_registry>
$ podman login <mirror_registry>Copy to Clipboard Copied! Toggle word wrap Toggle overflow v2/ディレクトリーを含む親ディレクトリーから以下のコマンドを実行し、ローカルファイルからミラーレジストリーにイメージをアップロードします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 直前のコマンド出力の
file://パスを指定します。 - 2
- Operator の内容をミラーリングするターゲットレジストリーの完全修飾ドメイン名 (FQDN) を指定します。ミラーレジストリー
<repository>には、前提条件で説明したolm-mirrorなど、レジストリー上の既存のリポジトリーまたは namespace を指定できます。ミラーリング中に既存のリポジトリーが見つかった場合は、そのリポジトリー名が結果のイメージ名に追加されます。イメージ名にリポジトリー名を含めたくない場合は、この行から<repository>値を省略します (例:<mirror_registry>:<port>)。 - 3
- オプション: 必要な場合は、レジストリー認証情報ファイルの場所を指定します。
- 4
- オプション: ターゲットレジストリーの信頼を設定しない場合は、
--insecureフラグを追加します。 - 5
- オプション: 複数のバリアントが利用可能な場合に、選択するインデックスイメージのプラットフォームおよびアーキテクチャーを指定します。イメージは
'<platform>/<arch>[/<variant>]'として指定されます。これはインデックスで参照されるイメージには適用されません。使用できる値は、linux/amd64、linux/ppc64le、linux/s390x、linux/arm64、および.*です。
注記Red Hat Quay では、ネストされたリポジトリーはサポート対象外です。その結果、
oc adm catalog mirrorコマンドを実行すると、401unauthorized エラーで失敗します。回避策として、oc adm catalog mirrorコマンドを実行するときに--max-components = 2オプションを使用して、ネストされたリポジトリーの作成を無効にすることができます。この回避策の詳細は Unauthorized error thrown while using catalog mirror command with Quay registry のナレッジソリューションを参照してください。oc adm catalog mirrorコマンドを再度実行します。新しくミラー化されたインデックスイメージをソースとして使用し、前の手順で使用したものと同じミラーレジストリーターゲットを使用します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- コマンドがミラーリングされたすべてのコンテンツを再度コピーしないように、このステップには
--manifests-onlyフラグが必要です。
重要前のステップで生成された
imageContentSourcePolicy.yamlファイルのイメージマッピングをローカルパスから有効なミラー位置に更新する必要があるため、このステップが必要です。そうしないと、後のステップでImageContentSourcePolicyオブジェクトを作成するときにエラーが発生します。
カタログのミラーリング後、残りのクラスターインストールを続行できます。クラスターのインストールが正常に完了した後に、この手順から manifests ディレクトリーを指定して ImageContentSourcePolicy および CatalogSource オブジェクトを作成する必要があります。これらのオブジェクトは、OperatorHub からの Operator のインストールを有効にするために必要になります。
3.7.3. 生成されたマニフェスト リンクのコピーリンクがクリップボードにコピーされました!
Operator カタログコンテンツをミラーレジストリーにミラーリングした後に、現在のディレクトリーに manifests ディレクトリーが生成されます。
同じネットワークのレジストリーにコンテンツをミラーリングする場合、ディレクトリー名は以下のパターンになります。
manifests-<index_image_name>-<random_number>
manifests-<index_image_name>-<random_number>
直前のセクションで非接続ホストのレジストリーにコンテンツをミラーリングする場合、ディレクトリー名は以下のパターンになります。
manifests-index/<repository>/<index_image_name>-<random_number>
manifests-index/<repository>/<index_image_name>-<random_number>
manifests ディレクトリー名は、後続の手順で参照されます。
manifests ディレクトリーには以下のファイルが含まれており、これらの一部にはさらに変更が必要になる場合があります。
catalogSource.yamlファイルは、インデックスイメージタグおよび他の関連するメタデータで事前に設定されるCatalogSourceオブジェクトの基本的な定義です。このファイルは、カタログソースをクラスターに追加するためにそのまま使用したり、変更したりできます。重要ローカルファイルにコンテンツをミラーリングする場合は、
catalogSource.yamlファイルを変更してmetadata.nameフィールドからバックスラッシュ (/) 文字を削除する必要があります。または、オブジェクトの作成を試みると、"invalid resource name" (無効なリソース名) を示すエラーを出して失敗します。これにより、
imageContentSourcePolicy.yamlファイルはImageContentSourcePolicyオブジェクトを定義します。このオブジェクトは、ノードを Operator マニフェストおよびミラーリングされたレジストリーに保存されるイメージ参照間で変換できるように設定します。注記クラスターが
ImageContentSourcePolicyオブジェクトを使用してリポジトリーのミラーリングを設定する場合、ミラーリングされたレジストリーにグローバルプルシークレットのみを使用できます。プロジェクトにプルシークレットを追加することはできません。mapping.txtファイルには、すべてのソースイメージが含まれ、これはそれらのイメージをターゲットレジストリー内のどこにマップするかを示します。このファイルはoc image mirrorコマンドと互換性があり、ミラーリング設定をさらにカスタマイズするために使用できます。重要ミラーリングのプロセスで
--manifests-onlyフラグを使用しており、ミラーリングするパッケージのサブセットをさらにトリミングするには、mapping.txtファイルの変更およびoc image mirrorコマンドでのファイルの使用について、OpenShift Container Platform 4.7 ドキュメントの Package Manifest Format カタログイメージのミラーリング の手順を参照してください。
3.7.4. インストール後の要件 リンクのコピーリンクがクリップボードにコピーされました!
カタログのミラーリング後、残りのクラスターインストールを続行できます。クラスターのインストールが正常に完了した後に、この手順から manifests ディレクトリーを指定して ImageContentSourcePolicy および CatalogSource オブジェクトを作成する必要があります。これらのオブジェクトは、OperatorHub からの Operator のインストールを設定し、有効にするために必要です。