8.4. 非接続クラスターへの OLM ベースの Operators の追加
OLM ベースの Operators を Red Hat Enterprise Linux for Edge (RHEL for Edge) イメージに埋め込むことで、非接続状況でも使用できます。
8.4.1. 非接続クラスターへの OLM ベースの Operators の追加について
非接続クラスターにインストールされている Operator の場合、リモートソースには完全なインターネット接続が必要であるため、Operator Lifecycle Manager (OLM) はデフォルトで、リモートレジストリーでホストされているソースにアクセスできません。したがって、リモートレジストリーを高可用性のコンテナーレジストリーにミラーリングする必要があります。
非接続状況で OLM ベースの Operators を使用するには、次の手順が必要です。
- ミラーレジストリーのコンテナーイメージリストに OLM を含めます。
-
CRI-O 設定を直接更新して、ミラーレジストリーを使用するようにシステムを設定します。
ImageContentSourcePolicy
は MicroShift ではサポートされていません。 -
CatalogSource
オブジェクトをクラスターに追加して、OLM カタログ Operator がミラーレジストリー上のローカルカタログを使用できるようにします。 - MicroShift が非接続状態で実行できるようにインストールされていることを確認します。
- ネットワーク設定が非接続モードで実行されるように設定されていることを確認します。
非接続クラスターで OLM を有効にした後、インターネットに接続されたワークステーションを引き続き使用して、Operator の新しいバージョンがリリースされた際にローカルカタログソースを最新の状態に保つことができます。
8.4.1.1. ドライランの実行
実際にイメージをミラーリングせずに、oc-mirror を使用してドライランを実行できます。これにより、ミラーリングされるイメージのリストと、ミラーレジストリーからプルーニングされるイメージを確認できます。ドライランを使用すると、イメージセット設定のエラーを早期に検出したり、生成されたイメージリストを他のツールで使用してミラーリング操作を実行したりすることもできます。
前提条件
- 必要なコンテナーイメージを取得するためのインターネットへのアクセスがある。
-
OpenShift CLI (
oc
) がインストールされている。 -
oc-mirror
CLI プラグインをインストールしている。 - イメージセット設定ファイルを作成している。
手順
--dry-run
フラグを指定してoc mirror
コマンドを実行し、ドライランを実行します。$ oc mirror --config=./imageset-config.yaml \1 docker://registry.example:5000 \2 --dry-run 3
出力例
Checking push permissions for registry.example:5000 Creating directory: oc-mirror-workspace/src/publish Creating directory: oc-mirror-workspace/src/v2 Creating directory: oc-mirror-workspace/src/charts Creating directory: oc-mirror-workspace/src/release-signatures No metadata detected, creating new workspace wrote mirroring manifests to oc-mirror-workspace/operators.1658342351/manifests-redhat-operator-index ... info: Planning completed in 31.48s info: Dry run complete Writing image mapping to oc-mirror-workspace/mapping.txt
生成されたワークスペースディレクトリーに移動します。
$ cd oc-mirror-workspace/
生成された
mapping.txt
ファイルを確認します。このファイルには、ミラーリングされるすべてのイメージのリストが含まれています。
生成された
pruning-plan.json
ファイルを確認します。このファイルには、イメージセットの公開時にミラーレジストリーからプルーニングされるすべてのイメージのリストが含まれています。
注記pruning-plan.json
ファイルは、oc-mirror コマンドがミラーレジストリーを指し、プルーニングするイメージがある場合にのみ生成されます。
8.4.1.2. 非接続環境で RHEL for Edge で使用するカタログと Operator コンテナーイメージ参照を取得する
oc-mirror プラグインを使用してドライランを実行し、ミラーリングするイメージのリストを確認した後、すべてのコンテナーイメージ参照を取得し、Image Builder ブループリントに追加するために出力をフォーマットする必要があります。
独自の Operator 用に作成されたカタログの場合は、次の手順を使用せずに、Image Builder ブループリントのイメージ参照をフォーマットできます。
前提条件
- 使用する Operator のカタログインデックスがある。
-
jq
CLI ツールがインストールされている。 - Image Builder のブループリントファイルに精通している。
- Image Builder ブループリント TOML ファイルがある。
手順
カタログの
index.json
ファイルを解析して、Image Builder ブループリントに含める必要があるイメージ参照を取得します。フィルタリングされていないカタログを使用することも、ミラーリングできないイメージを除外することもできます。次のコマンドを実行して、フィルタリングされていないカタログの
index.json
ファイルを解析し、イメージ参照を取得します。jq -r --slurp '.[] | select(.relatedImages != null) | "[[containers]]\nsource = \"" + .relatedImages[].image + "\"\n"' ./oc-mirror-workspace/src/catalogs/registry.redhat.io/redhat/redhat-operator-index/v4.15/index/index.json
ミラーリングできないイメージを除外する場合は、次のコマンドを実行して、カタログの
index.json
ファイルをフィルタリングして解析します。$ jq -r --slurp '.[] | select(.relatedImages != null) | .relatedImages[] | select(.name | contains("ppc") or contains("s390x") | not) | "[[containers]]\\nsource = \\"" + .image + "\\"\\n"' ./oc-mirror-workspace/src/catalogs/registry.redhat.io/redhat/redhat-operator-index/v4.15/index/index.json
注記この手順では、AMQ Broker Operator を例として使用します。ユースケースでの必要性に応じて、
jq
コマンドに他の条件を追加して、さらにフィルタリングすることができます。イメージ参照出力の例
[[containers]] source = "registry.redhat.io/amq7/amq-broker-init-rhel8@sha256:0b2126cfb6054fdf428c1f43b69e36e93a09a49ce15350e9273c98cc08c6598b" [[containers]] source = "registry.redhat.io/amq7/amq-broker-init-rhel8@sha256:0dde839c2dce7cb684094bf26523c8e16677de03149a0fff468b8c3f106e1f4f" ... ... [[containers]] source = "registry.redhat.io/amq7/amq-broker-rhel8@sha256:e8fa2a00e576ecb95561ffbdbf87b1c82d479c8791ab2c6ce741dd0d0b496d15" [[containers]] source = "registry.redhat.io/amq7/amq-broker-rhel8@sha256:ff6fefad518a6c997d4c5a6e475ba89640260167f0bc27715daf3cc30116fad1" … EOF
重要ミラーリングされたユースケースと非接続ユースケースでは、カタログの
index.json
ファイルからフィルタリングされたすべてのソースがダイジェストであることを確認します。いずれかのソースがダイジェストではなくタグを使用している場合、Operator のインストールは失敗します。タグにはインターネット接続が必要です。
次のコマンドを実行して、
imageset-config.yaml
を表示し、CatalogSource
カスタムリソース (CR) のカタログイメージ参照を取得します。$ cat imageset-config.yaml
出力例
kind: ImageSetConfiguration apiVersion: mirror.openshift.io/v1alpha2 storageConfig: registry: imageURL: registry.example.com/microshift-mirror mirror: operators: - catalog: registry.redhat.io/redhat/redhat-operator-index:v4.15 1 packages: - name: amq-broker-rhel8 channels: - name: 7.11.x
- 1
- イメージダイジェストを取得するには、次の
jq
コマンドのmirror.catalog
カタログイメージ参照の値を使用します。この例では、<registry.redhat.io/redhat/redhat-operator-index:v4.15> になります。
次のコマンドを実行して、カタログインデックスイメージの SHA を取得します。
$ skopeo inspect docker://<registry.redhat.io/redhat/redhat-operator-index:v4.15> | jq `.Digest` 1
- 1
- イメージダイジェストを取得するには、
jq
コマンドのmirror.catalog
カタログイメージ参照の値を使用します。この例では、<registry.redhat.io/redhat/redhat-operator-index:v4.15> になります。
出力例
"sha256:7a76c0880a839035eb6e896d54ebd63668bb37b82040692141ba39ab4c539bc6"
Image Builder ブループリントファイルにイメージ参照を追加する準備をするには、次の例を使用して、カタログイメージ参照をフォーマットします。
[[containers]] source = "registry.redhat.io/redhat/redhat-operator-index@sha256:7a76c0880a839035eb6e896d54ebd63668bb37b82040692141ba39ab4c539bc6"
これまでのすべての手順からのイメージ参照を Image Builder ブループリントに追加します。
生成された Image Builder ブループリントのサンプルスニペット
name = "microshift_blueprint" description = "MicroShift 4.15.1 on x86_64 platform" version = "0.0.1" modules = [] groups = [] [[packages]] 1 name = "microshift" version = "4.15.1" ... ... [customizations.services] 2 enabled = ["microshift"] [customizations.firewall] ports = ["22:tcp", "80:tcp", "443:tcp", "5353:udp", "6443:tcp", "30000-32767:tcp", "30000-32767:udp"] ... ... [[containers]] 3 source = "quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:f41e79c17e8b41f1b0a5a32c3e2dd7cd15b8274554d3f1ba12b2598a347475f4" [[containers]] source = "quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:dbc65f1fba7d92b36cf7514cd130fe83a9bd211005ddb23a8dc479e0eea645fd" ... ... [[containers]] 4 source = "registry.redhat.io/redhat/redhat-operator-index@sha256:7a76c0880a839035eb6e896d54ebd63668bb37b82040692141ba39ab4c539bc6" ... ... [[containers]] source = "registry.redhat.io/amq7/amq-broker-init-rhel8@sha256:0dde839c2dce7cb684094bf26523c8e16677de03149a0fff468b8c3f106e1f4f" ... ... [[containers]] source = "registry.redhat.io/amq7/amq-broker-rhel8@sha256:e8fa2a00e576ecb95561ffbdbf87b1c82d479c8791ab2c6ce741dd0d0b496d15" [[containers]] source = "registry.redhat.io/amq7/amq-broker-rhel8@sha256:ff6fefad518a6c997d4c5a6e475ba89640260167f0bc27715daf3cc30116fad1" … EOF
8.4.1.3. 非接続デプロイメントの RHEL for Edge イメージにカタログと Operator を適用する
非接続環境用の RHEL for Edge イメージを作成し、非接続で使用するように MicroShift ネットワークを設定したら、namespace を設定し、Operator を実行するためのカタログと Operator カスタムリソース (CR) を作成できます。
前提条件
- RHEL for Edge イメージがある。
- ネットワークは非接続環境で使用するように設定されている。
- oc-mirror プラグインのドライラン手順が完了している。
手順
次の例のように、
CatalogSource
カスタムリソース (CR) を作成します。my-catalog-source-cr.yaml
ファイルの例apiVersion: operators.coreos.com/v1alpha1 kind: CatalogSource metadata: name: cs-redhat-operator-index namespace: openshift-marketplace 1 spec: image: registry.example.com/redhat/redhat-operator-index:v4.15 sourceType: grpc displayName: publisher: updateStrategy: registryPoll: interval: 60m
- 1
- グローバル namespace。
metadata.namespace
をopenshift-marketplace
に設定すると、カタログがすべての namespace で実行できるようになります。どの namespace のサブスクリプションでも、openshift-marketplace
namespace で作成されたカタログを参照できます。
注記openshift-marketplace
のデフォルトの Pod セキュリティーアドミッション定義はbaseline
であるため、その namespace で作成されたカタログソースカスタムリソース (CR) では、spec.grpcPodConfig.securityContextConfig
値を設定する必要はありません。使用する namespace と Operator に必要な場合は、legacy
またはrestricted
値を設定できます。次の例のように、カタログインデックスコミットの SHA をカタログソース (CR) に追加します。
namespace
spec.image
設定の例apiVersion: operators.coreos.com/v1alpha1 kind: CatalogSource metadata: name: cs-redhat-operator-index namespace: openshift-marketplace spec: image: registry.example.com/redhat/redhat-operator-index@sha256:7a76c0880a839035eb6e896d54ebd63668bb37b82040692141ba39ab4c539bc6 1 sourceType: grpc displayName: publisher: updateStrategy: registryPoll: interval: 60m
- 1
- イメージコミットの SHA。Image Builder ブループリントに追加したものと同じ SHA を使用します。
重要カタログ CR 内のタグの代わりに SHA を使用する必要があります。そうしないと、Pod の起動に失敗します。
次のコマンドを実行して、oc-mirror プラグインのドライラン results ディレクトリーから YAML ファイルをクラスターに適用します。
$ oc apply -f ./oc-mirror-workspace/results-1708508014/catalogSource-cs-redhat-operator-index.yaml
出力例
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 を作成します。my-subscription-cr.yaml
ファイルの例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
CR の名前を指定します。
出力例
subscription.operators.coreos.com/amq-broker created