8.3. oc-mirror プラグインを使用したカスタムカタログの作成
広く利用可能な Operators を使用してカスタムカタログを作成し、oc-mirror OpenShift CLI (oc) プラグインを使用して、それらをミラーリングできます。
8.3.1. Red Hat が提供する Operator カタログとミラーレジストリーの使用
oc-mirror OpenShift CLI (oc) プラグインを使用して、カタログをフィルタリングおよびプルーニングし、特定の Operators を取得して、それらをミラーリングできます。Operator は、非接続設定で使用したり、Red Hat Enterprise Linux for Edge (RHEL for Edge) イメージに組み込んで使用することもできます。システムをミラーリング用に設定する方法の詳細は、以下の関連情報セクションのリンクを参照してください。Red Hat が提供する Operator カタログから Operator をデプロイし、それらをミラーリングするか、または RHEL for Edge イメージに埋め込む準備ができている場合は、以下の "oc-mirror プラグインを使用したカタログ内容の検査" セクションから始めてください。
8.3.2. ミラーレジストリーを作成するための oc-mirror プラグインについて
MicroShift で oc-mirror OpenShift CLI (oc) プラグインを使用して、Operator カタログをフィルタリングおよびプルーニングできます。続いて、フィルタリングされたカタログの内容をミラーレジストリーにミラーリングしたり、RHEL for Edge を使用して、非接続デプロイメントまたはオフラインデプロイメントでコンテナーイメージを使用したりできます。
MicroShift は、oc-mirror プラグインの一般公開バージョン (1) を使用します。oc-mirror プラグインのテクニカルプレビューバージョン (2) では、以下の手順を使用しないでください。
目的の Operators に必要なコンテナーイメージをローカルにミラーリングすることも、Red Hat Quay などの Docker v2-2 をサポートするコンテナーミラーレジストリーにミラーリングすることもできます。インターネットに接続された Red Hat がホストするレジストリーから、非接続イメージレジストリーにコンテンツをミラーリングする手順は、選択したレジストリーに関係なく同じです。カタログの内容をミラーリングした後、ミラーレジストリーからこのコンテンツを取得するように各クラスターを設定します。
8.3.2.1. ミラーレジストリーを作成する際の接続に関する考慮事項
レジストリーを入力するときは、次のいずれかの接続シナリオを使用できます。
- 接続ミラーリング
- インターネットとミラーレジストリーの両方にアクセスできるホストがあるが、クラスターノードにはアクセスできない場合、そのマシンからコンテンツを直接ミラーリングできます。
- 非接続ミラーリング
インターネットとミラーレジストリーの両方にアクセスできるホストがない場合は、イメージをファイルシステムにミラーリングしてから、そのホストまたはリムーバブルメディアを非接続環境に持ち込む必要があります。
重要コンテナーレジストリーは、プロビジョニングするクラスター内のすべてのマシンからアクセスできる必要があります。レジストリーにアクセスできない場合、インストール、更新、およびワークロードの再配置などのその他の操作が失敗する可能性があります。
到達不能なレジストリーによって発生する問題を回避するには、次の標準的な方法を使用します。
- ミラーレジストリーを高可用性の方法で実行します。
- ミラーレジストリーが少なくともクラスターの製品可用性と一致していることを確認します。
関連情報
8.3.2.2. oc-mirror プラグインを使用したカタログ内容の検査
次の例の手順を使用して、カタログを選択し、利用可能な OpenShift Container Platform コンテンツから Operators をリストして、oc-mirror プラグインイメージセット設定ファイルに追加します。
独自のカタログと Operator を使用する場合は、イメージを内部レジストリーに直接プッシュできます。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 - Operator Lifecycle Manager (OLM) がインストールされている。
- oc-mirror OpenShift CLI (oc) プラグインがインストールされている。
手順
次のコマンドを実行して、フィルタリング可能な Red Hat 提供の Operator カタログのリストを取得します。
$ oc mirror list operators --version 4.15 --catalogs
次のコマンドを実行して、Red Hat Operators カタログ内の Operators のリストを取得します。
$ oc mirror list operators <--catalog=<catalog_source>> 1
- 1
registry.redhat.io/redhat/redhat-operator-index:v4.15
やquay.io/operatorhubio/catalog:latest
などのカタログソースを指定します。
-
Operator を選択します。この例では、
amq-broker-rhel8
が選択されています。 オプション: フィルタリングする Operator のチャネルとバージョンを検査するには、次のコマンドを入力します。
次のコマンドを実行して、チャネルのリストを取得します。
$ oc mirror list operators --catalog=registry.redhat.io/redhat/redhat-operator-index:v4.15 --package=amq-broker-rhel8
次のコマンドを実行して、チャネル内のバージョンのリストを取得します。
$ oc mirror list operators --catalog=registry.redhat.io/redhat/redhat-operator-index:v4.15 --package=amq-broker-rhel8 --channel=7.11.x
次のステップ
- この手順で収集した情報を使用して、イメージセット設定ファイルを作成および編集します。
- 変換されたイメージセット設定ファイルからのイメージをミラーレジストリーまたはディスクにミラーリングします。
8.3.2.3. イメージセット設定ファイルの作成
oc-mirror プラグインを使用してカタログの内容をミラーリングするには、イメージセット設定ファイルを作成する必要があります。イメージセット設定ファイルは、oc-mirror プラグインのその他の設定とともに、ミラーリングする Operator を定義します。デフォルトのイメージセットファイルを生成した後、残りのエントリーが MicroShift と使用予定の Operator の両方と互換性を持つように内容を編集する必要があります。
イメージセット設定ファイルでストレージバックエンドを指定する必要があります。このストレージバックエンドは、Docker v2-2 をサポートするローカルディレクトリーまたはレジストリーにすることができます。oc-mirror プラグインは、イメージセットの作成中にこのストレージバックエンドにメタデータを保存します。
oc-mirror プラグインによって生成されたメタデータを削除または変更しないでください。同じミラーレジストリーに対して oc-mirror プラグインを実行するたびに、同じストレージバックエンドを使用する必要があります。
前提条件
- コンテナーイメージレジストリーの認証情報ファイルを作成している。イメージのミラーリングを可能にする認証情報の設定 を参照してください。
手順
oc mirror init
コマンドを使用して、イメージセット設定のテンプレートを作成し、それをimageset-config.yaml
というファイルに保存します。$ oc mirror init <--registry <storage_backend> > imageset-config.yaml 1
- 1
- ストレージバックエンドのロケーションを指定します (例:
example.com/mirror/oc-mirror-metadata
)。
デフォルトのイメージセット設定ファイルの例
kind: ImageSetConfiguration apiVersion: mirror.openshift.io/v1alpha2 storageConfig: registry: imageURL: registry.example.com/oc-mirror skipTLS: false mirror: platform: 1 channels: - name: stable-4.15 type: ocp operators: - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.15 packages: - name: serverless-operator channels: - name: stable additionalImages: 2 - name: registry.redhat.io/ubi8/ubi:latest helm: {} 3
次の例のように、MicroShift とミラーリングする Operator の両方の要件を満たすようにイメージセット設定ファイルの値を編集します。
編集された MicroShift イメージセット設定ファイルの例
kind: ImageSetConfiguration apiVersion: mirror.openshift.io/v1alpha2 storageConfig: 1 registry: imageURL: <storage_backend> 2 skipTLS: false mirror: operators: - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.15 3 packages: - name: amq-broker-rhel8 4 channels: - name: 7.11.x 5
- 1
- イメージセットのメタデータが保存されるバックエンドのロケーションを設定します。この場所は、レジストリーまたはローカルディレクトリーにすることができます。
storageConfig
値を指定する必要があります。 - 2
- ストレージバックエンドのレジストリー URL (例:
<example.com/mirror/oc-mirror-metadata
) を設定します。 - 3
- イメージを取得する Operator カタログを設定します。
- 4
- イメージセットに含める Operator パッケージを指定します。カタログ内のすべてのパッケージを取得するには、このフィールドを削除してください。
- 5
- イメージセットに含める Operator パッケージの特定のチャネルのみを指定します。そのチャネルでバンドルを使用しない場合も、常に Operator パッケージのデフォルトチャネルを含める必要があります。
oc mirror list operators --catalog=<catalog_name> --package=<package_name>
コマンドを実行すると、デフォルトチャネルを見つけることができます。
- 更新したファイルを保存します。
次のステップ
- oc-mirror プラグインを使用して、イメージセットをターゲットミラーレジストリーに直接ミラーリングします。
- CRI-O を設定します。
- カタログソースをクラスターに適用します。
8.3.2.3.1. Image set configuration parameters
oc-mirror プラグインには、ミラーリングするイメージを定義するイメージセット設定ファイルが必要です。次の表に、ImageSetConfiguration
リソースで使用可能なパラメーターを示します。
パラメーター | 説明 | 値 |
---|---|---|
|
|
String。例: |
| イメージセットの設定。 | オブジェクト |
| イメージセットの追加のイメージ設定。 | オブジェクトの配列。以下に例を示します。 additionalImages: - name: registry.redhat.io/ubi8/ubi:latest |
| ミラーリングするイメージのタグまたはダイジェスト。 |
String。例: |
| ミラーリングからブロックするイメージの完全なタグ、ダイジェスト、またはパターン。 |
文字列の配列例: |
| イメージセットの Operators 設定。 | オブジェクトの配列。以下に例を示します。 operators: - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.15 packages: - name: elasticsearch-operator minVersion: '2.4.0' |
| イメージセットに含める Operator カタログ。 |
文字列。たとえば、 |
|
|
ブール値。デフォルト値は |
| Operator パッケージ設定 | オブジェクトの配列。以下に例を示します。 operators: - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.15 packages: - name: elasticsearch-operator minVersion: '5.2.3-31' |
| イメージセットに含める Operator パッケージ名 |
String。例: |
| Operator パッケージのチャネル設定。 | オブジェクト |
| イメージセットに含める、パッケージ内で一意の Operator チャネル名。 |
文字列。たとえば、 |
| Operator が存在するすべてのチャネルでミラーリングする最上位バージョンの Operator。詳細は、以下の注記を参照してください。 |
String。例: |
| 含める最小バンドルの名前と、チャネルヘッドへの更新グラフ内のすべてのバンドル。名前付きバンドルにセマンティックバージョンメタデータがない場合にのみ、このフィールドを設定します。 |
String。例: |
| 存在するすべてのチャネル間でミラーリングする Operator の最低バージョン。詳細は、以下の注記を参照してください。 |
String。例: |
| Operator が存在するすべてのチャネルでミラーリングする最上位バージョンの Operator。詳細は、以下の注記を参照してください。 |
String。例: |
| 存在するすべてのチャネル間でミラーリングする Operator の最低バージョン。詳細は、以下の注記を参照してください。 |
String。例: |
|
|
ブール値。デフォルト値は |
| 参照されるカタログをミラーリングするための代替名とオプションの namespace 階層。 |
String。例: |
| 参照されたカタログをミラーリングするための代替名。
|
String。例: |
|
|
String。例: |
| イメージセットのバックエンド設定。 | オブジェクト |
| イメージセットのローカルバックエンド設定。 | オブジェクト |
| イメージセットのメタデータを含むディレクトリーのパス。 |
String。例: |
| イメージセットのレジストリーバックエンド設定。 | オブジェクト |
| バックエンドレジストリー URI。オプションで、URI に namespace 参照を含めることができます。 |
String。例: |
| オプションで、参照されるバックエンドレジストリーの TLS 検証をスキップします。 |
ブール値。デフォルト値は |
minVersion
および maxVersion
プロパティーを使用して特定の Operator バージョン範囲をフィルターすると、複数のチャネルヘッドエラーが発生する可能性があります。エラーメッセージには、multiple channel heads
があることが示されます。これは、フィルターを適用すると、Operator の更新グラフが切り捨てられるためです。
すべての Operator チャネルに、1 つのエンドポイント (つまり最新バージョンの Operator) を持つ更新グラフを構成するバージョンが含まれている必要があります。これは Operator Lifecycle Manager によって要求される要件です。フィルター範囲を適用すると、更新グラフが 2 つ以上の個別のグラフ、または複数のエンドポイントを持つグラフに変換されることがあります。
このエラーを回避するには、最新バージョンの Operator を除外しないでください。それでもエラーが発生する場合は、Operator に応じて、maxVersion
プロパティーを増やすか、minVersion
プロパティーを減らす必要があります。Operator グラフはそれぞれ異なる可能性があるため、エラーが解決するまでこれらの値を調整する必要がある場合があります。
関連情報
8.3.2.4. ミラーからミラーへのミラーリング
oc-mirror プラグインを使用して、イメージセットの作成中にアクセス可能なターゲットミラーレジストリーにイメージセットを直接ミラーリングできます。
イメージセット設定ファイルでストレージバックエンドを指定する必要があります。このストレージバックエンドは、ローカルディレクトリーまたは Dockerv2 レジストリーにすることができます。oc-mirror プラグインは、イメージセットの作成中にこのストレージバックエンドにメタデータを保存します。
oc-mirror プラグインによって生成されたメタデータを削除または変更しないでください。同じミラーレジストリーに対して oc-mirror プラグインを実行するたびに、同じストレージバックエンドを使用する必要があります。
前提条件
- 必要なコンテナーイメージを取得するためのインターネットへのアクセスがある。
-
OpenShift CLI (
oc
) がインストールされている。 -
oc-mirror
CLI プラグインをインストールしている。 - イメージセット設定ファイルを作成している。
手順
oc mirror
コマンドを実行して、指定されたイメージセット設定から指定されたレジストリーにイメージをミラーリングします。$ oc mirror --config=./<imageset-config.yaml> \1 docker://registry.example:5000 2
出力例
Rendering catalog image "registry.example.com/redhat/redhat-operator-index:v{ocp-version}" with file-based catalog
検証
-
生成された
oc-mirror-workspace/
ディレクトリーに移動します。 -
results ディレクトリーに移動します (例:
results-1639608409/
。 -
ImageContentSourcePolicy
およびCatalogSource
リソースに YAML ファイルが存在することを確認します。
ImageContentSourcePolicy
YAML ファイルは、MicroShift での CRI-O の手動設定の参照コンテンツとして使用されます。リソースを MicroShift クラスターに直接適用することはできません。
次のステップ
-
手動で設定する CRI-O で使用する
ImageContentSourcePolicy
YAML コンテンツを変換します。 - 必要に応じて、非接続またはオフラインで使用するために、ミラーからディスクにイメージをミラーリングします。
- oc-mirror が生成したリソースを使用するようにクラスターを設定します。
トラブルシューティング
8.3.2.5. Operator のレジストリーミラーを使用するための CRI-O の設定
oc-mirror プラグインで作成された imageContentSourcePolicy.yaml
ファイルを、MicroShift で使用される CRI-O コンテナーのランタイム設定と互換性のある形式に変換する必要があります。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 - Operator Lifecycle Manager (OLM) がインストールされている。
- oc-mirror OpenShift CLI (oc) プラグインがインストールされている。
-
yq
バイナリーがインストールされている。 -
ImageContentSourcePolicy
およびCatalogSource
YAML ファイルは、oc-mirror-workspace/results-*
ディレクトリーにあります。
手順
次のコマンドを実行して、
imageContentSourcePolicy.yaml
ファイルの内容を確認します。$ cat oc-mirror-workspace/<results-directory>/imageContentSourcePolicy.yaml 1
- 1
<results-1707148826>
などのresults
ディレクトリー名を指定します。
出力例
apiVersion: operator.openshift.io/v1alpha1 kind: ImageContentSourcePolicy metadata: labels: operators.openshift.org/catalog: "true" name: operator-0 spec: repositoryDigestMirrors: - mirrors: - registry.<example.com>/amq7 source: registry.redhat.io/amq7
次のコマンドを実行して、
imageContentSourcePolicy.yaml
を CRI-O 設定に適した形式に変換します。yq '.spec.repositoryDigestMirrors[] as $item ireduce([]; . + [{"mirror": $item.mirrors[], "source": ($item | .source)}]) | .[] | "[[registry]] prefix = \"" + .source + "\" location = \"" + .mirror + "\" mirror-by-digest-only = true insecure = true "' ./icsp.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
8.3.2.6. oc-mirror プラグインで作成されたカスタムカタログのインストール
イメージセットをミラーレジストリーにミラーリングした後、生成された CatalogSource
カスタムリソース (CR) をクラスターに適用する必要があります。CatalogSource
CR は、Operator Lifecycle Manager (OLM) によって、ミラーレジストリー内の利用可能な Operators に関する情報を取得するために使用されます。次に、カスタムカタログをサブスクライブするためのサブスクリプション CR を作成して適用する必要があります。
前提条件
- イメージセットをレジストリーミラーにミラーリングしている。
- CRI-O コンテナーのランタイム設定に、イメージ参照情報を追加している。
手順
次のコマンドを実行して、results ディレクトリーからカタログソース設定ファイルを適用し、カタログソースオブジェクトを作成します。
$ oc apply -f ./oc-mirror-workspace/results-1708508014/catalogSource-cs-redhat-operator-index.yaml
カタログソース設定ファイルの例
apiVersion: operators.coreos.com/v1alpha1 kind: CatalogSource metadata: name: redhat-catalog namespace: openshift-marketplace 1 spec: sourceType: grpc image: registry.example.com/redhat/redhat-operator-index:v4.15 updateStrategy: registryPoll: interval: 60m
- 1
- グローバル namespace を指定します。
metadata.namespace
をopenshift-marketplace
に設定すると、カタログはすべての namespace 内のカタログを参照できるようになります。どの namespace のサブスクリプションでも、openshift-marketplace
namespace で作成されたカタログを参照できます。
出力例
catalogsource.operators.coreos.com/cs-redhat-operator-index created
以下のコマンドを実行して、
CatalogSource
リソースが正常にインストールされたことを確認します。$ oc get catalogsource --all-namespaces
次のコマンドを使用して、カタログソースが実行されていることを確認します。
$ oc get pods -n openshift-marketplace
出力例
NAME READY STATUS RESTARTS AGE cs-redhat-operator-index-4227b 2/2 Running 0 2m5s
次の例のような
Subscription
CR を作成します。Subscription
CR の例apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: amq-broker namespace: openshift-operators spec: channel: 7.11.x name: amq-broker-rhel8 source: cs-redhat-operator-index sourceNamespace: openshift-marketplace
次のコマンドを実行して、Subscription CR 設定を適用します。
$ oc apply -f ./<my-subscription-cr.yaml> 1
- 1
- サブスクリプションの名前 (
my-subscription-cr.yaml
など) を指定します。
出力例
subscription.operators.coreos.com/amq-broker created