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) プラグインがインストールされている。

手順

  1. 次のコマンドを実行して、フィルタリング可能な Red Hat 提供の Operator カタログのリストを取得します。

    $ oc mirror list operators --version 4.15 --catalogs
  2. 次のコマンドを実行して、Red Hat Operators カタログ内の Operators のリストを取得します。

    $ oc mirror list operators <--catalog=<catalog_source>> 1
    1
    registry.redhat.io/redhat/redhat-operator-index:v4.15quay.io/operatorhubio/catalog:latest などのカタログソースを指定します。
  3. Operator を選択します。この例では、amq-broker-rhel8 が選択されています。
  4. オプション: フィルタリングする Operator のチャネルとバージョンを検査するには、次のコマンドを入力します。

    1. 次のコマンドを実行して、チャネルのリストを取得します。

      $ oc mirror list operators --catalog=registry.redhat.io/redhat/redhat-operator-index:v4.15 --package=amq-broker-rhel8
    2. 次のコマンドを実行して、チャネル内のバージョンのリストを取得します。

      $ 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 プラグインを実行するたびに、同じストレージバックエンドを使用する必要があります。

前提条件

手順

  1. 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

    1
    platform フィールドと関連フィールドは MicroShift ではサポートされていないため、削除する必要があります。
    2
    イメージセットに含める追加のイメージを指定します。追加のイメージを指定する必要がない場合は、このフィールドを削除してください。
    3
    Helm は MicroShift ではサポートされていないため、削除する必要があります。
  2. 次の例のように、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> コマンドを実行すると、デフォルトチャネルを見つけることができます。
  3. 更新したファイルを保存します。

次のステップ

  • oc-mirror プラグインを使用して、イメージセットをターゲットミラーレジストリーに直接ミラーリングします。
  • CRI-O を設定します。
  • カタログソースをクラスターに適用します。
8.3.2.3.1. Image set configuration parameters

oc-mirror プラグインには、ミラーリングするイメージを定義するイメージセット設定ファイルが必要です。次の表に、ImageSetConfiguration リソースで使用可能なパラメーターを示します。

表8.2 ImageSetConfiguration パラメーター
パラメーター説明

apiVersion

ImageSetConfiguration コンテンツの API バージョン。

String。例: mirror.openshift.io/v1alpha2

mirror

イメージセットの設定。

オブジェクト

mirror.additionalImages

イメージセットの追加のイメージ設定。

オブジェクトの配列。以下に例を示します。

additionalImages:
  - name: registry.redhat.io/ubi8/ubi:latest

mirror.additionalImages.name

ミラーリングするイメージのタグまたはダイジェスト。

String。例: registry.redhat.io/ubi8/ubi:latest

mirror.blockedImages

ミラーリングからブロックするイメージの完全なタグ、ダイジェスト、またはパターン。

文字列の配列例: docker.io/library/alpine

mirror.operators

イメージセットの Operators 設定。

オブジェクトの配列。以下に例を示します。

operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.15
    packages:
      - name: elasticsearch-operator
        minVersion: '2.4.0'

mirror.operators.catalog

イメージセットに含める Operator カタログ。

文字列。たとえば、registry.redhat.io/redhat/redhat-operator-index:v4.15 です。

mirror.operators.full

true の場合、完全なカタログ、Operator パッケージ、または Operator チャネルをダウンロードします。

ブール値。デフォルト値は false です。

mirror.operators.packages

Operator パッケージ設定

オブジェクトの配列。以下に例を示します。

operators:
  - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.15
    packages:
      - name: elasticsearch-operator
        minVersion: '5.2.3-31'

mirror.operators.packages.name

イメージセットに含める Operator パッケージ名

String。例: elasticsearch-operator

mirror.operators.packages.channels

Operator パッケージのチャネル設定。

オブジェクト

mirror.operators.packages.channels.name

イメージセットに含める、パッケージ内で一意の Operator チャネル名。

文字列。たとえば、fast または stable-v4.15 です。

mirror.operators.packages.channels.maxVersion

Operator が存在するすべてのチャネルでミラーリングする最上位バージョンの Operator。詳細は、以下の注記を参照してください。

String。例: 5.2.3-31

