9.3. oc-mirror プラグインを使用したカスタム Operator カタログの作成
幅広い Operator を使用してカスタムカタログを作成し、oc-mirror OpenShift CLI (oc)プラグインを使用してそれらをミラーリングできます。
9.3.1. Red Hat が提供する Operator カタログとミラーレジストリーの使用 リンクのコピーリンクがクリップボードにコピーされました!
カタログをフィルタリングし、イメージを削除して、特定の Operator を取得し、oc-mirror OpenShift CLI (oc)プラグインを使用してそれらをミラーリングできます。非接続設定で Operator を使用するか、Red Hat Enterprise Linux (RHEL)イメージに埋め込まれた Operator を使用することもできます。
- ミラーリング用にシステムを設定する方法は、以下の関連情報セクションのリンクを参照してください。
- Red Hat が提供する Operator カタログから Operator をデプロイする準備ができている場合は、それらをミラーリングするか、RHEL イメージに組み込むために、oc-mirror プラグインを使用したカタログコンテンツの検査 セクションから始めます。
9.3.2. ミラーレジストリーを作成するための oc-mirror プラグインについて リンクのコピーリンクがクリップボードにコピーされました!
MicroShift で oc-mirror OpenShift CLI (oc)プラグインを使用して、Operator カタログからイメージをフィルタリングおよび削除できます。その後、フィルターされたカタログコンテンツをミラーレジストリーにミラーリングしたり、非接続またはオフラインのデプロイメントでコンテナーイメージを使用したりできます。
インターネットに接続された Red Hat ホストレジストリーから切断されたイメージレジストリーにコンテンツをミラーリングする手順は、選択したレジストリーに関係なく同じです。カタログの内容をミラーリングした後、ミラーレジストリーからこのコンテンツを取得するように各クラスターを設定します。
9.3.2.1. ミラーレジストリーを作成する際の接続に関する考慮事項 リンクのコピーリンクがクリップボードにコピーされました!
レジストリーを入力するときは、次のいずれかの接続シナリオを使用できます。
- 接続ミラーリング
- インターネットとミラーレジストリーの両方にアクセスできるホストがあるが、クラスターノードにはアクセスできない場合、そのマシンからコンテンツを直接ミラーリングできます。
- 非接続ミラーリング
インターネットとミラーレジストリーの両方にアクセスできるホストがない場合は、イメージをファイルシステムにミラーリングしてから、そのホストまたはリムーバブルメディアを非接続環境に持ち込む必要があります。
重要コンテナーレジストリーは、プロビジョニングするクラスター内のすべてのマシンから到達可能である必要があります。レジストリーに到達できない場合、ワークロードの再配置など、インストール、更新、およびその他の操作は失敗します。
到達不能なレジストリーによって発生する問題を回避するには、次の標準的な方法を使用します。
- ミラーレジストリーを高可用性の方法で実行します。
- ミラーレジストリーが少なくともクラスターの製品可用性と一致していることを確認します。
9.3.3. oc-mirror プラグインを使用したカタログ内容の検査 リンクのコピーリンクがクリップボードにコピーされました!
次の手順例を使用してカタログを選択し、OpenShift Container Platform Operator を一覧表示し、oc-mirror プラグインイメージセット設定ファイルに追加します。カタログを選択して Operator を一覧表示するには、oc mirror v1 を使用する必要があります。
独自のカタログと Operator を使用する場合は、イメージを内部レジストリーに直接プッシュできます。
前提条件
-
OpenShift CLI (
oc)をアンインストールしている。 - Operator Lifecycle Manager (OLM)をインストールしている。
- oc-mirror プラグインをインストールしている。
手順
次のコマンドを実行して、フィルタリング可能な Red Hat 提供の Operator カタログのリストを取得します。
$ oc mirror list operators --version 4.18 --catalogs次のコマンドを実行して、Red Hat Operators カタログの Operator の一覧を取得します。
$ oc mirror list operators <--catalog=<catalog_source>>1 - 1
registry.redhat.io/redhat/redhat-operator-index:v4.18またはquay.io/operatorhubio/catalog:latestなどのカタログソースを指定します。
-
Operator を選択します。この例では、
amq-broker-rhel9Operator を使用します。 オプション: フィルタリングする Operator のチャネルとバージョンを検査するには、次のコマンドを入力します。
次のコマンドを実行して、チャネルのリストを取得します。
$ oc mirror list operators --catalog=registry.redhat.io/redhat/redhat-operator-index:v4.18 --package=amq-broker-rhel9次のコマンドを実行して、チャネル内のバージョンのリストを取得します。
$ oc mirror list operators --catalog=registry.redhat.io/redhat/redhat-operator-index:v4.18 --package=amq-broker-rhel9 --channel=7.13.x
次のステップ
- この手順で収集した情報を使用して、イメージセット設定ファイルを作成および編集します。
- 変換されたイメージセット設定ファイルからのイメージをミラーレジストリーまたはディスクにミラーリングします。
9.3.4. イメージセット設定ファイルの作成 リンクのコピーリンクがクリップボードにコピーされました!
ImageSetConfiguration YAML ファイルを作成する必要があります。このイメージセット設定ファイルは、ミラーリングする Operator と oc-mirror プラグインの設定の両方を指定します。エントリーが、使用する予定の MicroShift と Operator の両方と互換性を持つように、イメージセット設定ファイルの内容を編集します。
oc mirror v2 は、metadata の代わりにキャッシュシステムを使用します。キャッシュシステムは、1 つのステップが失敗した場合にミラーリングプロセス全体を開始する必要がなくなります。代わりに、失敗したステップのトラブルシューティングを行うと、失敗前に存在していたミラーイメージがプロセスによって再ミラーリングされません。
前提条件
コンテナーイメージレジストリーの認証情報ファイルを作成している。詳細は、以下の参考資料を参照してください。
手順
次の例をガイドとして使用して、MicroShift の
ImageSetConfigurationYAML を作成して編集します。編集された MicroShift イメージセット設定ファイルの例
kind: ImageSetConfiguration apiVersion: mirror.openshift.io/v2alpha1 mirror: operators: - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.181 packages: - name: amq-broker-rhel92 channels: - name: 7.13.x3 additionalImages:4 - name: quay.io/rh_ee_aguidi/multi-platform-container:latest - name: quay.io/rh_ee_aguidi/empty-image:latest- 1
- イメージを取得する Operator カタログを設定します。
- 2
- イメージセットに含める Operator パッケージを指定します。カタログ内のすべてのパッケージを取得するには、このフィールドを削除してください。
- 3
- イメージセットに含める Operator パッケージの特定のチャネルのみを指定します。そのチャネルでバンドルを使用しない場合も、常に Operator パッケージのデフォルトチャネルを含める必要があります。
oc mirror list operators --catalog=<catalog_name> --package=<package_name>コマンドを実行すると、デフォルトチャネルを見つけることができます。 - 4
- イメージセットに含める追加のイメージを指定します。追加のイメージを指定する必要がない場合は、このフィールドを削除してください。
重要プラットフォームフィールド、関連フィールド、および Helm は MicroShift ではサポートされていません。-
更新されたファイルを
ImageSetConfiguration.yamlとして保存します。
次のステップ
- oc-mirror プラグインを使用して、イメージセットをターゲットミラーレジストリーに直接ミラーリングします。
- CRI-O を設定します。
- カタログソースをクラスターに適用します。
9.3.4.1. oc-mirror プラグイン v2 の ImageSet 設定パラメーター リンクのコピーリンクがクリップボードにコピーされました!
oc-mirror プラグイン v2 には、ミラーリングするイメージを定義するイメージセット設定ファイルが必要です。次の表に、ImageSetConfiguration リソースで使用可能なパラメーターを示します。
minVersion および maxVersion プロパティーを使用して特定の Operator バージョン範囲をフィルターすると、複数のチャネルヘッドエラーが発生する可能性があります。エラーメッセージには、multiple channel heads があることが示されます。これは、フィルターを適用すると、Operator の更新グラフが切り捨てられるためです。
OLM の要件として、すべての Operator チャネルに、1 つのエンドポイント (つまり最新バージョンの Operator) を持つ更新グラフを構成するバージョンが含まれている必要があります。フィルター範囲を適用すると、更新グラフが 2 つ以上の個別のグラフ、または複数のエンドポイントを持つグラフに変換されることがあります。
このエラーを回避するには、最新バージョンの Operator を除外しないでください。それでもエラーが発生する場合は、Operator に応じて、maxVersion プロパティーを増やすか、minVersion プロパティーを減らす必要があります。Operator グラフはそれぞれ異なる可能性があるため、エラーが解決するまでこれらの値を調整する必要がある場合があります。
| パラメーター | 説明 | 値 |
|---|---|---|
|
|
|
文字列の例: |
|
| イメージセットの設定。 | オブジェクト |
|
| イメージセットの追加のイメージ設定。 | オブジェクトの配列 以下に例を示します。
|
|
| ミラーリングするイメージのタグまたはダイジェスト。 |
文字列の例: |
|
| ミラーリングをブロックするタグまたはダイジェスト (SHA) を持つイメージのリスト。 |
文字列配列の例: |
|
| イメージセットの Operators 設定。 | オブジェクトの配列 以下に例を示します。
|
|
| イメージセットに含める Operator カタログ。 |
文字列の例: |
|
|
|
ブール値。デフォルト値は |
|
| Operator パッケージ設定 | オブジェクトの配列 以下に例を示します。
|
|
| イメージセットに含める Operator パッケージ名 |
文字列の例: |
|
| Operator パッケージのチャネル設定。 | オブジェクト |
|
| イメージセットに含める、パッケージ内で一意の Operator チャネル名。 |
文字列の例: |
|
| Operator が存在するすべてのチャネルでミラーリングする最上位バージョンの Operator。 |
文字列の例: |
|
| 存在するすべてのチャネル間でミラーリングする Operator の最低バージョン。 |
文字列の例: |
|
| Operator が存在するすべてのチャネルでミラーリングする最上位バージョンの Operator。 |
文字列の例: |
|
| 存在するすべてのチャネル間でミラーリングする Operator の最低バージョン。 |
文字列の例: |
|
| 参照されるカタログをミラーリングするための代替名とオプションの namespace 階層。 |
文字列の例: |
|
| oc-mirror プラグイン v2 が生成した catalogSource カスタムリソースを完了するために使用するテンプレートのディスク上のパス。 |
文字列の例:
|
|
|
|
文字列の例: |
9.3.4.1.1. DeleteImageSetConfiguration パラメーター リンクのコピーリンクがクリップボードにコピーされました!
oc-mirror プラグイン v2 でイメージの削除を使用するには、ミラーレジストリーから削除するイメージを定義する DeleteImageSetConfiguration.yaml 設定ファイルを使用する必要があります。次の表は、DeleteImageSetConfiguration リソースで使用可能なパラメーターを示しています。
| パラメーター | 説明 | 値 |
|---|---|---|
|
|
|
文字列の例: |
|
| 削除するイメージセットの設定。 | オブジェクト |
|
| 削除イメージセットの追加イメージ設定。 | オブジェクトの配列の例:
|
|
| 削除するイメージのタグまたはダイジェスト。 |
文字列の例: |
|
| 削除イメージセットの Operator の設定。 | オブジェクトの配列の例:
|
|
| 削除イメージセットに含める Operator カタログ。 |
文字列の例: |
|
| true の場合、完全なカタログ、Operator パッケージ、または Operator チャネルが削除されます。 |
ブール値。デフォルト値は |
|
| Operator パッケージ設定 | オブジェクトの配列の例:
|
|
| 削除イメージセットに含める Operator パッケージ名。 |
文字列の例: |
|
| Operator パッケージのチャネル設定。 | オブジェクト |
|
| 削除イメージセットに含める、パッケージ内で一意の Operator チャネル名。 |
文字列の例: |
|
| 選択したチャネル内で削除する Operator の最大バージョン。 |
文字列の例: |
|
| Operator が存在する選択範囲内で削除する Operator の最小バージョン。 |
文字列の例: |
|
| Operator が存在するすべてのチャネルで削除する最大バージョンの Operator。 |
文字列の例: |
|
| Operator が存在するすべてのチャネルで削除する最小バージョンの Operator。 |
文字列の例: |
9.3.5. ミラーからミラーへのミラーリング リンクのコピーリンクがクリップボードにコピーされました!
oc-mirror プラグインを使用して、イメージセットの作成中にアクセス可能なターゲットミラーレジストリーにイメージセットを直接ミラーリングできます。
前提条件
- 必要なコンテナーイメージを取得するためにインターネットにアクセスできる。
-
OpenShift CLI (
oc) がインストールされている。 -
oc-mirrorCLI プラグインをインストールしている。 - イメージセット設定ファイルを作成した。
手順
次のコマンドを実行して、指定されたイメージセット設定から指定されたレジストリーにイメージをミラーリングします。
$ oc-mirror --config imageset-config.yaml --workspace file://<emphasis><v2_workspace></emphasis> \1 docker://<emphasis><remote_registry></emphasis> --v22 出力例
Rendering catalog image "registry.example.com/redhat/redhat-operator-index:v{ocp-version}" with file-based catalog重要MicroShift で CRI-O の手動設定の参照コンテンツとして、
ImageDigestMirrorSetYAML ファイルを使用する必要があります。リソースを MicroShift クラスターに直接適用することはできません。
検証
次のコマンドを実行して、
cluster-resourcesサブディレクトリーの内容を一覧表示します。$ ls <v2_workspace>/working-dir/cluster-resources/1 - 1
- < ;v2_workspace> は、ミラーリングプロセスのカスタムリソースを保存するために使用したディレクトリーに置き換えます。
次のステップ
-
CRI-O を手動で設定するために使用する
ImageDigestMirrorSetYAML コンテンツを変換します。 - 必要に応じて、非接続またはオフラインで使用するために、ミラーからディスクにイメージをミラーリングします。
トラブルシューティング
9.3.6. Operator のレジストリーミラーを使用するための CRI-O の設定 リンクのコピーリンクがクリップボードにコピーされました!
oc-mirror プラグインで作成された ImageDigestMirrorSet YAML ファイルを、MicroShift で使用される CRI-O コンテナーランタイム設定と互換性のある形式に変換する必要があります。
前提条件
-
OpenShift CLI (
oc) がインストールされている。 - Operator Lifecycle Manager (OLM)をインストールしている。
- oc-mirror プラグインをインストールしている。
-
yqバイナリーをインストールしている。 -
ImageDigestMirrorSetおよびCatalogSourceYAML ファイルは、cluster-resourcesサブディレクトリーで利用できます。
手順
次のコマンドを実行して、
ImageDigestMirrorSetYAML ファイルの内容を確認します。$ cat <v2_workspace>/working-dir/cluster-resources/imagedigestmirrorset.yaml1 - 1
- < ;v2_workspace> を、ミラーリングリソースを生成したときに使用したディレクトリー名に置き換えます。
出力例
apiVersion: config.openshift.io/v1 kind: ImageDigestMirrorSet metadata: labels: operators.openshift.org/catalog: "true" name: operator-0 spec: imageDigestMirrors: - mirrors: - registry.example.com/amq7 source: registry.redhat.io/amq7次のコマンドを実行して、
imagedigestmirrorset.yamlを CRI-O 設定の準備が整った形式に変換します。yq '.spec.imageDigestMirrors[] as $item ireduce([]; . + [{"mirror": $item.mirrors[], "source": ($item | .source)}]) | .[] | "[[registry]] prefix = \"" + .source + "\" location = \"" + .mirror + "\" mirror-by-digest-only = true insecure = true "' ./mirror1/working-dir/cluster-resources/imagedigestmirrorset.yaml出力例
[[registry]] prefix = "registry.redhat.io/amq7" location = "registry.example.com/amq7" mirror-by-digest-only = true insecure = true/etc/containers/registries.conf.d/ディレクトリーの CRI-O 設定ファイルに出力を追加します。crio-config.yamlミラー設定ファイルの例[[registry]] prefix = "registry.redhat.io/amq7" location = "registry.example.com/amq7" mirror-by-digest-only = true insecure = true [[registry]] prefix = "" location = "quay.io" mirror-by-digest-only = true [[registry.mirror]] location = "<registry_host>:<port>"1 insecure = false- 1
- ミラーレジストリーサーバーのホスト名およびポートを指定します(例:
microshift-quay:8443)。
次のコマンドで MicroShift を再起動して、CRI-O 設定の変更を適用します。
$ sudo systemctl restart crio
9.3.7. oc-mirror プラグインで作成されたカスタムカタログのインストール リンクのコピーリンクがクリップボードにコピーされました!
イメージセットをミラーレジストリーにミラーリングした後、生成された CatalogSource カスタムリソース (CR) をクラスターに適用する必要があります。Operator Lifecycle Manager (OLM)は CatalogSource CR を使用して、ミラーレジストリーで使用可能な Operator に関する情報を取得します。次に、カスタムカタログをサブスクライブするためのサブスクリプション CR を作成して適用する必要があります。
前提条件
- イメージセットをレジストリーミラーにミラーリングしている。
- CRI-O コンテナーのランタイム設定に、イメージ参照情報を追加している。
手順
次のコマンドを実行して、results ディレクトリーからカタログソース設定ファイルを適用し、カタログソースオブジェクトを作成します。
$ oc apply -f ./<v2_workspace>/working-dir/cluster-resources/catalogSource-cs-redhat-catalog.yaml1 - 1
- < ;v2_workspace> は、ミラーリングプロセスのカスタムリソースを保存するために使用したディレクトリーに置き換えます。
出力例
catalogsource.operators.coreos.com/cs-redhat-catalog created詳細は、以下のサンプルファイルを参照してください。
カタログソース設定ファイルの例
apiVersion: operators.coreos.com/v2alpha1 kind: CatalogSource metadata: name: redhat-catalog namespace: openshift-marketplace1 spec: sourceType: grpc image: registry.example.com/redhat/redhat-catalog:v4.18 updateStrategy: registryPoll: interval: 60m- 1
- グローバル namespace を指定します。
metadata.namespaceをopenshift-marketplaceに設定すると、カタログはすべての namespace 内のカタログを参照できるようになります。どの namespace のサブスクリプションでも、openshift-marketplacenamespace で作成されたカタログを参照できます。
以下のコマンドを実行して、
CatalogSourceリソースが正常にインストールされたことを確認します。$ oc get catalogsource --all-namespaces出力例
NAMESPACE NAME DISPLAY TYPE PUBLISHER AGE openshift-marketplace certified-operators Certified Operators grpc Red Hat 37m openshift-marketplace community-operators Community Operators grpc Red Hat 37m openshift-marketplace redhat-marketplace Red Hat Marketplace grpc Red Hat 37m openshift-marketplace redhat-catalog Red Hat Catalog grpc Red Hat 37m次のコマンドを使用して、カタログソースが実行されていることを確認します。
$ oc get pods -n openshift-marketplace出力例
NAME READY STATUS RESTARTS AGE cs-redhat-catalog-4227b 2/2 Running 0 2m5s次の例のような
SubscriptionCR を作成します。SubscriptionCR の例apiVersion: operators.coreos.com/v2alpha1 kind: Subscription metadata: name: amq-broker namespace: openshift-operators spec: channel: 7.13.x name: amq-broker-rhel9 source: cs-redhat-catalog sourceNamespace: openshift-marketplace次のコマンドを実行して、Subscription CR 設定を適用します。
$ oc apply -f ./<subscription_cr.yaml>1 - 1
- <subscription _cr.yaml> でサブスクリプションの名前を指定します (例:
amq-broker-subscription-cr.yaml)。
出力例
subscription.operators.coreos.com/amq-broker created