4.7. カスタムカタログの管理
以下では、OpenShift Container Platform で Operator Lifecycle Manager (OLM) の Bundle Format またはレガシー Package Manifest Format のいずれかを使用してパッケージ化された Operator のカスタムパッケージを使用する方法について説明します。
4.7.1. Bundle Format を使用したカスタムカタログ リンクのコピーリンクがクリップボードにコピーされました!
4.7.1.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
-
opmCLI をインストールします。
4.7.1.2. インデックスイメージの作成 リンクのコピーリンクがクリップボードにコピーされました!
opm CLI を使用してインデックスイメージを作成できます。
前提条件
-
opmversion 1.12.3+ -
podmanversion 1.9.3+ Docker v2-2 をサポートするレジストリーにビルドされ、プッシュされるバンドルイメージ。
重要OpenShift Container Platform クラスターの内部レジストリーはターゲットレジストリーとして使用できません。これは、ミラーリングプロセスで必要となるタグを使わないプッシュをサポートしないためです。
手順
新しいインデックスを開始します。
$ opm index add \ --bundles <registry>/<namespace>/<bundle_image_name>:<tag> \1 --tag <registry>/<namespace>/<index_image_name>:<tag> \2 [--binary-image <registry_base_image>]3 インデックスイメージをレジストリーにプッシュします。
必要な場合は、ターゲットレジストリーで認証します。
$ podman login <registry>インデックスイメージをプッシュします。
$ podman push <registry>/<namespace>/test-catalog:latest
4.7.1.3. インデックスイメージからのカタログの作成 リンクのコピーリンクがクリップボードにコピーされました!
インデックスイメージから Operator カタログを作成し、これを Operator Lifecycle Manager (OLM) で使用するために OpenShift Container Platform クラスターに適用できます。
前提条件
- レジストリーにビルドされ、プッシュされるインデックスイメージ。
手順
インデックスイメージを参照する
CatalogSourceオブジェクトを作成します。仕様を以下のように変更し、これを
catalogSource.yamlファイルとして保存します。apiVersion: operators.coreos.com/v1alpha1 kind: CatalogSource metadata: name: my-operator-catalog namespace: openshift-marketplace1 spec: sourceType: grpc image: <registry>:<port>/<namespace>/redhat-operator-index:v4.62 displayName: My Operator Catalog publisher: <publisher_name>3 updateStrategy: registryPoll:4 interval: 30mこのファイルを使用して
CatalogSourceオブジェクトを作成します。$ oc apply -f catalogSource.yaml
以下のリソースが正常に作成されていることを確認します。
Pod を確認します。
$ oc get pods -n openshift-marketplace出力例
NAME READY STATUS RESTARTS AGE my-operator-catalog-6njx6 1/1 Running 0 28s marketplace-operator-d9f549946-96sgr 1/1 Running 0 26hカタログソースを確認します。
$ oc get catalogsource -n openshift-marketplace出力例
NAME DISPLAY TYPE PUBLISHER AGE my-operator-catalog My Operator Catalog grpc 5sパッケージマニフェストを確認します。
$ oc get packagemanifest -n openshift-marketplace出力例
NAME CATALOG AGE jaeger-product My Operator Catalog 93s
OpenShift Container Platform Web コンソールで、OperatorHub ページから Operator をインストールできるようになりました。
4.7.1.4. インデックスイメージの更新 リンクのコピーリンクがクリップボードにコピーされました!
カスタムインデックスイメージを参照するカタログソースを使用するように OperatorHub を設定した後に、クラスター管理者はバンドルイメージをインデックスイメージに追加して、クラスターで利用可能な Operator を最新の状態に維持することができます。
opm index add コマンドを使用して既存インデックスイメージを更新できます。
前提条件
-
opmversion 1.12.3+ -
podmanversion 1.9.3+ - レジストリーにビルドされ、プッシュされるインデックスイメージ。
- インデックスイメージを参照する既存のカタログソース。
手順
バンドルイメージを追加して、既存のインデックスを更新します。
$ opm index add \ --bundles <registry>/<namespace>/<new_bundle_image>@sha256:<digest> \1 --from-index <registry>/<namespace>/<existing_index_image>:<existing_tag> \2 --tag <registry>/<namespace>/<existing_index_image>:<updated_tag> \3 --pull-tool podman4 ここでは、以下のようになります。
<registry>-
quay.ioやmirror.example.comなどのレジストリーのホスト名を指定します。 <namespace>-
ocs-devやabcなど、レジストリーの namespace を指定します。 <new_bundle_image>-
ocs-operatorなど、レジストリーに追加する新しいバンドルイメージを指定します。 <digest>-
c7f11097a628f092d8bad148406aa0e0951094a03445fd4bc0775431ef683a41などのバンドルイメージの SHA イメージ ID またはダイジェストを指定します。 <existing_index_image>-
abc-redhat-operator-indexなど、以前にプッシュされたイメージを指定します。 <existing_tag>-
4.6など、以前にプッシュされたイメージタグを指定します。 <updated_tag>-
4.6.1など、更新されたインデックスイメージに適用するイメージタグを指定します。
コマンドの例
$ opm index add \ --bundles quay.io/ocs-dev/ocs-operator@sha256:c7f11097a628f092d8bad148406aa0e0951094a03445fd4bc0775431ef683a41 \ --from-index mirror.example.com/abc/abc-redhat-operator-index:4.6 \ --tag mirror.example.com/abc/abc-redhat-operator-index:4.6.1 \ --pull-tool podman更新されたインデックスイメージをプッシュします。
$ podman push <registry>/<namespace>/<existing_index_image>:<updated_tag>Operator Lifecycle Manager (OLM) がカタログソースで参照されるインデックスイメージを一定間隔で自動的にポーリングした後に、新規パッケージが正常に追加されたことを確認します。
$ oc get packagemanifests -n openshift-marketplace
4.7.1.5. インデックスイメージのプルーニング リンクのコピーリンクがクリップボードにコピーされました!
Operator Bundle Format に基づくインデックスイメージは、Operator カタログのコンテナー化されたスナップショットです。パッケージの指定された一覧以外のすべてのインデックスをプルーニングできます。これにより、必要な Operator のみが含まれるソースインデックスのコピーを作成できます。
前提条件
-
podmanversion 1.9.3+ -
grpcurl(サードパーティーのコマンドラインツール) -
opmバージョン 1.18.0+ Docker v2-2 をサポートするレジストリーへのアクセス
重要OpenShift Container Platform クラスターの内部レジストリーはターゲットレジストリーとして使用できません。これは、ミラーリングプロセスで必要となるタグを使わないプッシュをサポートしないためです。
手順
ターゲットレジストリーで認証します。
$ podman login <target_registry>プルーニングされたインデックスに追加するパッケージの一覧を判別します。
コンテナーでプルーニングするソースインデックスイメージを実行します。以下に例を示します。
$ podman run -p50051:50051 \ -it registry.redhat.io/redhat/redhat-operator-index:v4.6出力例
Trying to pull registry.redhat.io/redhat/redhat-operator-index:v4.6... Getting image source signatures Copying blob ae8a0c23f5b1 done ... INFO[0000] serving registry database=/database/index.db port=50051別のターミナルセッションで、
grpcurlコマンドを使用して、インデックスが提供するパッケージの一覧を取得します。$ grpcurl -plaintext localhost:50051 api.Registry/ListPackages > packages.outpackages.outファイルを検査し、プルーニングされたインデックスに保持したいパッケージ名をこの一覧から特定します。以下に例を示します。パッケージ一覧のスニペットの例
... { "name": "advanced-cluster-management" } ... { "name": "jaeger-product" } ... { { "name": "quay-operator" } ...-
podman runコマンドを実行したターミナルセッションで、Ctrl と C を押してコンテナープロセスを停止します。
以下のコマンドを実行して、指定したパッケージ以外のすべてのパッケージのソースインデックスをプルーニングします。
$ opm index prune \ -f registry.redhat.io/redhat/redhat-operator-index:v4.6 \1 -p advanced-cluster-management,jaeger-product,quay-operator \2 [-i registry.redhat.io/openshift4/ose-operator-registry:v4.6] \3 -t <target_registry>:<port>/<namespace>/redhat-operator-index:v4.64 以下のコマンドを実行して、新規インデックスイメージをターゲットレジストリーにプッシュします。
$ podman push <target_registry>:<port>/<namespace>/redhat-operator-index:v4.6ここで、
<namespace>はレジストリー上の既存の namespace になります。