mirror.operators.packages.channels.minBundle

含める最小バンドルの名前と、チャネルヘッドへの更新グラフ内のすべてのバンドル。名前付きバンドルにセマンティックバージョンメタデータがない場合にのみ、このフィールドを設定します。

String。例: bundleName

mirror.operators.packages.channels.minVersion

存在するすべてのチャネル間でミラーリングする Operator の最低バージョン。詳細は、以下の注記を参照してください。

String。例: 5.2.3-31

mirror.operators.packages.maxVersion

Operator が存在するすべてのチャネルでミラーリングする最上位バージョンの Operator。詳細は、以下の注記を参照してください。

String。例: 5.2.3-31

mirror.operators.packages.minVersion

存在するすべてのチャネル間でミラーリングする Operator の最低バージョン。詳細は、以下の注記を参照してください。

String。例: 5.2.3-31

mirror.operators.skipDependencies

true の場合、バンドルの依存関係は含まれません。

ブール値。デフォルト値は false です。

mirror.operators.targetCatalog

参照されるカタログをミラーリングするための代替名とオプションの namespace 階層。

String。例: my-namespace/my-operator-catalog

mirror.operators.targetName

参照されたカタログをミラーリングするための代替名。

targetName パラメーターは非推奨になりました。代わりに targetCatalog パラメーターを使用してください。

String。例: my-operator-catalog

mirror.operators.targetTag

targetName または targetCatalog に追加する代替タグ。

String。例: v1

storageConfig

イメージセットのバックエンド設定。

オブジェクト

storageConfig.local

イメージセットのローカルバックエンド設定。

オブジェクト

storageConfig.local.path

イメージセットのメタデータを含むディレクトリーのパス。

String。例: ./path/to/dir/

storageConfig.registry

イメージセットのレジストリーバックエンド設定。

オブジェクト

storageConfig.registry.imageURL

バックエンドレジストリー URI。オプションで、URI に namespace 参照を含めることができます。

String。例: quay.io/myuser/imageset:metadata

storageConfig.registry.skipTLS

オプションで、参照されるバックエンドレジストリーの TLS 検証をスキップします。

ブール値。デフォルト値は false です。

注記

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
    1
    作成したイメージセット設定ファイルを指定します。たとえば、imageset-config.yaml です。
    2
    イメージセットファイルをミラーリングするレジストリーを指定します。レジストリーは docker:// で始まる必要があります。ミラーレジストリーに最上位の namespace を指定する場合は、これ以降の実行でもこれと同じ namespace を使用する必要があります。

出力例

Rendering catalog image "registry.example.com/redhat/redhat-operator-index:v{ocp-version}" with file-based catalog

検証

  1. 生成された oc-mirror-workspace/ ディレクトリーに移動します。
  2. results ディレクトリーに移動します (例: results-1639608409/
  3. 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-* ディレクトリーにあります。

手順

  1. 次のコマンドを実行して、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

  2. 次のコマンドを実行して、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

  3. /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)
  4. 次のコマンドで 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 コンテナーのランタイム設定に、イメージ参照情報を追加している。

手順

  1. 次のコマンドを実行して、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.namespaceopenshift-marketplace に設定すると、カタログはすべての namespace 内のカタログを参照できるようになります。どの namespace のサブスクリプションでも、openshift-marketplace namespace で作成されたカタログを参照できます。

    出力例

    catalogsource.operators.coreos.com/cs-redhat-operator-index created

  2. 以下のコマンドを実行して、CatalogSource リソースが正常にインストールされたことを確認します。

    $ oc get catalogsource --all-namespaces
  3. 次のコマンドを使用して、カタログソースが実行されていることを確認します。

    $ oc get pods -n openshift-marketplace

    出力例

    NAME                             READY   STATUS    RESTARTS   AGE
    cs-redhat-operator-index-4227b   2/2     Running   0          2m5s

  4. 次の例のような 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

  5. 次のコマンドを実行して、Subscription CR 設定を適用します。

    $ oc apply -f ./<my-subscription-cr.yaml> 1
    1
    サブスクリプションの名前 (my-subscription-cr.yaml など) を指定します。

    出力例

    subscription.operators.coreos.com/amq-broker created

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.