拡張機能
Operator Lifecycle Manager (OLM) v1 を使用した、OpenShift Container Platform 拡張機能の操作方法。
概要
第1章 拡張機能の概要
拡張機能により、クラスター管理者は OpenShift Container Platform クラスター上のユーザーの機能を拡張できます。
Operator Lifecycle Manager (OLM) は、最初のリリースから OpenShift Container Platform 4 に含まれています。OpenShift Container Platform 4.18 には、一般提供 (GA) 機能として、次世代の OLM のコンポーネントが追加されています。これは、現在のフェーズでは OLM v1 と呼ばれています。この更新されたフレームワークは、OLM の以前のバージョンの一部であった概念の多くを進化させ、新しい機能を追加します。
1.1. 主な特徴
管理者は次の主要項目の詳細を確認できます。
- GitOps ワークフローをサポートする完全な宣言型モデル
OLM v1 は、次の 2 つの主要 API を通じて拡張機能の管理を簡素化します。
新しい
ClusterExtension
API は、ユーザー向け API を単一のオブジェクトに統合することで、registry+v1
バンドル形式を介した Operator などのインストール済み拡張機能の管理を効率化します。この API は、新しい Operator Controller コンポーネントによってclusterextension.olm.operatorframework.io
として提供されます。管理者と SRE は、この API を使用してプロセスを自動化し、GitOps の原則に基づき望ましい状態を定義できます。注記OLM v1 の以前のテクノロジープレビューフェーズでは、新しい
Operator
API が導入されました。この API は、OpenShift Container Platform 4.16 でClusterExtension
に名前が変更され、以下の改善が加えられました。- クラスターの機能を拡張する簡素化された機能をより正確に反映します。
- より柔軟なパッケージ形式をより良く表現します。
-
Cluster
という接頭辞により、ClusterExtension
オブジェクトがクラスタースコープであることが明示されます。これは、Operator が namespace スコープまたはクラスタースコープのいずれかになる可能性がある OLM (Classic) からの変更点です。
-
新しい catalogd コンポーネントによって提供される
Catalog
API は、OLM v1 の基盤として機能し、クラスター上のクライアント用にカタログを展開して、ユーザーが Kubernetes 拡張機能や Operator などのインストール可能なコンテンツを検出できるようにします。これにより、詳細、チャネル、更新エッジなど、利用可能なすべての Operator バンドルバージョンの可視性が向上します。
詳細は、Operator Controller と Catalogd を参照してください。
- 拡張更新の制御の改善
- カタログの内容に対する洞察が向上したため、管理者はインストールと更新のターゲットバージョンを指定できます。これにより、管理者は拡張機能の更新の対象バージョンをより細かく制御できるようになります。詳細は、クラスター拡張機能の更新 を参照してください。
- 柔軟な拡張機能パッケージ形式
管理者は、OLM (Classic) の使用時と同様に、ファイルベースのカタログを使用して、OLM ベースの Operator などの拡張機能をインストールおよび管理できます。
さらに、バンドルサイズは etcd 値のサイズ制限によって制限されなくなりました。詳細は、拡張機能のインストール を参照してください。
- 安全なカタログ通信
- OLM v1 は catalogd サーバー応答に HTTPS 暗号化を使用します。
1.2. 目的
Operator Lifecycle Manager (OLM) の使命は、Kubernetes クラスター上でクラスター拡張機能のライフサイクルを一元的かつ宣言的に管理することです。これは、基盤となるクラスターのライフサイクル全体を通じて、クラスターおよび PaaS (platform-as-a-service) 管理者によるクラスターへの機能拡張のインストール、実行、更新を簡単、安全、再現可能にすることを目的としています。
OpenShift Container Platform 4 で導入された OLM の初期バージョン (デフォルトで含まれています) は、クラスター機能拡張に対するこのような具体的なニーズを、独自の方法でサポートすることを重視していました。それが Operator です。Operator は 1 つ以上の Kubernetes コントローラーとして分類され、クラスターに追加機能を提供するための CustomResourceDefinition
(CRD) オブジェクトとして、1 つ以上の API 機能拡張とともに出荷されます。
多くのリリースにおいて実稼働クラスターで実行された後、次世代の OLM では単なる Operator ではないクラスター機能拡張のライフサイクルを包含することを目指しています。
第2章 アーキテクチャー
2.1. OLM v1 コンポーネントの概要
Operator Lifecycle Manager (OLM) v1 は、次のコンポーネントプロジェクトで構成されています。
- Operator Controller
- Operator Controller は OLM v1 の中心的なコンポーネントで、API を使用して Kubernetes を拡張します。ユーザーはこれを使用して、Operator や拡張機能をインストールし、そのライフサイクルを管理できます。カタログから情報を使用します。
- Catalogd
- Catalogd は、クラスター上のクライアントが使用する、コンテナーイメージにパッケージ化されて出荷されるファイルベースのカタログ (FBC) コンテンツを展開する Kubernetes 拡張機能です。OLM v1 マイクロサービスアーキテクチャーのコンポーネントである catalogd は、Kubernetes 拡張機能の作成者がパッケージ化した拡張機能のメタデータをホストします。これは、ユーザーがインストール可能なコンテンツを発見するのに役立ちます。
2.2. Operator Controller
Operator Controller は、Operator Lifecycle Manager (OLM) v1 の中心的なコンポーネントであり、他の OLM v1 コンポーネント (catalogd) を使用します。Operator Controller は API で Kubernetes を拡張し、これを通してユーザーは Operator や機能拡張をインストールできます。
2.2.1. ClusterExtension API
Operator Controller は、インストールされた拡張機能のインスタンスを表す単一のリソースである新しい ClusterExtension
API オブジェクトを提供します。これには、registry+v1
バンドル形式を介した Operator などが含まれます。この clusterextension.olm.operatorframework.io
API は、ユーザー向け API を 1 つのオブジェクトに統合することで、インストールされた拡張機能の管理を効率化します。
OLM v1 では、ClusterExtension
オブジェクトはクラスタースコープです。これは、関連する Subscription
および OperatorGroup
オブジェクトの設定に応じて、Operator が namespace スコープまたはクラスタースコープのいずれかになる可能性がある OLM (Classic) とは異なります。
以前の動作の詳細は、マルチテナンシーと Operator のコロケーション を参照してください。
ClusterExtension
オブジェクトの例
apiVersion: olm.operatorframework.io/v1 kind: ClusterExtension metadata: name: <extension_name> spec: namespace: <namespace_name> serviceAccount: name: <service_account_name> source: sourceType: Catalog catalog: packageName: <package_name> channels: - <channel> version: "<version>"
2.2.1.1. ターゲットバージョンを指定するカスタムリソース (CR) の例
Operator Lifecycle Manager (OLM) v1 では、クラスター管理者はカスタムリソース (CR) で Operator または拡張機能のターゲットバージョンを宣言的に設定できます。
次のフィールドのいずれかを指定して、ターゲットバージョンを定義できます。
- チャネル
- バージョン番号
- バージョン範囲
CR でチャネルを指定すると、OLM v1 は、指定されたチャネル内で解決できる最新バージョンの Operator または拡張機能をインストールします。指定されたチャネルに更新が公開されると、OLM v1 はそのチャネルから解決できる最新リリースに自動的に更新します。
チャネルを指定した CR の例
apiVersion: olm.operatorframework.io/v1
kind: ClusterExtension
metadata:
name: <clusterextension_name>
spec:
namespace: <installed_namespace>
serviceAccount:
name: <service_account_installer_name>
source:
sourceType: Catalog
catalog:
packageName: <package_name>
channels:
- latest 1
- 1
- オプション: 指定したチャネルから解決できる最新のリリースをインストールします。チャネルへの更新は自動的にインストールされます。
channels
パラメーターの値を配列として指定します。
CR で Operator または拡張機能のターゲットバージョンを指定すると、OLM v1 は指定されたバージョンをインストールします。CR でターゲットバージョンが指定されている場合、カタログに更新が公開されても OLM v1 はターゲットバージョンを変更しません。
クラスターにインストールされている Operator のバージョンを更新する必要がある場合は、Operator の CR を手動で編集する必要があります。Operator のターゲットバージョンを指定すると、Operator のバージョンが指定されたリリースに固定されます。
ターゲットバージョンを指定した CR の例
apiVersion: olm.operatorframework.io/v1
kind: ClusterExtension
metadata:
name: <clusterextension_name>
spec:
namespace: <installed_namespace>
serviceAccount:
name: <service_account_installer_name>
source:
sourceType: Catalog
catalog:
packageName: <package_name>
version: "1.11.1" 1
- 1
- オプション: ターゲットバージョンを指定します。インストールされている Operator または拡張機能のバージョンを更新する必要がある場合は、CR のこのフィールドを目的のターゲットバージョンに手動で更新する必要があります。
Operator または拡張機能の許容可能なバージョン範囲を定義する場合は、比較文字列を使用してバージョン範囲を指定できます。バージョン範囲を指定すると、OLM v1 は、Operator Controller で解決できる最新バージョンの Operator または拡張機能をインストールします。
バージョン範囲を指定した CR の例
apiVersion: olm.operatorframework.io/v1
kind: ClusterExtension
metadata:
name: <clusterextension_name>
spec:
namespace: <installed_namespace>
serviceAccount:
name: <service_account_installer_name>
source:
sourceType: Catalog
catalog:
packageName: <package_name>
version: ">1.11.1" 1
- 1
- オプション: 必要なバージョン範囲が、バージョン
1.11.1
より大きいことを指定します。詳細は、「バージョン範囲のサポート」を参照してください。
CR を作成または更新した後、次のコマンドを実行して設定ファイルを適用します。
コマンド構文
$ oc apply -f <extension_name>.yaml
2.2.2. クラスター拡張機能のオブジェクト所有権
Operator Lifecycle Manager (OLM) v1 では、Kubernetes オブジェクトを所有できるのは一度に 1 つの ClusterExtension
オブジェクトのみです。これにより、OpenShift Container Platform クラスター内のオブジェクトの管理が一貫し、同じオブジェクトを制御しようとする複数のクラスター拡張機能間の競合が防止されます。
2.2.2.1. 単独所有
OLM v1 は、各オブジェクトは所有者としてクラスター拡張機能を 1 つだけ持つことができる、というコア所有の原則を強制します。これにより、複数のクラスター拡張機能による管理の重複や競合が防止され、各オブジェクトが 1 つのバンドルにのみ一意に関連付けられることが保証されます。
単独所有の影響
CustomResourceDefinition
(CRD) オブジェクトを提供するバンドルは、一度だけインストールできます。バンドルは、
ClusterExtension
オブジェクトの一部である CRD を提供します。つまり、クラスターには 1 回限定でバンドルをインストールできます。各カスタムリソースは所有者として 1 つのクラスター拡張機能のみを持つことができるため、同じ CRD を提供する別のバンドルをインストールしようとすると失敗します。クラスター拡張機能はオブジェクトを共有できません。
OLM v1 の単独所有ポリシーは、クラスター拡張機能がオブジェクトの所有権を共有できないことを意味します。1 つのクラスター拡張機能が
Deployment
、CustomResourceDefinition
、Service
オブジェクトなどの特定のオブジェクトを管理する場合、別のクラスター拡張機能は同じオブジェクトの所有権を主張できません。そのような試みは、すべて OLM v1 によってブロックされます。
2.2.2.2. エラーメッセージ
複数のクラスター拡張機能が同じオブジェクトを管理しようとして競合が発生した場合、Operator Controller は次のような所有権の競合を示すエラーメッセージを返します。
エラーメッセージの例
CustomResourceDefinition 'logfilemetricexporters.logging.kubernetes.io' already exists in namespace 'kubernetes-logging' and cannot be managed by operator-controller
このエラーメッセージは、オブジェクトがすでに別のクラスター拡張機能によって管理されており、再割り当てまたは共有できないことを示します。
2.2.2.3. 留意事項
クラスターまたは拡張機能の管理者は、次の留意事項を確認する必要があります。
- バンドルの一意性
- 同じ CRD を提供する Operator バンドルが複数回インストールされていないことを確認します。これにより、所有権の競合によるインストール失敗の可能性を回避できます。
- オブジェクトの共有回避
- 類似のリソースと対話するために異なるクラスター拡張機能が必要な場合は、それらが別々のオブジェクトを管理していることを確認します。単独所有の強制により、クラスター拡張機能は同じオブジェクトを共同で管理できません。
2.3. Catalogd
Operator Lifecycle Manager (OLM) v1 は、catalogd コンポーネントとそのリソースを使用して、Operator カタログと機能拡張カタログを管理します。
2.3.1. OLM v1 のカタログについて
catalogd コンポーネントを使用して、Operator やコントローラーなどの Kubernetes 拡張機能のカタログをクエリーすることで、インストール可能なコンテンツを検出できます。catalogd は、クラスター上のクライアント用にカタログコンテンツを展開する Kubernetes 機能拡張であり、マイクロサービスの Operator Lifecycle Manager (OLM) v1 スイートの一部です。現在、catalogd は、コンテナーイメージとしてパッケージ化および配布されているカタログコンテンツを解凍します。
第3章 一般的な Operator Framework 用語
以下は、Operator Framework に関連する用語で、そこには Operator Lifecycle Manager (OLM) v1 も含まれています。
3.1. バンドル
Bundle Format では、バンドル は Operator CSV、マニフェスト、およびメタデータのコレクションです。さらに、それらはクラスターにインストールできる一意のバージョンの Operator を形成します。
3.2. バンドルイメージ
Bundle Format では、バンドルイメージ は Operator マニフェストからビルドされ、1 つのバンドルが含まれるコンテナーイメージです。バンドルイメージは、Quay.io または DockerHub などの Open Container Initiative (OCI) 仕様コンテナーレジストリーによって保存され、配布されます。
3.3. カタログソース
カタログソース は、OLM が Operator およびそれらの依存関係を検出し、インストールするためにクエリーできるメタデータのストアを表します。
3.4. チャネル
チャネル は Operator の更新ストリームを定義し、サブスクライバーの更新をロールアウトするために使用されます。ヘッドはそのチャネルの最新バージョンを参照します。たとえば stable
チャネルには、Operator のすべての安定したバージョンが最も古いものから最新のものへと編成されます。
Operator には複数のチャネルを含めることができ、特定のチャネルへのサブスクリプションのバインドはそのチャネル内の更新のみを検索します。
3.5. チャネルヘッド
チャネルヘッド は、特定のチャネル内の最新の既知の更新を指します。
3.6. クラスターサービスバージョン
クラスターサービスバージョン (CSV) は、クラスターでの Operator の実行に使用される Operator メタデータから作成される YAML マニフェストです。これは、ユーザーインターフェイスにロゴ、説明、およびバージョンなどの情報を設定するために使用される Operator コンテナーイメージに伴うメタデータです。
CSV は、Operator が必要とする RBAC ルールやそれが管理したり、依存したりするカスタムリソース (CR) などの Operator の実行に必要な技術情報の情報源でもあります。
3.7. 依存関係
Operator はクラスターに存在する別の Operator への 依存関係 を持つ場合があります。たとえば、Vault Operator にはそのデータ永続層について etcd Operator への依存関係があります。
OLM は、インストールフェーズで指定されたすべてのバージョンの Operator および CRD がクラスターにインストールされていることを確認して依存関係を解決します。この依存関係は、必要な CRD API を満たすカタログの Operator を検索し、インストールすることで解決され、パッケージまたはバンドルには関連しません。
3.8. 拡張機能
拡張機能により、クラスター管理者は OpenShift Container Platform クラスター上のユーザーの機能を拡張できます。拡張機能は Operator Lifecycle Manager (OLM) v1 によって管理されます。
ClusterExtension
API は、ユーザー向け API を単一のオブジェクトに統合することで、registry+v1
バンドル形式を使用した Operator を含むインストール済み拡張機能の管理を効率化します。管理者と SRE は、この API を使用してプロセスを自動化し、GitOps の原則に基づき望ましい状態を定義できます。
3.9. インデックスイメージ
Bundle Format で、インデックスイメージ は、すべてのバージョンの CSV および CRD を含む Operator バンドルに関する情報が含まれるデータベースのイメージ (データベーススナップショット) を指します。このインデックスは、クラスターで Operator の履歴をホストでき、opm
CLI ツールを使用して Operator を追加または削除することで維持されます。
3.10. インストール計画
インストール計画 は、CSV を自動的にインストールするか、アップグレードするために作成されるリソースの計算された一覧です。
3.11. マルチテナントへの対応
OpenShift Container Platform の テナント は、通常は namespace またはプロジェクトによって表される、一連のデプロイされたワークロードに対する共通のアクセスと権限を共有するユーザーまたはユーザーのグループです。テナントを使用して、異なるグループまたはチーム間に一定レベルの分離を提供できます。
クラスターが複数のユーザーまたはグループによって共有されている場合、マルチテナント クラスターと見なされます。
3.12. Operator
Operator は、Kubernetes アプリケーションをパッケージ化し、デプロイし、管理する方法です。Kubernetes アプリケーションは、Kubernetes にデプロイされ、Kubernetes API および kubectl
または oc
ツールを使用して管理されるアプリケーションです。
Operator Lifecycle Manager (OLM) v1 では、ClusterExtension
API により、registry+v1
バンドル形式を使用した Operator をを含むインストール済み拡張機能の管理が効率化されます。
3.13. Operator グループ
Operator グループ は、OperatorGroup
オブジェクトと同じ namespace にデプロイされたすべての Operator を、namespace のリストまたはクラスター全体でそれらの CR を監視できるように設定します。
3.14. Package
Bundle Format で、パッケージ は Operator のリリースされたすべての履歴をそれぞれのバージョンで囲むディレクトリーです。Operator のリリースされたバージョンは、CRD と共に CSV マニフェストに記述されます。
3.15. レジストリー
レジストリー は、Operator のバンドルイメージを保存するデータベースで、それぞれにすべてのチャネルの最新バージョンおよび過去のバージョンすべてが含まれます。
3.16. サブスクリプション
サブスクリプション は、パッケージのチャネルを追跡して CSV を最新の状態に保ちます。
3.17. 更新グラフ
更新グラフ は、他のパッケージ化されたソフトウェアの更新グラフと同様に、CSV の複数のバージョンを 1 つにまとめます。Operator を順番にインストールすることも、特定のバージョンを省略することもできます。更新グラフは、新しいバージョンが追加されている状態でヘッドでのみ拡張することが予想されます。
更新エッジ または 更新パス とも呼ばれます。
第4章 カタログ
4.1. ファイルベースのカタログ
OpenShift Container Platform の Operator Lifecycle Manager (OLM) v1 は、クラスター上のクラスター拡張機能 (Operator を含む) を検出および取得するために使用する ファイルベースのカタログ をサポートします。
4.1.1. 主な特徴
ファイルベースのカタログは、Operator Lifecycle Manager(OLM) のカタログ形式の最新の反復になります。この形式は、プレーンテキストベース (JSON または YAML) であり、以前の SQLite データベース形式の宣言的な設定の進化であり、完全な下位互換性があります。この形式の目標は、Operator のカタログ編集、設定可能性、および拡張性を有効にすることです。
- 編集
ファイルベースのカタログを使用すると、カタログの内容を操作するユーザーは、形式を直接変更し、変更が有効であることを確認できます。この形式はプレーンテキストの JSON または YAML であるため、カタログメンテナーは、一般的に知られている、サポート対象の JSON または YAML ツール (例:
jq
CLI) を使用して、手動でカタログメタデータを簡単に操作できます。この編集機能により、以下の機能とユーザー定義の拡張が有効になります。
- 既存のバンドルの新規チャネルへのプロモート
- パッケージのデフォルトチャネルの変更
- アップグレードパスを追加、更新、および削除するためのカスタムアルゴリズム
- コンポーザービリティー
ファイルベースのカタログは、任意のディレクトリー階層に保管され、カタログの作成が可能になります。たとえば、2 つのファイルベースのカタログディレクトリー (
catalogA
およびcatalogB
) を見てみましょう。カタログメンテナーは、新規のディレクトリーcatalogC
を作成してcatalogA
とcatalogB
をそのディレクトリーにコピーし、新しく結合カタログを作成できます。このコンポーザービリティーにより、カタログの分散化が可能になります。この形式により、Operator の作成者は Operator 固有のカタログを維持でき、メンテナーは個別の Operator カタログで構成されるカタログを簡単にビルドできます。ファイルベースのカタログは、他の複数のカタログを組み合わせたり、1 つのカタログのサブセットを抽出したり、またはこれらの両方を組み合わせたりすることで作成できます。
注記パッケージ内でパッケージおよびバンドルを重複できません。
opm validate
コマンドは、重複が見つかった場合はエラーを返します。Operator の作成者は Operator、その依存関係およびそのアップグレードの互換性を最も理解しているので、Operator 固有のカタログを独自のカタログに維持し、そのコンテンツを直接制御できます。ファイルベースのカタログの場合に、Operator の作成者はカタログでパッケージをビルドして維持するタスクを所有します。ただし、複合カタログメンテナーは、カタログ内のパッケージのキュレートおよびユーザーにカタログを公開するタスクのみを所有します。
- 拡張性
ファイルベースのカタログ仕様は、カタログの低レベル表現です。これは低レベルの形式で直接保守できますが、カタログメンテナーは、このレベルの上に任意の拡張をビルドして、独自のカスタムツールを使用して任意数の変更を加えることができます。
たとえば、
(mode=semver)
などの高レベルの API を、アップグレードパス用に低レベルのファイルベースのカタログ形式にツールで変換できます。または、カタログメンテナーは、特定の条件を満たすバンドルに新規プロパティーを追加して、すべてのバンドルメタデータをカスタマイズする必要がある場合があります。このような拡張性を使用すると、今後の OpenShift Container Platform リリース向けに、追加の正式なツールを下層の API 上で開発できますが、主な利点として、カタログメンテナーにもこの機能がある点が挙げられます。
4.1.2. ディレクトリー構造
ファイルベースのカタログは、ディレクトリーベースのファイルシステムから保存してロードできます。opm
CLI は、root ディレクトリーを元に、サブディレクトリーに再帰してカタログを読み込みます。CLI は、検出されるすべてのファイルの読み込みを試行し、エラーが発生した場合には失敗します。
.gitignore
ファイルとパターンと優先順位が同じ .indexignore
ファイルを使用して、カタログ以外のファイルを無視できます。
例: .indexignore
ファイル
# Ignore everything except non-object .json and .yaml files **/* !*.json !*.yaml **/objects/*.json **/objects/*.yaml
カタログメンテナーは、必要なレイアウトを柔軟に選択できますが、各パッケージのファイルベースのカタログ Blob は別々のサブディレクトリーに保管することを推奨します。個々のファイルは JSON または YAML のいずれかをしようしてください。カタログ内のすべてのファイルが同じ形式を使用する必要はありません。
推奨される基本構造
catalog ├── packageA │ └── index.yaml ├── packageB │ ├── .indexignore │ ├── index.yaml │ └── objects │ └── packageB.v0.1.0.clusterserviceversion.yaml └── packageC └── index.json └── deprecations.yaml
この推奨の構造には、ディレクトリー階層内の各サブディレクトリーは自己完結型のカタログであるという特性があるため、カタログの作成、検出、およびナビゲーションなどのファイルシステムの操作が簡素化されます。このカタログは、親カタログのルートディレクトリーにコピーして親カタログに追加することもできます。
4.1.3. スキーマ
ファイルベースのカタログは、任意のスキーマで拡張できる CUE 言語仕様 に基づく形式を使用します。以下の _Meta
CUE スキーマは、すべてのファイルベースのカタログ Blob が順守する必要のある形式を定義します。
_Meta
スキーマ
_Meta: { // schema is required and must be a non-empty string schema: string & !="" // package is optional, but if it's defined, it must be a non-empty string package?: string & !="" // properties is optional, but if it's defined, it must be a list of 0 or more properties properties?: [... #Property] } #Property: { // type is required type: string & !="" // value is required, and it must not be null value: !=null }
この仕様にリストされている CUE スキーマは網羅されていると見なされます。opm validate
コマンドには、CUE で簡潔に記述するのが困難または不可能な追加の検証が含まれます。
Operator Lifecycle Manager(OLM) カタログは、現時点で OLM の既存のパッケージおよびバンドルの概念に対応する 3 つのスキーマ (olm.package
、olm.channel
および olm.bundle
) を使用します。
カタログの各 Operator パッケージには、olm.package
Blob が 1 つ (少なくとも olm.channel
Blob 1 つ、および 1 つ以上の olm.bundle
Blob) が必要です。
olm.*
スキーマは OLM 定義スキーマ用に予約されています。カスタムスキーマには、所有しているドメインなど、一意の接頭辞を使用する必要があります。
4.1.3.1. olm.package スキーマ
olm.package
スキーマは Operator のパッケージレベルのメタデータを定義します。これには、名前、説明、デフォルトのチャネル、およびアイコンが含まれます。
例4.1 olm.package
スキーマ
#Package: { schema: "olm.package" // Package name name: string & !="" // A description of the package description?: string // The package's default channel defaultChannel: string & !="" // An optional icon icon?: { base64data: string mediatype: string } }
4.1.3.2. olm.channel スキーマ
olm.channel
スキーマは、パッケージ内のチャネル、チャネルのメンバーであるバンドルエントリー、およびそのバンドルのアップグレードパスを定義します。
バンドルエントリーが複数の olm.channel
Blob 内のエッジを表す場合、バンドルエントリーはチャネルごとに 1 つだけ指定できます。
エントリーの replaces
値が、このカタログにも別のカタログにも存在しない別のバンドル名を参照していても、有効とされます。ただし、他のすべてのチャネルの普遍条件に該当する必要があります (チャネルに複数のヘッドがない場合など)。
例4.2 olm.channel
スキーマ
#Channel: { schema: "olm.channel" package: string & !="" name: string & !="" entries: [...#ChannelEntry] } #ChannelEntry: { // name is required. It is the name of an `olm.bundle` that // is present in the channel. name: string & !="" // replaces is optional. It is the name of bundle that is replaced // by this entry. It does not have to be present in the entry list. replaces?: string & !="" // skips is optional. It is a list of bundle names that are skipped by // this entry. The skipped bundles do not have to be present in the // entry list. skips?: [...string & !=""] // skipRange is optional. It is the semver range of bundle versions // that are skipped by this entry. skipRange?: string & !="" }
skipRange
フィールドを使用すると、スキップされた Operator バージョンが更新グラフからプルーニングされ、ユーザーが Subscription
オブジェクトの spec.startingCSV
プロパティーを使用してそのバージョンをインストールできなくなります。
skipRange
フィールドと replaces
フィールドの両方を使用すると、以前にインストールしたバージョンをユーザーが将来インストールできるように維持しながら、Operator を段階的に更新できます。replaces
フィールドが当該 Operator バージョンの直前のバージョンを参照していることを確認してください。
4.1.3.3. olm.bundle スキーマ
例4.3 olm.bundle
スキーマ
#Bundle: { schema: "olm.bundle" package: string & !="" name: string & !="" image: string & !="" properties: [...#Property] relatedImages?: [...#RelatedImage] } #Property: { // type is required type: string & !="" // value is required, and it must not be null value: !=null } #RelatedImage: { // image is the image reference image: string & !="" // name is an optional descriptive name for an image that // helps identify its purpose in the context of the bundle name?: string & !="" }
4.1.3.4. olm.deprecations スキーマ
オプションの olm.deprecations
スキーマは、カタログ内のパッケージ、バンドル、チャネルの非推奨情報を定義します。Operator の作成者は、このスキーマを使用して、サポートステータスや推奨アップグレードパスなど、Operator に関する関連メッセージを、カタログから Operator を実行しているユーザーに提供できます。
このスキーマが定義されている場合、OpenShift Container Platform の Web コンソールで、OperatorHub のインストール前ページとインストール後ページの両方に、カスタムの非推奨メッセージを含め、Operator の影響を受ける要素に対する警告バッジが表示されます。
olm.deprecations
スキーマエントリーには、非推奨の範囲を示す次の reference
タイプが 1 つ以上含まれています。Operator がインストールされると、指定されたメッセージが、関連する Subscription
オブジェクトのステータス状況として表示されます。
型 | Scope | ステータス状況 |
---|---|---|
| パッケージ全体を表します。 |
|
| 1 つのチャンネルを表します。 |
|
| 1 つのバンドルバージョンを表します。 |
|
次の例で詳しく説明するように、各 reference
タイプには独自の要件があります。
例4.4 各 reference
タイプを使用した olm.deprecations
スキーマの例
schema: olm.deprecations package: my-operator 1 entries: - reference: schema: olm.package 2 message: | 3 The 'my-operator' package is end of life. Please use the 'my-operator-new' package for support. - reference: schema: olm.channel name: alpha 4 message: | The 'alpha' channel is no longer supported. Please switch to the 'stable' channel. - reference: schema: olm.bundle name: my-operator.v1.68.0 5 message: | my-operator.v1.68.0 is deprecated. Uninstall my-operator.v1.68.0 and install my-operator.v1.72.0 for support.
- 1
- 各非推奨スキーマには
package
値が必要であり、そのパッケージ参照はカタログ全体で一意である必要があります。関連するname
フィールドを含めることはできません。 - 2
olm.package
スキーマにname
フィールドを含めることはできません。このフィールドは、スキーマ内で前に定義したpackage
フィールドによって決定されるためです。- 3
- すべての
message
フィールドは、reference
タイプを問わず、長さが 0 以外である必要があり、不透明なテキスト Blob として表す必要があります。 - 4
olm.channel
スキーマのname
フィールドは必須です。- 5
olm.bundle
スキーマのname
フィールドは必須です。
非推奨機能では、パッケージ、チャネル、バンドルなど、重複する非推奨は考慮されません。
Operator の作成者は、olm.deprecations
スキーマエントリーを deprecations.yaml
ファイルとしてパッケージの index.yaml
ファイルと同じディレクトリーに保存できます。
非推奨を含むカタログのディレクトリー構造の例
my-catalog └── my-operator ├── index.yaml └── deprecations.yaml
4.1.4. プロパティー
プロパティーは、ファイルベースのカタログスキーマに追加できる任意のメタデータです。type
フィールドは、value
フィールドのセマンティックおよび構文上の意味を効果的に指定する文字列です。値には任意の JSON または YAML を使用できます。
OLM は、予約済みの olm.*
接頭辞をもう一度使用して、いくつかのプロパティータイプを定義します。
4.1.4.1. olm.package プロパティー
olm.package
プロパティーは、パッケージ名とバージョンを定義します。これはバンドルの必須プロパティーであり、これらのプロパティーが 1 つ必要です。packageName
フィールドはバンドルのファーストクラス package
フィールドと同じでなければならず、version
フィールドは有効なセマンティクスバージョンである必要があります。
例4.5 olm.package
プロパティー
#PropertyPackage: { type: "olm.package" value: { packageName: string & !="" version: string & !="" } }
4.1.4.2. olm.gvk プロパティー
olm.gvk
プロパティーは、このバンドルで提供される Kubernetes API の group/version/kind(GVK) を定義します。このプロパティーは、OLM が使用して、必須の API と同じ GVK をリストする他のバンドルの依存関係として、このプロパティーでバンドルを解決します。GVK は Kubernetes GVK の検証に準拠する必要があります。
例4.6 olm.gvk
プロパティー
#PropertyGVK: { type: "olm.gvk" value: { group: string & !="" version: string & !="" kind: string & !="" } }
4.1.4.3. olm.package.required
olm.package.required
プロパティーは、このバンドルが必要な別のパッケージのパッケージ名とバージョン範囲を定義します。バンドルにリストされている必要なパッケージプロパティーごとに、OLM は、リストされているパッケージのクラスターに必要なバージョン範囲で Operator がインストールされていることを確認します。versionRange
フィールドは有効なセマンティクスバージョン (semver) の範囲である必要があります。
例4.7 olm.package.required
プロパティー
#PropertyPackageRequired: { type: "olm.package.required" value: { packageName: string & !="" versionRange: string & !="" } }
4.1.4.4. olm.gvk.required
olm.gvk.required
プロパティーは、このバンドルが必要とする Kubernetes API の group/version/kind(GVK) を定義します。バンドルにリストされている必要な GVK プロパティーごとに、OLM は、提供する Operator がクラスターにインストールされていることを確認します。GVK は Kubernetes GVK の検証に準拠する必要があります。
例4.8 olm.gvk.required
プロパティー
#PropertyGVKRequired: { type: "olm.gvk.required" value: { group: string & !="" version: string & !="" kind: string & !="" } }
4.1.5. カタログの例
ファイルベースのカタログを使用すると、カタログメンテナーは Operator のキュレーションおよび互換性に集中できます。Operator の作成者は Operator 用に Operator 固有のカタログをすでに生成しているので、カタログメンテナーは、各 Operator カタログをカタログのルートディレクトリーのサブディレクトリーにレンダリングしてビルドできます。
ファイルベースのカタログをビルドする方法は多数あります。以下の手順は、単純なアプローチの概要を示しています。
カタログの設定ファイルを 1 つ維持し、カタログ内に Operator ごとにイメージの参照を含めます。
カタログ設定ファイルのサンプル
name: community-operators repo: quay.io/community-operators/catalog tag: latest references: - name: etcd-operator image: quay.io/etcd-operator/index@sha256:5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 - name: prometheus-operator image: quay.io/prometheus-operator/index@sha256:e258d248fda94c63753607f7c4494ee0fcbe92f1a76bfdac795c9d84101eb317
設定ファイルを解析し、その参照から新規カタログを作成するスクリプトを実行します。
スクリプトの例
name=$(yq eval '.name' catalog.yaml) mkdir "$name" yq eval '.name + "/" + .references[].name' catalog.yaml | xargs mkdir for l in $(yq e '.name as $catalog | .references[] | .image + "|" + $catalog + "/" + .name + "/index.yaml"' catalog.yaml); do image=$(echo $l | cut -d'|' -f1) file=$(echo $l | cut -d'|' -f2) opm render "$image" > "$file" done opm generate dockerfile "$name" indexImage=$(yq eval '.repo + ":" + .tag' catalog.yaml) docker build -t "$indexImage" -f "$name.Dockerfile" . docker push "$indexImage"
4.1.6. ガイドライン
ファイルベースのカタログを維持する場合には、以下のガイドラインを考慮してください。
4.1.6.1. イミュータブルなバンドル
Operator Lifecycle Manager(OLM) に関する一般的なアドバイスとして、バンドルイメージとそのメタデータをイミュータブルとして処理する必要がある点があります。
破損したバンドルがカタログにプッシュされている場合には、少なくとも 1 人のユーザーがそのバンドルにアップグレードしたと想定する必要があります。このような想定に基づいて、破損したバンドルをインストールしたユーザーがアップグレードを確実に受け取れるように、破損したバンドルのアップグレードパスを使用して別のバンドルをリリースする必要があります。OLM は、カタログでバンドルの内容が更新された場合に、インストールされたバンドルは再インストールされません。
ただし、カタログメタデータの変更が推奨される場合があります。
-
チャネルプロモーション: バンドルをすでにリリースし、後で別のチャネルに追加することにした場合は、バンドルのエントリーを別の
olm.channel
Blob に追加できます。 -
新規アップグレードパス:
1.2.z
バンドルバージョンを新たにリリースしたが (例:1.2.4
)、1.3.0
がすでにリリースされている場合は、1.2.4
をスキップするように1.3.0
のカタログメタデータを更新できます。
4.1.6.2. ソース制御
カタログメタデータはソースコントロールに保存され、信頼できる情報源として処理される必要があります。以下の手順で、カタログイメージを更新する必要があります。
- ソース制御されたカタログディレクトリーを新規コミットを使用して更新します。
-
カタログイメージをビルドし、プッシュします。ユーザーがカタログが利用可能になり次第更新を受信できるように、一貫性のあるタグ付け (
:latest
or:<target_cluster_version>
) を使用します。
4.1.7. CLI の使用
opm
CLI を使用してファイルベースのカタログを作成する手順の詳細は、カスタムカタログの管理 を参照してください。
ファイルベースのカタログの管理に関連する opm
CLI コマンドの参考情報は、CLI ツール を参照してください。
4.1.8. 自動化
Operator の作成者およびカタログメンテナーは、CI/CD ワークフローを使用してカタログのメンテナンスを自動化することが推奨されます。カタログメンテナーは、GitOps 自動化をビルドして以下のタスクを実行し、これをさらに向上させることができます。
- パッケージのイメージ参照の更新など、プル要求 (PR) の作成者が要求された変更を実行できることを確認します。
-
カタログの更新で
opm validate
コマンドが指定されていることを確認します。 - 更新されたバンドルまたはカタログイメージの参照が存在し、カタログイメージがクラスターで正常に実行され、そのパッケージの Operator が正常にインストールされることを確認します。
- 以前のチェックに合格した PR を自動的にマージします。
- カタログイメージを自動的にもう一度ビルドして公開します。
4.2. Red Hat が提供するカタログ
Red Hat は、デフォルトで OpenShift Container Platform に含まれる複数の Operator カタログを提供します。
4.2.1. Red Hat が提供する Operator カタログについて
Red Hat が提供するカタログソースは、デフォルトで openshift-marketplace
namespace にインストールされます。これにより、すべての namespace でクラスター全体でカタログを利用できるようになります。
以下の Operator カタログは Red Hat によって提供されます。
カタログ | インデックスイメージ | 説明 |
---|---|---|
|
| Red Hat によってパッケージ化され、出荷される Red Hat 製品。Red Hat によってサポートされます。 |
|
| 大手独立系ソフトウェアベンダー (ISV) の製品。Red Hat は ISV とのパートナーシップにより、パッケージ化および出荷を行います。ISV によってサポートされます。 |
|
| Red Hat Marketplace から購入できる認定ソフトウェア。 |
|
| redhat-openshift-ecosystem/community-operators-prod/operators GitHub リポジトリーで、関連する担当者によって保守されているソフトウェア。正式なサポートはありません。 |
クラスターのアップグレード時に、Red Hat が提供するデフォルトのカタログソースのインデックスイメージのタグは、Operator Lifecycle Manager (OLM) が最新版のカタログをプルするように、Cluster Version Operator (CVO) により自動更新されます。たとえば、OpenShift Container Platform 4.8 から 4.9 にアップグレードする場合には、redhat-operators
カタログの CatalogSource
オブジェクトの spec.image
フィールドは、以下から更新されます。
registry.redhat.io/redhat/redhat-operator-index:v4.8
更新後は次のようになります。
registry.redhat.io/redhat/redhat-operator-index:v4.9
4.3. カタログの管理
クラスター管理者は、カタログ、つまり Operator と Kubernetes 拡張機能の厳選されたコレクションをクラスターに追加できます。Operator の作成者は、自社の製品をこれらのカタログに公開します。クラスターにカタログを追加すると、カタログに公開されている Operator と拡張機能のバージョン、パッチ、無線更新にアクセスできるようになります。
カスタムリソース (CR) を使用して、CLI からカタログと拡張機能を宣言的に管理できます。
ファイルベースのカタログは、Operator Lifecycle Manager(OLM) のカタログ形式の最新の反復になります。この形式は、プレーンテキストベース (JSON または YAML) であり、以前の SQLite データベース形式の宣言的な設定の進化であり、完全な下位互換性があります。
Kubernetes は定期的に特定の API を非推奨とし、後続のリリースで削除します。その結果、Operator は API を削除した Kubernetes バージョンを使用する OpenShift Container Platform のバージョン以降、削除された API を使用できなくなります。
クラスターがカスタムカタログを使用している場合に、Operator の作成者がプロジェクトを更新してワークロードの問題や、互換性のないアップグレードを回避できるようにする方法は Operator の互換性の OpenShift Container Platform バージョンへの制御 を参照してください。
4.3.1. OLM v1 のカタログについて
catalogd コンポーネントを使用して、Operator やコントローラーなどの Kubernetes 拡張機能のカタログをクエリーすることで、インストール可能なコンテンツを検出できます。catalogd は、クラスター上のクライアント用にカタログコンテンツを展開する Kubernetes 機能拡張であり、マイクロサービスの Operator Lifecycle Manager (OLM) v1 スイートの一部です。現在、catalogd は、コンテナーイメージとしてパッケージ化および配布されているカタログコンテンツを解凍します。
関連情報
4.3.2. OLM v1 で Red Hat が提供する Operator カタログ
Operator Lifecycle Manager (OLM) v1 には、デフォルトでクラスター上に次の Red Hat 提供の Operator カタログが含まれています。クラスターにカタログを追加する場合は、カタログのカスタムリソース (CR) を作成し、クラスターに適用します。次のカスタムリソース (CR) の例は、クラスターにインストールされているデフォルトのカタログを示しています。
Red Hat Operator カタログ
apiVersion: olm.operatorframework.io/v1
kind: ClusterCatalog
metadata:
name: openshift-redhat-operators
spec:
priority: -100
source:
image:
pollIntervalMinutes: <poll_interval_duration> 1
ref: registry.redhat.io/redhat/redhat-operator-index:v4.18
type: Image
- 1
- 新しいイメージダイジェストを確認するためにリモートレジストリーでポーリングする間隔を分単位で指定します。ポーリングを無効にする場合は、フィールドを設定しないでください。
Certified Operators カタログ
apiVersion: olm.operatorframework.io/v1 kind: ClusterCatalog metadata: name: openshift-certified-operators spec: priority: -200 source: type: image image: pollIntervalMinutes: 10 ref: registry.redhat.io/redhat/certified-operator-index:v4.18 type: Image
Red Hat Marketplace カタログ
apiVersion: olm.operatorframework.io/v1 kind: ClusterCatalog metadata: name: openshift-redhat-marketplace spec: priority: -300 source: image: pollIntervalMinutes: 10 ref: registry.redhat.io/redhat/redhat-marketplace-index:v4.18 type: Image
Community Operators カタログ
apiVersion: olm.operatorframework.io/v1 kind: ClusterCatalog metadata: name: openshift-community-operators spec: priority: -400 source: image: pollIntervalMinutes: 10 ref: registry.redhat.io/redhat/community-operator-index:v4.18 type: Image
次のコマンドは、クラスターにカタログを追加します。
コマンド構文
$ oc apply -f <catalog_name>.yaml 1
- 1
my-catalog.yaml
などのカタログ CR を指定します。
4.3.3. クラスターへのカタログの追加
Operator Lifecycle Manager (OLM) v1 を使用するためにクラスターにカタログを追加するには、ClusterCatalog
カスタムリソース (CR) を作成し、それをクラスターに適用します。
手順
次の例のようなカタログカスタムリソース (CR) を作成します。
my-redhat-operators.yaml
ファイルの例apiVersion: olm.operatorframework.io/v1 kind: ClusterCatalog metadata: name: my-redhat-operators 1 spec: priority: 1000 2 source: image: pollIntervalMinutes: 10 3 ref: registry.redhat.io/redhat/community-operator-index:v4.18 4 type: Image
- 1
- カタログは、クラスターに適用されると、
metadata.name
フィールドの値で自動的にラベル付けされます。ラベルとカタログの選択の詳細は、「カタログコンテンツの解決」を参照してください。 - 2
- オプション: クラスター上の他のカタログに対するカタログの優先度を指定します。詳細は、「優先度によるカタログの選択」を参照してください。
- 3
- 新しいイメージダイジェストを確認するためにリモートレジストリーでポーリングする間隔を分単位で指定します。ポーリングを無効にする場合は、フィールドを設定しないでください。
- 4
spec.source.image.ref
フィールドにカタログのイメージを指定します。
次のコマンドを実行して、カタログをクラスターに追加します。
$ oc apply -f my-redhat-operators.yaml
出力例
clustercatalog.olm.operatorframework.io/my-redhat-operators created
検証
次のコマンドを実行して、カタログのステータスを確認します。
次のコマンドを実行して、カタログが利用可能かどうかを確認します。
$ oc get clustercatalog
出力例
NAME LASTUNPACKED SERVING AGE my-redhat-operators 55s True 64s openshift-certified-operators 83m True 84m openshift-community-operators 43m True 84m openshift-redhat-marketplace 83m True 84m openshift-redhat-operators 54m True 84m
次のコマンドを実行して、カタログのステータスを確認します。
$ oc describe clustercatalog my-redhat-operators
出力例
Name: my-redhat-operators Namespace: Labels: olm.operatorframework.io/metadata.name=my-redhat-operators Annotations: <none> API Version: olm.operatorframework.io/v1 Kind: ClusterCatalog Metadata: Creation Timestamp: 2025-02-18T20:28:50Z Finalizers: olm.operatorframework.io/delete-server-cache Generation: 1 Resource Version: 50248 UID: 86adf94f-d2a8-4e70-895b-31139f2eeab7 Spec: Availability Mode: Available Priority: 1000 Source: Image: Poll Interval Minutes: 10 Ref: registry.redhat.io/redhat/community-operator-index:v4.18 Type: Image Status: 1 Conditions: Last Transition Time: 2025-02-18T20:29:00Z Message: Successfully unpacked and stored content from resolved source Observed Generation: 1 Reason: Succeeded 2 Status: True Type: Progressing Last Transition Time: 2025-02-18T20:29:00Z Message: Serving desired content from resolved source Observed Generation: 1 Reason: Available Status: True Type: Serving Last Unpacked: 2025-02-18T20:28:59Z Resolved Source: Image: Ref: registry.redhat.io/redhat/community-operator-index@sha256:11627ea6fdd06b8092df815076e03cae9b7cede8b353c0b461328842d02896c5 3 Type: Image Urls: Base: https://catalogd-service.openshift-catalogd.svc/catalogs/my-redhat-operators Events: <none>
4.3.4. カタログの削除
カタログを削除するには、そのカスタムリソース (CR) を削除します。
前提条件
- カタログがインストールされています。
手順
次のコマンドを実行してカタログを削除します。
$ oc delete clustercatalog <catalog_name>
出力例
clustercatalog.olm.operatorframework.io "my-redhat-operators" deleted
検証
次のコマンドを実行して、カタログが削除されたことを確認します。
$ oc get clustercatalog
4.3.5. デフォルトのカタログの無効化
OpenShift Container Platform にデフォルトで含まれている Red Hat 提供のカタログを無効にできます。
手順
次のコマンドを実行して、デフォルトのカタログを無効にします。
$ oc patch clustercatalog openshift-certified-operators -p \ '{"spec": {"availabilityMode": "Unavailable"}}' --type=merge
出力例
clustercatalog.olm.operatorframework.io/openshift-certified-operators patched
検証
次のコマンドを実行して、カタログが無効になっていることを確認します。
$ oc get clustercatalog openshift-certified-operators
出力例
NAME LASTUNPACKED SERVING AGE openshift-certified-operators False 6h54m
4.4. カタログコンテンツの解決
カスタムリソース (CR) でインストールするクラスター拡張機能を指定すると、Operator Lifecycle Manager (OLM) v1 がカタログの選択を使用して、インストールするコンテンツを解決します。
次の操作を実行すると、カタログコンテンツの選択を制御できます。
- カタログを選択するためのラベルを指定する。
- 一致式を使用して、すべてのカタログに対して複雑なフィルタリングを実行する。
- カタログの優先度を設定する。
カタログの選択基準を指定しなかった場合、Operator Lifecycle Manager (OLM) v1 により、要求されるパッケージを提供するクラスター上の利用可能なカタログから拡張機能が選択されます。
解決中、デフォルトでは、非推奨ではないバンドルが非推奨のバンドルよりも優先されます。
第5章 名前によるカタログ選択
カタログがクラスターに追加されると、カタログカスタムリソース (CR) の metadata.name
フィールドの値を使用してラベルが作成されます。拡張機能の CR で、spec.source.catalog.selector.matchLabels
フィールドを使用してカタログ名を指定できます。matchLabels
フィールドの値では、次の形式を使用します。
metadata.name
フィールドから導出されたラベルの例
apiVersion: olm.operatorframework.io/v1
kind: ClusterExtension
metadata:
name: <example_extension>
labels:
olm.operatorframework.io/metadata.name: <example_extension> 1
...
- 1
metadata.name
フィールドから導出された、カタログが適用されると自動的に追加されるラベル。
次の例では、openshift-redhat-operators
ラベルを持つカタログから <example_extension>-operator
パッケージを解決します。
拡張機能 CR の例
apiVersion: olm.operatorframework.io/v1 kind: ClusterExtension metadata: name: <example_extension> spec: namespace: <example_namespace> serviceAccount: name: <example_extension>-installer source: sourceType: Catalog catalog: packageName: <example_extension>-operator selector: matchLabels: olm.operatorframework.io/metadata.name: openshift-redhat-operators
第6章 ラベルまたは式によるカタログの選択
クラスターカタログのカスタムリソース (CR) 内のラベルを使用すると、カタログにメタデータを追加できます。その後、割り当てられたラベルを指定するか、クラスター拡張機能の CR で式を使用して、カタログ選択をフィルタリングできます。
次のクラスターカタログ CR では、値が true
の example.com/support
ラベルを catalog-a
クラスターカタログに追加します。
ラベルを使用したクラスターカタログ CR の例
apiVersion: olm.operatorframework.io/v1 kind: ClusterCatalog metadata: name: catalog-a labels: example.com/support: "true" spec: source: type: Image image: ref: quay.io/example/content-management-a:latest
次のクラスター拡張機能 CR では、matchLabels
セレクターを使用して、example.com/support
ラベルと true
の値を持つカタログを選択します。
matchLabels
セレクターを使用したクラスター拡張機能 CR の例
apiVersion: olm.operatorframework.io/v1 kind: ClusterExtension metadata: name: <example_extension> spec: namespace: <example_namespace> serviceAccount: name: <example_extension>-installer source: sourceType: Catalog catalog: packageName: <example_extension>-operator selector: matchLabels: example.com/support: "true"
matchExpressions
フィールドを使用すると、ラベルに対してより複雑なフィルタリングを実行できます。次のクラスター拡張機能 CR では、example.com/support
ラベルと production
または supported
という値を持つカタログを選択します。
matchExpression
セレクターを使用したクラスター拡張機能 CR の例
apiVersion: olm.operatorframework.io/v1 kind: ClusterExtension metadata: name: <example_extension> spec: namespace: <example_namespace> serviceAccount: name: <example_extension>-installer source: sourceType: Catalog catalog: packageName: <example_extension>-operator selector: matchExpressions: - key: example.com/support operator: In values: - "production" - "supported"
matchLabels
フィールドと matchExpressions
フィールドの両方を使用する場合、カタログが選択されるには、指定されたすべての条件を満たしている必要があります。
第7章 ラベルまたは式によるカタログの除外
NotIn
または DoesNotExist
演算子を使用してメタデータに一致式を使用することで、カタログを除外できます。
以下の CR では、example.com/testing
ラベルを unwanted-catalog-1
および unwanted-catalog-2
クラスターカタログに追加します。
クラスターカタログ CR の例
apiVersion: olm.operatorframework.io/v1 kind: ClusterCatalog metadata: name: unwanted-catalog-1 labels: example.com/testing: "true" spec: source: type: Image image: ref: quay.io/example/content-management-a:latest
クラスターカタログ CR の例
apiVersion: olm.operatorframework.io/v1 kind: ClusterCatalog metadata: name: unwanted-catalog-2 labels: example.com/testing: "true" spec: source: type: Image image: ref: quay.io/example/content-management-b:latest
次のクラスター拡張機能 CR では、unwanted-catalog-1
カタログからの選択を除外します。
特定のカタログを除外するクラスター拡張機能 CR の例
apiVersion: olm.operatorframework.io/v1 kind: ClusterExtension metadata: name: <example_extension> spec: namespace: <example_namespace> serviceAccount: name: <example_extension>-installer source: sourceType: Catalog catalog: packageName: <example_extension>-operator selector: matchExpressions: - key: olm.operatorframework.io/metadata.name operator: NotIn values: - unwanted-catalog-1
次のクラスター拡張機能 CR では、example.com/testing
ラベルを持たないカタログから選択します。その結果、unwanted-catalog-1
と unwanted-catalog-2
の両方がカタログ選択から除外されます。
特定のラベルを持つカタログを除外するクラスター拡張機能 CR の例
apiVersion: olm.operatorframework.io/v1 kind: ClusterExtension metadata: name: <example_extension> spec: namespace: <example_namespace> serviceAccount: name: <example_extension>-installer source: sourceType: Catalog catalog: packageName: <example_extension>-operator selector: matchExpressions: - key: example.com/testing operator: DoesNotExist
第8章 優先度によるカタログ選択
複数のカタログが同じパッケージを提供する場合、各カタログのカスタムリソース (CR) で優先度を指定することにより、あいまいさを解決できます。指定されていない場合、カタログのデフォルトの優先度値は 0
になります。優先度は、任意の正または負の 32 ビット整数にすることができます。
- バンドルの解決中、優先度値の高いカタログが優先度値の低いカタログよりも選択されます。
- 非推奨ではないバンドルが非推奨のバンドルよりも優先されます。
- カタログ内に同じ優先度のバンドルが複数存在し、カタログの選択があいまいな場合は、エラーが出力されます。
優先度の高いクラスターカタログ CR の例
apiVersion: olm.operatorframework.io/v1 kind: ClusterCatalog metadata: name: high-priority-catalog spec: priority: 1000 source: type: Image image: ref: quay.io/example/higher-priority-catalog:latest
優先度の低いクラスターカタログ CR の例
apiVersion: olm.operatorframework.io/v1 kind: ClusterCatalog metadata: name: lower-priority-catalog spec: priority: 10 source: type: Image image: ref: quay.io/example/lower-priority-catalog:latest
第9章 カタログ選択エラーのトラブルシューティング
あいまいさのため、またはカタログが選択されていないためにバンドル解決が失敗した場合は、クラスター拡張機能の status.conditions
フィールドにエラーメッセージが出力されます。
カタログ選択エラーのトラブルシューティングを行うには、次の操作を実行します。
- ラベルまたは式を使用して選択基準を絞り込みます。
- カタログの優先度を調整します。
- パッケージ名とバージョン要件に一致するバンドルが 1 つだけであることを確認します。
9.1. カタログの作成
カタログ管理者は、OpenShift Container Platform 上の Operator Lifecycle Manager (OLM) v1 で使用するために、ファイルベースのカタログ形式で新しいカタログを作成できます。
9.1.1. ファイルベースのカタログイメージの作成
opm
CLI を使用して、非推奨の SQLite データベース形式を置き換えるプレーンテキストの ファイルベースのカタログ 形式 (JSON または YAML) を使用するカタログイメージを作成できます。
前提条件
-
opm
CLI がインストールされている。 -
podman
バージョン 1.9.3 以降がある。 - バンドルイメージがビルドされ、Docker v2-2 をサポートするレジストリーにプッシュされている。
手順
カタログを初期化します。
次のコマンドを実行して、カタログ用のディレクトリーを作成します。
$ mkdir <catalog_dir>
opm generate dockerfile
コマンドを実行して、カタログイメージを構築できる Dockerfile を生成します。$ opm generate dockerfile <catalog_dir> \ -i registry.redhat.io/openshift4/ose-operator-registry-rhel9:v4.18 1
- 1
-i
フラグを使用して公式の Red Hat ベースイメージを指定します。それ以外の場合、Dockerfile はデフォルトのアップストリームイメージを使用します。
Dockerfile は、直前の手順で作成したカタログディレクトリーと同じ親ディレクトリーに存在する必要があります。
ディレクトリー構造の例
. 1 ├── <catalog_dir> 2 └── <catalog_dir>.Dockerfile 3
opm init
コマンドを実行して、カタログに Operator のパッケージ定義を追加します。$ opm init <operator_name> \ 1 --default-channel=preview \ 2 --description=./README.md \ 3 --icon=./operator-icon.svg \ 4 --output yaml \ 5 > <catalog_dir>/index.yaml 6
このコマンドは、指定されたカタログ設定ファイルに
olm.package
宣言型設定 blob を生成します。
opm render
コマンドを実行して、バンドルをカタログに追加します。$ opm render <registry>/<namespace>/<bundle_image_name>:<tag> \ 1 --output=yaml \ >> <catalog_dir>/index.yaml 2
注記チャネルには、1 つ以上のバンドルが含まれる必要があります。
バンドルのチャネルエントリーを追加します。たとえば、次の例を仕様に合わせて変更し、
<catalog_dir>/index.yaml
ファイルに追加します。チャネルエントリーの例
--- schema: olm.channel package: <operator_name> name: preview entries: - name: <operator_name>.v0.1.0 1
- 1
<operator_name>
の後、かつ、バージョンのv
の前に、ピリオド (.
) を追加するようにしてください。それ以外の場合、エントリーがopm validate
コマンドに合格できません。
ファイルベースのカタログを検証します。
カタログディレクトリーに対して
opm validate
コマンドを実行します。$ opm validate <catalog_dir>
エラーコードが
0
であることを確認します。$ echo $?
出力例
0
podman build
コマンドを実行して、カタログイメージをビルドします。$ podman build . \ -f <catalog_dir>.Dockerfile \ -t <registry>/<namespace>/<catalog_image_name>:<tag>
カタログイメージをレジストリーにプッシュします。
必要に応じて、
podman login
コマンドを実行してターゲットレジストリーで認証します。$ podman login <registry>
podman push
コマンドを実行して、カタログイメージをプッシュします。$ podman push <registry>/<namespace>/<catalog_image_name>:<tag>
関連情報
9.1.2. ファイルベースのカタログイメージの更新またはフィルタリング
opm
CLI を使用して、ファイルベースのカタログ形式を使用するカタログイメージを更新またはフィルタリングできます。既存のカタログイメージのコンテンツを抽出すると、必要に応じてカタログを変更できます。たとえば、以下を実行できます。
- パッケージの追加
- パッケージの削除
- 既存のパッケージエントリーの更新
- パッケージ、チャネル、バンドルごとの非推奨メッセージの記載
その後、イメージをカタログの更新バージョンとして再構築できます。
または、ミラーレジストリーにカタログイメージがすでにある場合は、oc-mirror CLI プラグインを使用して、ターゲットレジストリーにミラーリングする際に、そのカタログイメージの更新されたソースバージョンから削除されたイメージを自動的にプルーニングできます。
oc-mirror プラグインとこのユースケースの詳細は、「ミラーレジストリーのコンテンツを最新の状態に維持」セクション、および「oc-mirror プラグインを使用した非接続インストールのイメージのミラーリング」の「イメージのプルーニング」サブセクションを参照してください。
前提条件
ワークステーションに以下が含まれている。
-
opm
CLI。 -
podman
version 1.9.3+。 - ファイルベースのカタログイメージ。
このカタログに関連するワークステーションで最近初期化されたカタログディレクトリー構造。
初期化されたカタログディレクトリーがない場合は、ディレクトリーを作成し、Dockerfile を生成します。詳細は、「ファイルベースのカタログイメージの作成」手順の「カタログの初期化」手順を参照してください。
-
手順
カタログイメージのコンテンツを YAML 形式でカタログディレクトリーの
index.yaml
ファイルに展開します。$ opm render <registry>/<namespace>/<catalog_image_name>:<tag> \ -o yaml > <catalog_dir>/index.yaml
注記または、
-o json
フラグを使用して JSON 形式で出力することもできます。作成された
index.yaml
ファイルの内容を仕様に合わせて変更します。重要バンドルがカタログに公開されたら、いずれかのユーザーがバンドルをインストールしていると想定します。カタログ内で以前に公開されたすべてのバンドルに、現在または新しいチャネルヘッドへの更新パスが設定されていることを確認し、そのバージョンがインストールされているユーザーが立ち往生するのを防ぎます。
- Operator を追加するには、「ファイルベースのカタログイメージの作成」手順のパッケージ、バンドル、およびチャネルエントリーを作成する手順に従います。
Operator を削除するには、パッケージに関連する
olm.package
、olm.channel
、およびolm.bundle
Blob のセットを削除します。次の例は、カタログからexample-operator
パッケージを削除するために削除する必要があるセットを示しています。例9.1 削除されたエントリーの例
--- defaultChannel: release-2.7 icon: base64data: <base64_string> mediatype: image/svg+xml name: example-operator schema: olm.package --- entries: - name: example-operator.v2.7.0 skipRange: '>=2.6.0 <2.7.0' - name: example-operator.v2.7.1 replaces: example-operator.v2.7.0 skipRange: '>=2.6.0 <2.7.1' - name: example-operator.v2.7.2 replaces: example-operator.v2.7.1 skipRange: '>=2.6.0 <2.7.2' - name: example-operator.v2.7.3 replaces: example-operator.v2.7.2 skipRange: '>=2.6.0 <2.7.3' - name: example-operator.v2.7.4 replaces: example-operator.v2.7.3 skipRange: '>=2.6.0 <2.7.4' name: release-2.7 package: example-operator schema: olm.channel --- image: example.com/example-inc/example-operator-bundle@sha256:<digest> name: example-operator.v2.7.0 package: example-operator properties: - type: olm.gvk value: group: example-group.example.io kind: MyObject version: v1alpha1 - type: olm.gvk value: group: example-group.example.io kind: MyOtherObject version: v1beta1 - type: olm.package value: packageName: example-operator version: 2.7.0 - type: olm.bundle.object value: data: <base64_string> - type: olm.bundle.object value: data: <base64_string> relatedImages: - image: example.com/example-inc/example-related-image@sha256:<digest> name: example-related-image schema: olm.bundle ---
-
Operator の非推奨メッセージを追加または更新するには、パッケージの
index.yaml
ファイルと同じディレクトリーにdeprecations.yaml
ファイルがあることを確認してください。deprecations.yaml
ファイル形式の詳細は、「olm.deprecations スキーマ」を参照してください。
- 変更を保存します。
カタログを検証します。
$ opm validate <catalog_dir>
カタログを再構築します。
$ podman build . \ -f <catalog_dir>.Dockerfile \ -t <registry>/<namespace>/<catalog_image_name>:<tag>
更新されたカタログイメージをレジストリーにプッシュします。
$ podman push <registry>/<namespace>/<catalog_image_name>:<tag>
検証
- Web コンソールで、Administration → Cluster Settings → Configuration ページで OperatorHub 設定リソースに移動します。
カタログソースを追加するか、既存のカタログソースを更新して、更新されたカタログイメージのプル仕様を使用します。
詳細は、このセクションの「関連情報」にある「クラスターへのカタログソースの追加」を参照してください。
- カタログソースが READY 状態になったら、Operators → OperatorHub ページに移動し、加えた変更が Operator のリストに反映されていることを確認します。
9.2. OLM v1 での非接続環境のサポート
高度なセキュリティーを重視するクラスター管理者は、特にミッションクリティカルな実稼働ワークロードのために、クラスターをインターネット非接続環境で運用します。そのようなクラスター管理者をサポートするために、Operator Lifecycle Manager (OLM) v1 には、OpenShift Container Platform 4.18 以降、このような非接続環境内で動作するクラスター拡張機能のライフサイクル管理機能が組み込まれています。
9.2.1. OLM v1 の非接続環境サポートと oc-mirror プラグインについて
Operator Lifecycle Manager (OLM) v1 は、OpenShift Container Platform 4.18 以降、非接続環境をサポートします。OpenShift CLI (oc
) の oc-mirror プラグインを使用して、クラスターに必要なイメージを、完全または部分的な非接続環境のミラーレジストリーにミラーリングした後、使用している oc-mirror プラグインのバージョンに応じて、以下のいずれかのリソースセットを利用することで、OLM v1 をこのような環境で適切に動作させることができます。
-
oc-mirror プラグイン v1 によって自動的に生成される
ImageContentSourcePolicy
リソースと、oc-mirror プラグイン v1 の使用後に手動で作成する必要があるClusterCatalog
リソース -
ImageDigestMirrorSet
、ImageTagMirrorSet
、およびClusterCatalog
リソースはすべて、oc-mirror プラグイン v2 によって自動的に生成されます。
OpenShift Container Platform 4.18 以降では、oc-mirror プラグイン v2 がミラーリングに推奨されるバージョンです。
詳細情報と手順については、使用する予定の oc-mirror プラグインバージョンの 非接続環境 ガイドを参照してください。
第10章 クラスター拡張機能
10.1. クラスター拡張機能の管理
カタログがクラスターに追加されると、カタログに公開されている拡張機能と Operator のバージョン、パッチ、OTA (over-the-air) 更新にアクセスできるようになります。
カスタムリソース (CR) を使用して、CLI から拡張機能を宣言的に管理できます。
10.1.1. サポートされる拡張機能
現在、Operator Lifecycle Manager (OLM) v1 は、次のすべての条件を満たすクラスター拡張機能のインストールをサポートしています。
-
拡張機能では、OLM (Classic) で導入された
registry+v1
バンドル形式を使用する必要があります。 -
拡張機能は、
AllNamespaces
インストールモードによるインストールをサポートする必要があります。 - 拡張機能は Webhook を使用してはなりません。
拡張機能は、次に示すいずれかのファイルベースのカタログプロパティーを使用して依存関係を宣言してはなりません。
-
olm.gvk.required
-
olm.package.required
-
olm.constraint
-
OLM v1 は、インストールする拡張機能がこれらの制約を満たしているかどうかを確認します。インストールする拡張機能がこれらの制約を満たしていない場合、クラスター拡張機能の条件にエラーメッセージが出力されます。
Operator Lifecycle Manager (OLM) v1 は、OLM (Classic) で導入された OperatorConditions
API をサポートしていません。
拡張機能が OperatorConditions
API のみに依存して更新を管理している場合、拡張機能が正しくインストールされない可能性があります。この API に依存する拡張機能のほとんどは起動時に失敗しますが、一部は調整中に失敗する可能性があります。
回避策として、拡張機能を特定のバージョンに固定できます。拡張機能を更新する場合は、拡張機能のドキュメントを参照して、いつ拡張機能を新しいバージョンに固定すれば安全か確認してください。
関連情報
10.1.2. カタログからインストールする Operator を見つける
クラスターにカタログを追加した後、カタログにクエリーを実行して、インストールする Operator と拡張機能を見つけることができます。
現在、Operator Lifecycle Manager (OLM) v1 では、catalogd によって管理されるクラスター上のカタログをクエリーすることはできません。OLM v1 では、カタログレジストリーをクエリーするには、opm
および jq
CLI ツールを使用する必要があります。
前提条件
- クラスターにカタログを追加している。
-
jq
CLI ツールがインストールされている。 -
opm
がインストールされている。
手順
AllNamespaces
インストールモードをサポートし、Webhook を使用しない拡張機能のリストを返すには、次のコマンドを入力します。$ opm render <catalog_registry_url>:<tag> \ | jq -cs '[.[] | select(.schema == "olm.bundle" \ and (.properties[] | select(.type == "olm.csv.metadata").value.installModes[] \ | select(.type == "AllNamespaces" and .supported == true)) \ and .spec.webhookdefinitions == null) | .package] | unique[]'
ここでは
catalog_registry_url
-
カタログレジストリーの URL (
registry.redhat.io/redhat/redhat-operator-index
など) を指定します。 tag
カタログのタグまたはバージョン (
v4.18
やlatest
など) を指定します。例10.1 コマンドの例
$ opm render \ registry.redhat.io/redhat/redhat-operator-index:v4.18 \ | jq -cs '[.[] | select(.schema == "olm.bundle" \ and (.properties[] | select(.type == "olm.csv.metadata").value.installModes[] \ | select(.type == "AllNamespaces" and .supported == true)) \ and .spec.webhookdefinitions == null) | .package] | unique[]'
例10.2 出力例
"3scale-operator" "amq-broker-rhel8" "amq-online" "amq-streams" "amq-streams-console" "ansible-automation-platform-operator" "ansible-cloud-addons-operator" "apicast-operator" "authorino-operator" "aws-load-balancer-operator" "bamoe-kogito-operator" "cephcsi-operator" "cincinnati-operator" "cluster-logging" "cluster-observability-operator" "compliance-operator" "container-security-operator" "cryostat-operator" "datagrid" "devspaces" ...
次のコマンドを実行して、拡張機能のメタデータの内容を検査します。
$ opm render <catalog_registry_url>:<tag> \ | jq -s '.[] | select( .schema == "olm.package") \ | select( .name == "<package_name>")'
例10.3 コマンドの例
$ opm render \ registry.redhat.io/redhat/redhat-operator-index:v4.18 \ | jq -s '.[] | select( .schema == "olm.package") \ | select( .name == "openshift-pipelines-operator-rh")'
例10.4 出力例
{ "schema": "olm.package", "name": "openshift-pipelines-operator-rh", "defaultChannel": "latest", "icon": { "base64data": "iVBORw0KGgoAAAANSUhE...", "mediatype": "image/png" } }
10.1.2.1. 一般的なカタログクエリー
opm
および jq
CLI ツールを使用してカタログをクエリーできます。次の表は、拡張機能のインストール、更新、およびライフサイクルの管理時に使用できる一般的なカタログクエリーを示しています。
コマンド構文
$ opm render <catalog_registry_url>:<tag> | <jq_request>
ここでは
catalog_registry_url
-
カタログレジストリーの URL (
registry.redhat.io/redhat/redhat-operator-index
など) を指定します。 tag
-
カタログのタグまたはバージョン (
v4.18
やlatest
など) を指定します。 jq_request
- カタログで実行するクエリーを指定します。
例10.5 コマンドの例
$ opm render \ registry.redhat.io/redhat/redhat-operator-index:v4.18 \ | jq -cs '[.[] | select(.schema == "olm.bundle" and (.properties[] \ | select(.type == "olm.csv.metadata").value.installModes[] \ | select(.type == "AllNamespaces" and .supported == true)) \ and .spec.webhookdefinitions == null) \ | .package] | unique[]'
クエリー | Request |
---|---|
カタログで利用可能なパッケージ |
$ opm render <catalog_registry_url>:<tag> \ | jq -s '.[] | select( .schema == "olm.package")' |
|
$ opm render <catalog_registry_url>:<tag> \ | jq -cs '[.[] | select(.schema == "olm.bundle" and (.properties[] \ | select(.type == "olm.csv.metadata").value.installModes[] \ | select(.type == "AllNamespaces" and .supported == true)) \ and .spec.webhookdefinitions == null) \ | .package] | unique[]' |
パッケージのメタデータ |
$ opm render <catalog_registry_url>:<tag> \ | jq -s '.[] | select( .schema == "olm.package") \ | select( .name == "<package_name>")' |
パッケージ内のカタログブロブ |
$ opm render <catalog_registry_url>:<tag> \ | jq -s '.[] | select( .package == "<package_name>")' |
クエリー | Request |
---|---|
パッケージのチャネル |
$ opm render <catalog_registry_url>:<tag> \ | jq -s '.[] | select( .schema == "olm.channel" ) \ | select( .package == "<package_name>") | .name' |
チャネル内のバージョン |
$ opm render <catalog_registry_url>:<tag> \ | jq -s '.[] | select( .package == "<package_name>" ) \ | select( .schema == "olm.channel" ) \ | select( .name == "<channel_name>" ) .entries \ | .[] | .name' |
|
$ opm render <catalog_registry_url>:<tag> \ | jq -s '.[] | select( .schema == "olm.channel" ) \ | select ( .name == "<channel_name>") \ | select( .package == "<package_name>")' |
クエリー | Request |
---|---|
パッケージ内のバンドル |
$ opm render <catalog_registry_url>:<tag> \ | jq -s '.[] | select( .schema == "olm.bundle" ) \ | select( .package == "<package_name>") | .name' |
|
$ opm render <catalog_registry_url>:<tag> \ | jq -s '.[] | select( .schema == "olm.bundle" ) \ | select ( .name == "<bundle_name>") \ | select( .package == "<package_name>")' |
10.1.3. クラスター拡張機能の権限
Operator Lifecycle Manager (OLM) Classic では、クラスター管理者権限を持つ 1 つのサービスアカウントがすべてのクラスター拡張機能を管理します。
OLM v1 は、デフォルトで OLM (Classic) よりもセキュアになるように設計されています。OLM v1 は、拡張機能のカスタムリソース (CR) で指定されたサービスアカウントを使用してクラスター拡張機能を管理します。クラスター管理者は、クラスター拡張機能ごとにサービスアカウントを作成できます。そのため、管理者は最小権限の原則に従い、ロールベースのアクセス制御 (RBAC) だけを割り当ててその拡張機能をインストールおよび管理することができます。
各権限を、クラスターロールまたはロールのいずれかに追加する必要があります。その後、クラスターロールバインディングまたはロールバインディングを使用して、クラスターロールまたはロールをサービスアカウントにバインドする必要があります。
RBAC のスコープを、クラスターまたは namespace のいずれかに設定できます。権限のスコープをクラスターに設定するには、クラスターロールとクラスターロールバインディングを使用します。権限のスコープを namespace に設定するには、ロールとロールバインディングを使用します。権限のスコープをクラスターに設定するか、namespace に設定するかは、インストールして管理する拡張機能の設計によって異なります。
次のサンプルマニフェストでは、手順を簡素化し、読みやすさを向上させるために、スコープをクラスターに設定した権限を使用します。クラスターではなく拡張機能の namespace にスコープを設定すると、一部の権限をさらに制限できます。
インストールされた拡張機能の新しいバージョンに追加の権限が必要な場合、OLM v1 はクラスター管理者がその権限を付与するまで更新プロセスを停止します。
10.1.3.1. namespace の作成
クラスター拡張機能をインストールして管理するためのサービスアカウントを作成する前に、namespace を作成する必要があります。
前提条件
-
cluster-admin
権限を持つアカウントを使用して OpenShift Container Platform クラスターにアクセスできる。
手順
次のコマンドを実行して、インストールする拡張機能のサービスアカウント用の新しい namespace を作成します。
$ oc adm new-project <new_namespace>
10.1.3.2. 拡張機能のサービスアカウントの作成
クラスター拡張機能をインストール、管理、更新するには、サービスアカウントを作成する必要があります。
前提条件
-
cluster-admin
権限を持つアカウントを使用して OpenShift Container Platform クラスターにアクセスできる。
手順
次の例のように、サービスアカウントを作成します。
apiVersion: v1 kind: ServiceAccount metadata: name: <extension>-installer namespace: <namespace>
例10.6
extension-service-account.yaml
ファイルの例apiVersion: v1 kind: ServiceAccount metadata: name: pipelines-installer namespace: pipelines
次のコマンドを実行してサービスアカウントを適用します。
$ oc apply -f extension-service-account.yaml
10.1.3.3. 拡張機能のバンドルマニフェストのダウンロード
opm
CLI ツールを使用して、インストールする拡張機能のバンドルマニフェストをダウンロードします。任意の CLI ツールまたはテキストエディターを使用してマニフェストを表示し、拡張機能をインストールおよび管理するために必要な権限を確認します。
前提条件
-
cluster-admin
権限を持つアカウントを使用して OpenShift Container Platform クラスターにアクセスできる。 - インストールする拡張機能を決定した。
-
opm
がインストールされている。
手順
次のコマンドを実行して、インストールする拡張機能の利用可能なバージョンとイメージを確認します。
$ opm render <registry_url>:<tag_or_version> | \ jq -cs '.[] | select( .schema == "olm.bundle" ) | \ select( .package == "<extension_name>") | \ {"name":.name, "image":.image}'
例10.7 コマンドの例
$ opm render registry.redhat.io/redhat/redhat-operator-index:v4.18 | \ jq -cs '.[] | select( .schema == "olm.bundle" ) | \ select( .package == "openshift-pipelines-operator-rh") | \ {"name":.name, "image":.image}'
例10.8 出力例
{"name":"openshift-pipelines-operator-rh.v1.14.3","image":"registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:3f64b29f6903981470d0917b2557f49d84067bccdba0544bfe874ec4412f45b0"} {"name":"openshift-pipelines-operator-rh.v1.14.4","image":"registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:dd3d18367da2be42539e5dde8e484dac3df33ba3ce1d5bcf896838954f3864ec"} {"name":"openshift-pipelines-operator-rh.v1.14.5","image":"registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:f7b19ce26be742c4aaa458d37bc5ad373b5b29b20aaa7d308349687d3cbd8838"} {"name":"openshift-pipelines-operator-rh.v1.15.0","image":"registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:22be152950501a933fe6e1df0e663c8056ca910a89dab3ea801c3bb2dc2bf1e6"} {"name":"openshift-pipelines-operator-rh.v1.15.1","image":"registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:64afb32e3640bb5968904b3d1a317e9dfb307970f6fda0243e2018417207fd75"} {"name":"openshift-pipelines-operator-rh.v1.15.2","image":"registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:8a593c1144709c9aeffbeb68d0b4b08368f528e7bb6f595884b2474bcfbcafcd"} {"name":"openshift-pipelines-operator-rh.v1.16.0","image":"registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:a46b7990c0ad07dae78f43334c9bd5e6cba7b50ca60d3f880099b71e77bed214"} {"name":"openshift-pipelines-operator-rh.v1.16.1","image":"registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:29f27245e93b3f605647993884751c490c4a44070d3857a878d2aee87d43f85b"} {"name":"openshift-pipelines-operator-rh.v1.16.2","image":"registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:2037004666526c90329f4791f14cb6cc06e8775cb84ba107a24cc4c2cf944649"} {"name":"openshift-pipelines-operator-rh.v1.17.0","image":"registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:d75065e999826d38408049aa1fde674cd1e45e384bfdc96523f6bad58a0e0dbc"}
次のコマンドを実行して、インストールするバンドルのイメージを抽出するディレクトリーを作成します。
$ mkdir <new_dir>
次のコマンドを実行してそのディレクトリーに移動します。
$ cd <new_dir>
インストールするバージョンのイメージ参照を見つけて、次のコマンドを実行します。
$ oc image extract <full_path_to_registry_image>@sha256:<sha>
コマンドの例
$ oc image extract registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:f7b19ce26be742c4aaa458d37bc5ad373b5b29b20aaa7d308349687d3cbd8838
次のコマンドを実行して、
manifests
ディレクトリーに移動します。$ cd manifests
次のコマンドを入力して、マニフェストディレクトリーの内容を表示します。出力には、拡張機能のインストール、管理、および操作に必要なリソースのマニフェストがリストされます。
$ tree
例10.9 出力例
. ├── manifests │ ├── config-logging_v1_configmap.yaml │ ├── openshift-pipelines-operator-monitor_monitoring.coreos.com_v1_servicemonitor.yaml │ ├── openshift-pipelines-operator-prometheus-k8s-read-binding_rbac.authorization.k8s.io_v1_rolebinding.yaml │ ├── openshift-pipelines-operator-read_rbac.authorization.k8s.io_v1_role.yaml │ ├── openshift-pipelines-operator-rh.clusterserviceversion.yaml │ ├── operator.tekton.dev_manualapprovalgates.yaml │ ├── operator.tekton.dev_openshiftpipelinesascodes.yaml │ ├── operator.tekton.dev_tektonaddons.yaml │ ├── operator.tekton.dev_tektonchains.yaml │ ├── operator.tekton.dev_tektonconfigs.yaml │ ├── operator.tekton.dev_tektonhubs.yaml │ ├── operator.tekton.dev_tektoninstallersets.yaml │ ├── operator.tekton.dev_tektonpipelines.yaml │ ├── operator.tekton.dev_tektonresults.yaml │ ├── operator.tekton.dev_tektontriggers.yaml │ ├── tekton-config-defaults_v1_configmap.yaml │ ├── tekton-config-observability_v1_configmap.yaml │ ├── tekton-config-read-rolebinding_rbac.authorization.k8s.io_v1_clusterrolebinding.yaml │ ├── tekton-config-read-role_rbac.authorization.k8s.io_v1_clusterrole.yaml │ ├── tekton-operator-controller-config-leader-election_v1_configmap.yaml │ ├── tekton-operator-info_rbac.authorization.k8s.io_v1_rolebinding.yaml │ ├── tekton-operator-info_rbac.authorization.k8s.io_v1_role.yaml │ ├── tekton-operator-info_v1_configmap.yaml │ ├── tekton-operator_v1_service.yaml │ ├── tekton-operator-webhook-certs_v1_secret.yaml │ ├── tekton-operator-webhook-config-leader-election_v1_configmap.yaml │ ├── tekton-operator-webhook_v1_service.yaml │ ├── tekton-result-read-rolebinding_rbac.authorization.k8s.io_v1_clusterrolebinding.yaml │ └── tekton-result-read-role_rbac.authorization.k8s.io_v1_clusterrole.yaml ├── metadata │ ├── annotations.yaml │ └── properties.yaml └── root └── buildinfo ├── content_manifests │ └── openshift-pipelines-operator-bundle-container-v1.16.2-3.json └── Dockerfile-openshift-pipelines-pipelines-operator-bundle-container-v1.16.2-3
次のステップ
-
任意の CLI ツールまたはテキストエディターを使用して、
manifests
ディレクトリーにあるクラスターサービスバージョン (CSV) ファイルのinstall.spec.clusterpermissions
スタンザの内容を表示します。次の例では、Red Hat OpenShift Pipelines Operator のopenshift-pipelines-operator-rh.clusterserviceversion.yaml
ファイルを参照します。 - 次の手順でクラスターロールファイルに権限を割り当てるときに、このファイルを参照できるように開いたままにしておきます。
10.1.3.4. クラスター拡張機能をインストールおよび管理するために必要な権限
必要な権限を割り当てるには、クラスター拡張機能のバンドルイメージに含まれるマニフェストを確認する必要があります。次のリソースを作成および管理するのに十分なロールベースのアクセス制御 (RBAC) がサービスアカウントに必要です。
実行に必要な最小限の RBAC を使用して、特定のリソース名に対する最小権限とスコープ権限の原則を遵守してください。
- アドミッションプラグイン
-
OpenShift Container Platform クラスターは
OwnerReferencesPermissionEnforcement
アドミッションプラグインを使用します。そのため、クラスター拡張機能にはblockOwnerDeletion
およびownerReferences
ファイナライザーを更新する権限が必要です。 - 拡張機能のコントローラー用のクラスターロールとクラスターロールバインディング
- 拡張機能のコントローラー用のクラスターロールとクラスターロールバインディングを、インストールサービスアカウントが作成および管理できるように、RBAC を定義する必要があります。
- クラスターサービスバージョン (CSV)
- クラスター拡張機能の CSV で定義されたリソース用の RBAC を定義する必要があります。
- クラスタースコープのバンドルリソース
-
バンドルに含まれるクラスタースコープのリソースを作成および管理するための RBAC を定義する必要があります。クラスタースコープのリソースが
ClusterRole
などの別のリソースタイプと一致する場合は、resources
またはresourceNames
フィールドの下にある既存のルールにリソースを追加できます。 - カスタムリソース定義 (CRD)
- インストールサービスアカウントが拡張機能の CRD を作成および管理できるように、RBAC を定義する必要があります。また、拡張機能のコントローラーのサービスアカウントに、拡張機能の CRD を管理するための RBAC を付与する必要があります。
- デプロイメント
- service や config map など、拡張機能のコントローラーに必要なデプロイメントを作成および管理するために、インストールサービスアカウント用の RBAC を定義する必要があります。
- 拡張機能の権限
- CSV で定義されている権限とクラスター権限用の RBAC を含める必要があります。インストールサービスアカウントが、これらの権限を拡張機能コントローラーに付与できる必要があります。これらの権限は、拡張機能コントローラーの実行に必要です。
- namespace スコープのバンドルリソース
- namespace スコープのバンドルリソース用の RBAC を定義する必要があります。インストールサービスアカウントに、config map や service などのリソースを作成および管理するための権限が必要です。
- ロールおよびロールバインディング
- CSV で定義されているすべてのロールまたはロールバインディング用の RBAC を定義する必要があります。インストールサービスアカウントに、これらのロールとロールバインディングを作成および管理するための権限が必要です。
- サービスアカウント
- インストールサービスアカウントが拡張機能のコントローラーのサービスアカウントを作成および管理できるように、RBAC を定義する必要があります。
10.1.3.5. 拡張機能用のクラスターロールの作成
インストールする拡張機能に必要なロールベースのアクセス制御 (RBAC) を定義するには、クラスターサービスバージョン (CSV) の install.spec.clusterpermissions
スタンザと拡張機能のマニフェストをよく確認する必要があります。必要な RBAC を CSV から新しいマニフェストにコピーして、クラスターロールを作成する必要があります。
OLM v1 で拡張機能をインストールおよび更新するプロセスをテストする場合は、次のクラスターロールを使用すると、クラスター管理者の権限を付与できます。このマニフェストはテストのみを目的としたものです。実稼働クラスターでは使用しないでください。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: <extension>-installer-clusterrole rules: - apiGroups: ["*"] resources: ["*"] verbs: ["*"]
次の手順では、Red Hat OpenShift Pipelines Operator の openshift-pipelines-operator-rh.clusterserviceversion.yaml
ファイルを例として使用します。この例には、OpenShift Pipelines Operator をインストールおよび管理するために必要な RBAC の抜粋が含まれています。完全なマニフェストについては、「Red Hat OpenShift Pipelines Operator のクラスターロールの例」を参照してください。
次のサンプルマニフェストでは、手順を簡素化し、読みやすさを向上させるために、スコープをクラスターに設定した権限を使用します。クラスターではなく拡張機能の namespace にスコープを設定すると、一部の権限をさらに制限できます。
前提条件
-
cluster-admin
権限を持つアカウントを使用して OpenShift Container Platform クラスターにアクセスできる。 - インストールする拡張機能のイメージ参照のマニフェストをダウンロードした。
手順
次の例のように、新しいクラスターロールマニフェストを作成します。
<extension>-cluster-role.yaml
ファイルの例apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: <extension>-installer-clusterrole
次の例のように、クラスターロールマニフェストを編集し、拡張機能のファイナライザーを更新する権限を含めます。
<extension>-cluster-role.yaml の例
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: pipelines-installer-clusterrole rules: - apiGroups: - olm.operatorframework.io resources: - clusterextensions/finalizers verbs: - update # Scoped to the name of the ClusterExtension resourceNames: - <metadata_name> 1
- 1
- 拡張機能のカスタムリソース (CR) の
metadata.name
フィールド値を指定します。
拡張機能の CSV ファイルの
rules.resources
フィールドでclusterrole
およびclusterrolebindings
の値を検索します。次の例のように、API グループ、リソース、動詞、およびリソース名をマニフェストにコピーします。
クラスターロールマニフェストの例
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: pipelines-installer-clusterrole rules: # ... # ClusterRoles and ClusterRoleBindings for the controllers of the extension - apiGroups: - rbac.authorization.k8s.io resources: - clusterroles verbs: - create 1 - list - watch - apiGroups: - rbac.authorization.k8s.io resources: - clusterroles verbs: - get - update - patch - delete resourceNames: 2 - "*" - apiGroups: - rbac.authorization.k8s.io resources: - clusterrolebindings verbs: - create - list - watch - apiGroups: - rbac.authorization.k8s.io resources: - clusterrolebindings verbs: - get - update - patch - delete resourceNames: - "*" # ...
拡張機能の CSV ファイルの
rules.resources
フィールドでcustomresourcedefinitions
値を検索します。次の例のように、API グループ、リソース、動詞、およびリソース名をマニフェストにコピーします。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: pipelines-installer-clusterrole rules: # ... # Custom resource definitions of the extension - apiGroups: - apiextensions.k8s.io resources: - customresourcedefinitions verbs: - create - list - watch - apiGroups: - apiextensions.k8s.io resources: - customresourcedefinitions verbs: - get - update - patch - delete resourceNames: - manualapprovalgates.operator.tekton.dev - openshiftpipelinesascodes.operator.tekton.dev - tektonaddons.operator.tekton.dev - tektonchains.operator.tekton.dev - tektonconfigs.operator.tekton.dev - tektonhubs.operator.tekton.dev - tektoninstallersets.operator.tekton.dev - tektonpipelines.operator.tekton.dev - tektonresults.operator.tekton.dev - tektontriggers.operator.tekton.dev # ...
CSV ファイルで、
rules.resources
仕様のpermissions
およびclusterPermissions
値が含まれるスタンザを検索します。次の例のように、API グループ、リソース、動詞、およびリソース名をマニフェストにコピーします。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: pipelines-installer-clusterrole rules: # ... # Excerpt from install.spec.clusterPermissions - apiGroups: - '' resources: - nodes - pods - services - endpoints - persistentvolumeclaims - events - configmaps - secrets - pods/log - limitranges verbs: - create - list - watch - delete - deletecollection - patch - get - update - apiGroups: - extensions - apps resources: - ingresses - ingresses/status verbs: - create - list - watch - delete - patch - get - update # ...
CSV ファイルで、
install.spec.deployments
スタンザの下のリソースを検索します。次の例のように、API グループ、リソース、動詞、およびリソース名をマニフェストにコピーします。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: pipelines-installer-clusterrole rules: # ... # Excerpt from install.spec.deployments - apiGroups: - apps resources: - deployments verbs: - create - list - watch - apiGroups: - apps resources: - deployments verbs: - get - update - patch - delete # scoped to the extension controller deployment name resourceNames: - openshift-pipelines-operator - tekton-operator-webhook # ...
拡張機能の CSV ファイルの
rules.resources
フィールドで、services
およびconfigmaps
値を検索します。次の例のように、API グループ、リソース、動詞、およびリソース名をマニフェストにコピーします。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: pipelines-installer-clusterrole rules: # ... # Services - apiGroups: - "" resources: - services verbs: - create - apiGroups: - "" resources: - services verbs: - get - list - watch - update - patch - delete # scoped to the service name resourceNames: - openshift-pipelines-operator-monitor - tekton-operator - tekton-operator-webhook # configmaps - apiGroups: - "" resources: - configmaps verbs: - create - apiGroups: - "" resources: - configmaps verbs: - get - list - watch - update - patch - delete # scoped to the configmap name resourceNames: - config-logging - tekton-config-defaults - tekton-config-observability - tekton-operator-controller-config-leader-election - tekton-operator-info - tekton-operator-webhook-config-leader-election - apiGroups: - operator.tekton.dev resources: - tekton-config-read-role - tekton-result-read-role verbs: - get - watch - list
次のコマンドを実行して、クラスターロールマニフェストをクラスターに追加します。
$ oc apply -f <extension>-installer-clusterrole.yaml
コマンドの例
$ oc apply -f pipelines-installer-clusterrole.yaml
10.1.3.6. Red Hat OpenShift Pipelines Operator のクラスターロールの例
OpenShift Pipelines Operator の完全なクラスターロールマニフェストについては、次の例を参照してください。
--- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: pipelines-installer-clusterrole rules: - apiGroups: - olm.operatorframework.io resources: - clusterextensions/finalizers verbs: - update # Scoped to the name of the ClusterExtension resourceNames: - pipes # the value from <metadata.name> from the extension's custom resource (CR) # ClusterRoles and ClusterRoleBindings for the controllers of the extension - apiGroups: - rbac.authorization.k8s.io resources: - clusterroles verbs: - create - list - watch - apiGroups: - rbac.authorization.k8s.io resources: - clusterroles verbs: - get - update - patch - delete resourceNames: - "*" - apiGroups: - rbac.authorization.k8s.io resources: - clusterrolebindings verbs: - create - list - watch - apiGroups: - rbac.authorization.k8s.io resources: - clusterrolebindings verbs: - get - update - patch - delete resourceNames: - "*" # Extension's custom resource definitions - apiGroups: - apiextensions.k8s.io resources: - customresourcedefinitions verbs: - create - list - watch - apiGroups: - apiextensions.k8s.io resources: - customresourcedefinitions verbs: - get - update - patch - delete resourceNames: - manualapprovalgates.operator.tekton.dev - openshiftpipelinesascodes.operator.tekton.dev - tektonaddons.operator.tekton.dev - tektonchains.operator.tekton.dev - tektonconfigs.operator.tekton.dev - tektonhubs.operator.tekton.dev - tektoninstallersets.operator.tekton.dev - tektonpipelines.operator.tekton.dev - tektonresults.operator.tekton.dev - tektontriggers.operator.tekton.dev - apiGroups: - '' resources: - nodes - pods - services - endpoints - persistentvolumeclaims - events - configmaps - secrets - pods/log - limitranges verbs: - create - list - watch - delete - deletecollection - patch - get - update - apiGroups: - extensions - apps resources: - ingresses - ingresses/status verbs: - create - list - watch - delete - patch - get - update - apiGroups: - '' resources: - namespaces verbs: - get - list - create - update - delete - patch - watch - apiGroups: - apps resources: - deployments - daemonsets - replicasets - statefulsets - deployments/finalizers verbs: - delete - deletecollection - create - patch - get - list - update - watch - apiGroups: - monitoring.coreos.com resources: - servicemonitors verbs: - get - create - delete - apiGroups: - rbac.authorization.k8s.io resources: - clusterroles - roles verbs: - delete - deletecollection - create - patch - get - list - update - watch - bind - escalate - apiGroups: - '' resources: - serviceaccounts verbs: - get - list - create - update - delete - patch - watch - impersonate - apiGroups: - rbac.authorization.k8s.io resources: - clusterrolebindings - rolebindings verbs: - get - update - delete - patch - create - list - watch - apiGroups: - apiextensions.k8s.io resources: - customresourcedefinitions - customresourcedefinitions/status verbs: - get - create - update - delete - list - patch - watch - apiGroups: - admissionregistration.k8s.io resources: - mutatingwebhookconfigurations - validatingwebhookconfigurations verbs: - get - list - create - update - delete - patch - watch - apiGroups: - build.knative.dev resources: - builds - buildtemplates - clusterbuildtemplates verbs: - get - list - create - update - delete - patch - watch - apiGroups: - extensions resources: - deployments verbs: - get - list - create - update - delete - patch - watch - apiGroups: - extensions resources: - deployments/finalizers verbs: - get - list - create - update - delete - patch - watch - apiGroups: - operator.tekton.dev resources: - '*' - tektonaddons verbs: - delete - deletecollection - create - patch - get - list - update - watch - apiGroups: - tekton.dev - triggers.tekton.dev - operator.tekton.dev - pipelinesascode.tekton.dev resources: - '*' verbs: - add - delete - deletecollection - create - patch - get - list - update - watch - apiGroups: - dashboard.tekton.dev resources: - '*' - tektonaddons verbs: - delete - deletecollection - create - patch - get - list - update - watch - apiGroups: - security.openshift.io resources: - securitycontextconstraints verbs: - use - get - list - create - update - delete - apiGroups: - events.k8s.io resources: - events verbs: - create - apiGroups: - route.openshift.io resources: - routes verbs: - delete - deletecollection - create - patch - get - list - update - watch - apiGroups: - coordination.k8s.io resources: - leases verbs: - get - list - create - update - delete - patch - watch - apiGroups: - console.openshift.io resources: - consoleyamlsamples - consoleclidownloads - consolequickstarts - consolelinks verbs: - delete - deletecollection - create - patch - get - list - update - watch - apiGroups: - autoscaling resources: - horizontalpodautoscalers verbs: - delete - create - patch - get - list - update - watch - apiGroups: - policy resources: - poddisruptionbudgets verbs: - delete - deletecollection - create - patch - get - list - update - watch - apiGroups: - monitoring.coreos.com resources: - servicemonitors verbs: - delete - deletecollection - create - patch - get - list - update - watch - apiGroups: - batch resources: - jobs - cronjobs verbs: - delete - deletecollection - create - patch - get - list - update - watch - apiGroups: - '' resources: - namespaces/finalizers verbs: - update - apiGroups: - resolution.tekton.dev resources: - resolutionrequests - resolutionrequests/status verbs: - get - list - watch - create - delete - update - patch - apiGroups: - console.openshift.io resources: - consoleplugins verbs: - get - list - watch - create - delete - update - patch # Deployments specified in install.spec.deployments - apiGroups: - apps resources: - deployments verbs: - create - list - watch - apiGroups: - apps resources: - deployments verbs: - get - update - patch - delete # scoped to the extension controller deployment name resourceNames: - openshift-pipelines-operator - tekton-operator-webhook # Service accounts in the CSV - apiGroups: - "" resources: - serviceaccounts verbs: - create - list - watch - apiGroups: - "" resources: - serviceaccounts verbs: - get - update - patch - delete # scoped to the extension controller's deployment service account resourceNames: - openshift-pipelines-operator # Services - apiGroups: - "" resources: - services verbs: - create - apiGroups: - "" resources: - services verbs: - get - list - watch - update - patch - delete # scoped to the service name resourceNames: - openshift-pipelines-operator-monitor - tekton-operator - tekton-operator-webhook # configmaps - apiGroups: - "" resources: - configmaps verbs: - create - apiGroups: - "" resources: - configmaps verbs: - get - list - watch - update - patch - delete # scoped to the configmap name resourceNames: - config-logging - tekton-config-defaults - tekton-config-observability - tekton-operator-controller-config-leader-election - tekton-operator-info - tekton-operator-webhook-config-leader-election - apiGroups: - operator.tekton.dev resources: - tekton-config-read-role - tekton-result-read-role verbs: - get - watch - list ---
10.1.3.7. 拡張機能用のクラスターロールバインディングの作成
サービスアカウントとクラスターロールを作成したら、クラスターロールバインディングマニフェストを使用して、クラスターロールをサービスアカウントにバインドする必要があります。
前提条件
-
cluster-admin
権限を持つアカウントを使用して OpenShift Container Platform クラスターにアクセスできる。 インストールする拡張機能用に、次のリソースを作成して適用した。
- namespace
- サービスアカウント
- クラスターロール
手順
次の例のように、クラスターロールをサービスアカウントにバインドするためのクラスターロールバインディングを作成します。
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: <extension>-installer-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: <extension>-installer-clusterrole subjects: - kind: ServiceAccount name: <extension>-installer namespace: <namespace>
例10.10
pipelines-cluster-role-binding.yaml
ファイルの例apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: pipelines-installer-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: pipelines-installer-clusterrole subjects: - kind: ServiceAccount name: pipelines-installer namespace: pipelines
次のコマンドを実行して、クラスターロールバインディングを適用します。
$ oc apply -f pipelines-cluster-role-binding.yaml
10.1.4. カタログからのクラスター拡張機能のインストール
カスタムリソース (CR) を作成し、それをクラスターに適用することで、カタログから拡張機能をインストールできます。Operator Lifecycle Manager (OLM) v1 は、registry+v1
バンドル形式の OLM (Classic) Operator を含む、クラスタースコープのクラスター拡張機能のインストールをサポートしています。詳細は、サポートされている拡張機能 を参照してください。
前提条件
- サービスアカウントを作成し、インストールする拡張機能をインストール、更新、管理するのに十分なロールベースのアクセス制御 (RBAC) を割り当てた。詳細は、「クラスター拡張機能の権限」を参照してください。
手順
次の例のような CR を作成します。
apiVersion: olm.operatorframework.io/v1 kind: ClusterExtension metadata: name: <clusterextension_name> spec: namespace: <installed_namespace> 1 serviceAccount: name: <service_account_installer_name> 2 source: sourceType: Catalog catalog: packageName: <package_name> channels: - <channel_name> 3 version: <version_or_version_range> 4 upgradeConstraintPolicy: CatalogProvided 5
- 1
pipelines
やmy-extension
など、バンドルをインストールする namespace を指定します。拡張機能は継続してクラスタースコープであり、異なる namespace にインストールされているリソースが含まれる可能性があります。- 2
- 拡張機能をインストール、更新、管理するために作成したサービスアカウントの名前を指定します。
- 3
- オプション: チャネル名を、
pipelines-1.14
やlatest
などの配列の形で指定します。 - 4
- オプション: インストールまたは更新するパッケージのバージョンまたはバージョン範囲 (
1.14.0
、1.14.x
、>=1.16
など) を指定します。詳細は、「ターゲットバージョンを指定するカスタムリソース (CR) の例」および「バージョン範囲のサポート」を参照してください。 - 5
- オプション: アップグレード制約ポリシーを指定します。指定されていない場合、デフォルト設定は
CatalogProvided
になります。CatalogProvided
設定が更新されるのは、新しいバージョンがパッケージ作成者によって設定されたアップグレード制約を満たしている場合だけです。更新またはロールバックを強制するには、フィールドをSelfCertified
に設定します。詳細は、「更新またはロールバックの強制」を参照してください。
pipelines-operator.yaml
CR の例
apiVersion: olm.operatorframework.io/v1 kind: ClusterExtension metadata: name: pipelines-operator spec: namespace: pipelines serviceAccount: name: pipelines-installer source: sourceType: Catalog catalog: packageName: openshift-pipelines-operator-rh version: "1.14.x"
次のコマンドを実行して、CR をクラスターに適用します。
$ oc apply -f pipeline-operator.yaml
出力例
clusterextension.olm.operatorframework.io/pipelines-operator created
検証
次のコマンドを実行して、Operator または拡張機能の CR を YAML 形式で表示します。
$ oc get clusterextension pipelines-operator -o yaml
例10.11 出力例
apiVersion: v1 items: - apiVersion: olm.operatorframework.io/v1 kind: ClusterExtension metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"olm.operatorframework.io/v1","kind":"ClusterExtension","metadata":{"annotations":{},"name":"pipes"},"spec":{"namespace":"pipelines","serviceAccount":{"name":"pipelines-installer"},"source":{"catalog":{"packageName":"openshift-pipelines-operator-rh","version":"1.14.x"},"sourceType":"Catalog"}}} creationTimestamp: "2025-02-18T21:48:13Z" finalizers: - olm.operatorframework.io/cleanup-unpack-cache - olm.operatorframework.io/cleanup-contentmanager-cache generation: 1 name: pipelines-operator resourceVersion: "72725" uid: e18b13fb-a96d-436f-be75-a9a0f2b07993 spec: namespace: pipelines serviceAccount: name: pipelines-installer source: catalog: packageName: openshift-pipelines-operator-rh upgradeConstraintPolicy: CatalogProvided version: 1.14.x sourceType: Catalog status: conditions: - lastTransitionTime: "2025-02-18T21:48:13Z" message: "" observedGeneration: 1 reason: Deprecated status: "False" type: Deprecated - lastTransitionTime: "2025-02-18T21:48:13Z" message: "" observedGeneration: 1 reason: Deprecated status: "False" type: PackageDeprecated - lastTransitionTime: "2025-02-18T21:48:13Z" message: "" observedGeneration: 1 reason: Deprecated status: "False" type: ChannelDeprecated - lastTransitionTime: "2025-02-18T21:48:13Z" message: "" observedGeneration: 1 reason: Deprecated status: "False" type: BundleDeprecated - lastTransitionTime: "2025-02-18T21:48:16Z" message: Installed bundle registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:f7b19ce26be742c4aaa458d37bc5ad373b5b29b20aaa7d308349687d3cbd8838 successfully observedGeneration: 1 reason: Succeeded status: "True" type: Installed - lastTransitionTime: "2025-02-18T21:48:16Z" message: desired state reached observedGeneration: 1 reason: Succeeded status: "True" type: Progressing install: bundle: name: openshift-pipelines-operator-rh.v1.14.5 version: 1.14.5 kind: List metadata: resourceVersion: ""
ここでは、以下のようになります。
spec.channel
- 拡張の CR で定義されたチャネルを表示します。
spec.version
- 拡張の CR で定義されたバージョンまたはバージョン範囲を表示します。
status.conditions
- 拡張機能のステータスと健全性に関する情報を表示します。
type: Deprecated
次の 1 つ以上が非推奨かどうかを表示します。
type: PackageDeprecated
- 解決されたパッケージが非推奨かどうかを表示します。
type: ChannelDeprecated
- 解決されたチャネルが非推奨かどうかを表示します。
type: BundleDeprecated
- 解決されたバンドルが非推奨かどうかを表示します。
status
フィールドのFalse
の値はreason: Deprecated
条件が非推奨ではないことを示します。ステータス
フィールドのTrue
の値はreason: Deprecated
条件が非推奨であることを示します。installedBundle.name
- インストールされているバンドルの名前を表示します。
installedBundle.version
- インストールされているバンドルのバージョンを表示します。
10.1.5. クラスター拡張機能の更新
カスタムリソース (CR) を手動で編集し、変更を適用することで、クラスター拡張機能または Operator を更新できます。
前提条件
- Operator または拡張機能がインストールされている。
-
jq
CLI ツールがインストールされている。 -
opm
がインストールされている。
手順
次の手順を実行して、カタログファイルのローカルコピーからパッケージのチャネルとバージョン情報を検査します。
次のコマンドを実行して、選択したパッケージからチャネルのリストを取得します。
$ opm render <catalog_registry_url>:<tag> \ | jq -s '.[] | select( .schema == "olm.channel" ) \ | select( .package == "openshift-pipelines-operator-rh") | .name'
例10.12 コマンドの例
$ opm render registry.redhat.io/redhat/redhat-operator-index:v4.18 \ | jq -s '.[] | select( .schema == "olm.channel" ) \ | select( .package == "openshift-pipelines-operator-rh") | .name'
例10.13 出力例
"latest" "pipelines-1.14" "pipelines-1.15" "pipelines-1.16" "pipelines-1.17"
次のコマンドを実行して、チャネルで公開されているバージョンのリストを取得します。
$ opm render <catalog_registry_url>:<tag> \ | jq -s '.[] | select( .package == "<package_name>" ) \ | select( .schema == "olm.channel" ) \ | select( .name == "<channel_name>" ) | .entries \ | .[] | .name'
例10.14 コマンドの例
$ opm render registry.redhat.io/redhat/redhat-operator-index:v4.18 \ | jq -s '.[] | select( .package == "openshift-pipelines-operator-rh" ) \ | select( .schema == "olm.channel" ) | select( .name == "latest" ) \ | .entries | .[] | .name'
例10.15 出力例
"openshift-pipelines-operator-rh.v1.15.0" "openshift-pipelines-operator-rh.v1.16.0" "openshift-pipelines-operator-rh.v1.17.0" "openshift-pipelines-operator-rh.v1.17.1"
次のコマンドを実行して、Operator または拡張機能の CR で指定されているバージョンまたはチャネルを確認します。
$ oc get clusterextension <operator_name> -o yaml
コマンドの例
$ oc get clusterextension pipelines-operator -o yaml
例10.16 出力例
apiVersion: v1 items: - apiVersion: olm.operatorframework.io/v1 kind: ClusterExtension metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"olm.operatorframework.io/v1","kind":"ClusterExtension","metadata":{"annotations":{},"name":"pipes"},"spec":{"namespace":"pipelines","serviceAccount":{"name":"pipelines-installer"},"source":{"catalog":{"packageName":"openshift-pipelines-operator-rh","version":"1.14.x"},"sourceType":"Catalog"}}} creationTimestamp: "2025-02-18T21:48:13Z" finalizers: - olm.operatorframework.io/cleanup-unpack-cache - olm.operatorframework.io/cleanup-contentmanager-cache generation: 1 name: pipelines-operator resourceVersion: "72725" uid: e18b13fb-a96d-436f-be75-a9a0f2b07993 spec: namespace: pipelines serviceAccount: name: pipelines-installer source: catalog: packageName: openshift-pipelines-operator-rh upgradeConstraintPolicy: CatalogProvided version: 1.14.x sourceType: Catalog status: conditions: - lastTransitionTime: "2025-02-18T21:48:13Z" message: "" observedGeneration: 1 reason: Deprecated status: "False" type: Deprecated - lastTransitionTime: "2025-02-18T21:48:13Z" message: "" observedGeneration: 1 reason: Deprecated status: "False" type: PackageDeprecated - lastTransitionTime: "2025-02-18T21:48:13Z" message: "" observedGeneration: 1 reason: Deprecated status: "False" type: ChannelDeprecated - lastTransitionTime: "2025-02-18T21:48:13Z" message: "" observedGeneration: 1 reason: Deprecated status: "False" type: BundleDeprecated - lastTransitionTime: "2025-02-18T21:48:16Z" message: Installed bundle registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:f7b19ce26be742c4aaa458d37bc5ad373b5b29b20aaa7d308349687d3cbd8838 successfully observedGeneration: 1 reason: Succeeded status: "True" type: Installed - lastTransitionTime: "2025-02-18T21:48:16Z" message: desired state reached observedGeneration: 1 reason: Succeeded status: "True" type: Progressing install: bundle: name: openshift-pipelines-operator-rh.v1.14.5 version: 1.14.5 kind: List metadata: resourceVersion: ""
次のいずれかの方法を使用して CR を編集します。
Operator または拡張機能を特定のバージョン (
1.15.0
など) に固定する場合は、次の例のように CR を編集します。pipelines-operator.yaml
CR の例apiVersion: olm.operatorframework.io/v1 kind: ClusterExtension metadata: name: pipelines-operator spec: namespace: pipelines serviceAccount: name: pipelines-installer source: sourceType: Catalog catalog: packageName: openshift-pipelines-operator-rh version: "1.15.0" 1
- 1
- バージョンを
1.14.x
から1.15.0
に更新します。
許容可能な更新バージョンの範囲を定義する場合は、次の例のように CR を編集します。
バージョン範囲を指定した CR の例
apiVersion: olm.operatorframework.io/v1 kind: ClusterExtension metadata: name: pipelines-operator spec: namespace: pipelines serviceAccount: name: pipelines-installer source: sourceType: Catalog catalog: packageName: openshift-pipelines-operator-rh version: ">1.15, <1.17" 1
- 1
- 必要なバージョン範囲が、バージョン
1.15
より大きく、1.17
より小さいことを指定します。詳細は、「バージョン範囲のサポート」および「バージョン比較文字列」を参照してください。
チャネルから解決できる最新バージョンに更新する場合は、次の例のように CR を編集します。
チャネルを指定した CR の例
apiVersion: olm.operatorframework.io/v1 kind: ClusterExtension metadata: name: pipelines-operator spec: namespace: pipelines serviceAccount: name: pipelines-installer source: sourceType: Catalog catalog: packageName: openshift-pipelines-operator-rh channels: - latest 1
- 1
- 指定されたチャネルから解決できる最新リリースをインストールします。チャネルへの更新は自動的にインストールされます。値を配列として入力します。
チャネルとバージョンまたはバージョン範囲を指定する場合は、次の例のように CR を編集します。
チャネルとバージョン範囲を指定した CR の例
apiVersion: olm.operatorframework.io/v1 kind: ClusterExtension metadata: name: pipelines-operator spec: namespace: pipelines serviceAccount: name: pipelines-installer source: sourceType: Catalog catalog: packageName: openshift-pipelines-operator-rh channels: - latest version: "<1.16"
詳細は、「ターゲットバージョンを指定するカスタムリソース (CR) の例」を参照してください。
次のコマンドを実行して、クラスターに更新を適用します。
$ oc apply -f pipelines-operator.yaml
出力例
clusterextension.olm.operatorframework.io/pipelines-operator configured
検証
次のコマンドを実行して、チャネルとバージョンの更新が適用されていることを確認します。
$ oc get clusterextension pipelines-operator -o yaml
例10.17 出力例
apiVersion: olm.operatorframework.io/v1 kind: ClusterExtension metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"olm.operatorframework.io/v1","kind":"ClusterExtension","metadata":{"annotations":{},"name":"pipes"},"spec":{"namespace":"pipelines","serviceAccount":{"name":"pipelines-installer"},"source":{"catalog":{"packageName":"openshift-pipelines-operator-rh","version":"\u003c1.16"},"sourceType":"Catalog"}}} creationTimestamp: "2025-02-18T21:48:13Z" finalizers: - olm.operatorframework.io/cleanup-unpack-cache - olm.operatorframework.io/cleanup-contentmanager-cache generation: 2 name: pipes resourceVersion: "90693" uid: e18b13fb-a96d-436f-be75-a9a0f2b07993 spec: namespace: pipelines serviceAccount: name: pipelines-installer source: catalog: packageName: openshift-pipelines-operator-rh upgradeConstraintPolicy: CatalogProvided version: <1.16 sourceType: Catalog status: conditions: - lastTransitionTime: "2025-02-18T21:48:13Z" message: "" observedGeneration: 2 reason: Deprecated status: "False" type: Deprecated - lastTransitionTime: "2025-02-18T21:48:13Z" message: "" observedGeneration: 2 reason: Deprecated status: "False" type: PackageDeprecated - lastTransitionTime: "2025-02-18T21:48:13Z" message: "" observedGeneration: 2 reason: Deprecated status: "False" type: ChannelDeprecated - lastTransitionTime: "2025-02-18T21:48:13Z" message: "" observedGeneration: 2 reason: Deprecated status: "False" type: BundleDeprecated - lastTransitionTime: "2025-02-18T21:48:16Z" message: Installed bundle registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:8a593c1144709c9aeffbeb68d0b4b08368f528e7bb6f595884b2474bcfbcafcd successfully observedGeneration: 2 reason: Succeeded status: "True" type: Installed - lastTransitionTime: "2025-02-18T21:48:16Z" message: desired state reached observedGeneration: 2 reason: Succeeded status: "True" type: Progressing install: bundle: name: openshift-pipelines-operator-rh.v1.15.2 version: 1.15.2
トラブルシューティング
非推奨または存在しないターゲットバージョンまたはチャネルを指定する場合は、次のコマンドを実行して拡張機能のステータスを確認できます。
$ oc get clusterextension <operator_name> -o yaml
例10.18 存在しないバージョンの出力例
apiVersion: olm.operatorframework.io/v1 kind: ClusterExtension metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"olm.operatorframework.io/v1","kind":"ClusterExtension","metadata":{"annotations":{},"name":"pipes"},"spec":{"namespace":"pipelines","serviceAccount":{"name":"pipelines-installer"},"source":{"catalog":{"packageName":"openshift-pipelines-operator-rh","version":"9.x"},"sourceType":"Catalog"}}} creationTimestamp: "2025-02-18T21:48:13Z" finalizers: - olm.operatorframework.io/cleanup-unpack-cache - olm.operatorframework.io/cleanup-contentmanager-cache generation: 3 name: pipes resourceVersion: "93334" uid: e18b13fb-a96d-436f-be75-a9a0f2b07993 spec: namespace: pipelines serviceAccount: name: pipelines-installer source: catalog: packageName: openshift-pipelines-operator-rh upgradeConstraintPolicy: CatalogProvided version: 9.x sourceType: Catalog status: conditions: - lastTransitionTime: "2025-02-18T21:48:13Z" message: "" observedGeneration: 2 reason: Deprecated status: "False" type: Deprecated - lastTransitionTime: "2025-02-18T21:48:13Z" message: "" observedGeneration: 2 reason: Deprecated status: "False" type: PackageDeprecated - lastTransitionTime: "2025-02-18T21:48:13Z" message: "" observedGeneration: 2 reason: Deprecated status: "False" type: ChannelDeprecated - lastTransitionTime: "2025-02-18T21:48:13Z" message: "" observedGeneration: 2 reason: Deprecated status: "False" type: BundleDeprecated - lastTransitionTime: "2025-02-18T21:48:16Z" message: Installed bundle registry.redhat.io/openshift-pipelines/pipelines-operator-bundle@sha256:8a593c1144709c9aeffbeb68d0b4b08368f528e7bb6f595884b2474bcfbcafcd successfully observedGeneration: 3 reason: Succeeded status: "True" type: Installed - lastTransitionTime: "2025-02-18T21:48:16Z" message: 'error upgrading from currently installed version "1.15.2": no bundles found for package "openshift-pipelines-operator-rh" matching version "9.x"' observedGeneration: 3 reason: Retrying status: "True" type: Progressing install: bundle: name: openshift-pipelines-operator-rh.v1.15.2 version: 1.15.2
関連情報
10.1.6. Operator の削除
ClusterExtension
カスタムリソース (CR) を削除することで、Operator とそのカスタムリソース定義 (CRD) を削除できます。
前提条件
- カタログがインストールされています。
- Operator がインストールされています。
手順
次のコマンドを実行して、Operator とその CRD を削除します。
$ oc delete clusterextension <operator_name>
出力例
clusterextension.olm.operatorframework.io "<operator_name>" deleted
検証
次のコマンドを実行して、Operator とそのリソースが削除されたことを確認します。
次のコマンドを実行して、Operator が削除されたことを確認します。
$ oc get clusterextensions
出力例
No resources found
次のコマンドを実行して、Operator のシステム namespace が削除されたことを確認します。
$ oc get ns <operator_name>-system
出力例
Error from server (NotFound): namespaces "<operator_name>-system" not found
10.2. 拡張機能リソースへのユーザーアクセス
クラスター拡張機能がインストールされ、Operator Lifecycle Manager (OLM) v1 によって管理されるようになると、多くの場合、拡張機能はクラスター上で新しい API リソースを公開する CustomResourceDefinition
オブジェクト (CRD) を提供できるようになります。通常、クラスター管理者はデフォルトでこれらのリソースへの完全な管理アクセス権を持ちますが、クラスター管理者以外のユーザー、つまり 通常のユーザー は十分な権限を持たない可能性があります。
OLM v1 では、インストールされた拡張機能が提供する API を通常のユーザーが操作できるように、ロールベースのアクセス制御 (RBAC) を自動的に設定または管理することはありません。クラスター管理者は、このようなユーザー向けにカスタムリソース (CR) を作成、表示、または編集するために必要な RBAC ポリシーを定義する必要があります。
拡張機能リソースへのユーザーアクセスについて説明されている RBAC 権限は、クラスター拡張機能自体の OLM v1 ベースの初期インストールを有効にするためにサービスアカウントに追加する必要がある権限とは異なります。拡張機能をインストールする際の RBAC 要件に関する詳細は、「拡張機能の管理」の「クラスター拡張機能の権限」を参照してください。
10.2.1. ユーザー用の一般的なデフォルトクラスターロール
インストールされたクラスター拡張機能には、拡張機能によって提供される API リソースに対する通常のユーザーのロールベースのアクセス制御 (RBAC) を決定するためのデフォルトのクラスターロールが含まれている場合があります。一般的なクラスターロールのセットとしては、次のようなものがあります。
view
クラスターロール- クラスター全体の指定された API リソースのすべてのカスタムリソース (CR) オブジェクトへの読み取り専用アクセスを許可します。リソースを表示する必要はあるが、リソースを変更する権限は不要な一般ユーザーを対象としています。監視目的やアクセス制限付きの表示に最適です。
edit
クラスターロール- クラスター内のすべての CR オブジェクトを変更することをユーザーに許可します。ユーザーによるリソースの作成、更新、削除を許可するものであり、リソースを管理する必要があるが、RBAC を制御したり他のユーザーの権限を管理したりする必要のないチームメンバーに適しています。
admin
クラスターロール-
クラスター全体の指定された API リソースのすべてのカスタムリソースオブジェクトについて、
create
、update
、delete
動詞を含む完全な権限を付与します。
関連情報
- User-facing roles (Kubernetes ドキュメント)
10.2.2. クラスター拡張機能によって公開される API グループとリソースの確認
クラスター拡張機能リソースへのユーザーアクセスを許可する適切な RBAC ポリシーを作成するには、インストールされた拡張機能によって公開される API グループとリソースを把握する必要があります。管理者は、OpenShift CLI (oc
) を使用して、クラスターにインストールされているカスタムリソース定義 (CRD) を調べることができます。
前提条件
- クラスター拡張機能がクラスターにインストールされている。
手順
特定のクラスター拡張機能をターゲットとするラベルセレクターを名前で指定して、その拡張機能によって所有されている CRD のみを検索しながら、インストールされている CRD をリスト表示するには、次のコマンドを実行します。
$ oc get crds -l 'olm.operatorframework.io/owner-kind=ClusterExtension,olm.operatorframework.io/owner-name=<cluster_extension_name>'
または、インストールされているすべての CRD を検索し、CRD 名で個別に調べることもできます。
次のコマンドを実行して、クラスターに現在インストールされている利用可能なすべてのカスタムリソース定義 (CRD) をリスト表示します。
$ oc get crds
探している CRD を出力で見つけます。
次のコマンドを実行して、個々の CRD をさらに調べて、その API グループを見つけます。
$ oc get crd <crd_name> -o yaml
10.2.3. カスタムロールバインディングを使用した拡張機能リソースへのユーザーアクセスの許可
クラスター管理者は、カスタムロールバインディングを使用して、ロールベースのアクセス制御 (RBAC) ポリシーを手動で作成および設定し、ユーザーに拡張機能リソースへのアクセス権を付与できます。
前提条件
- クラスター拡張機能がクラスターにインストールされている。
- API グループとリソース名のリストがある。「クラスター拡張機能によって公開される API グループとリソースの確認」の説明を参照してください。
手順
インストールされたクラスター拡張機能にデフォルトのクラスターロールがない場合は、1 つ以上のロールを手動で作成します。
「ユーザー用の一般的なデフォルトクラスターロール」で説明されているロールセットのユースケースを検討します。
たとえば、次の
ClusterRole
オブジェクト定義を 1 つ以上作成し、<cluster_extension_api_group>
と<cluster_extension_custom_resource>
を、インストールされたクラスター拡張機能によって提供される実際の API グループとリソース名に置き換えます。view-custom-resource.yaml
ファイルの例apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: view-custom-resource rules: - apiGroups: - <cluster_extension_api_group> resources: - <cluster_extension_custom_resources> verbs: - get - list - watch
edit-custom-resource.yaml
ファイルの例apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: edit-custom-resource rules: - apiGroups: - <cluster_extension_api_group> resources: - <cluster_extension_custom_resources> verbs: - get - list - watch - create - update - patch - delete
admin-custom-resource.yaml
ファイルの例apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: admin-custom-resource rules: - apiGroups: - <cluster_extension_api_group> resources: - <cluster_extension_custom_resources> verbs: - '*' 1
- 1
verbs
にワイルドカード (*
) を設定すると、指定したリソースに対するすべてのアクションが許可されます。
作成した YAML ファイルに対して次のコマンドを実行して、クラスターロールを作成します。
$ oc create -f <filename>.yaml
クラスターロールを個々のユーザー名またはグループ名にバインドすることで、クラスターロールを特定のユーザーまたはグループに関連付け、リソースに対する必要な権限を付与します。
すべての namespace へのアクセスを許可する クラスターロールバインディング、または特定の namespace 内でアクセスを許可する ロールバインディング のオブジェクト定義を作成します。
次のクラスターロールバインディングの例では、すべての namespace のカスタムリソースに対する読み取り専用の
view
アクセスを許可します。ユーザーの
ClusterRoleBinding
オブジェクトの例apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: view-custom-resource-binding subjects: - kind: User name: <user_name> roleRef: kind: ClusterRole name: view-custom-resource apiGroup: rbac.authorization.k8s.io
ユーザーの
ClusterRoleBinding
オブジェクトの例apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: view-custom-resource-binding subjects: - kind: Group name: <group_name> roleRef: kind: ClusterRole name: view-custom-resource apiGroup: rbac.authorization.k8s.io
次のロールバインディングでは、
edit
権限を特定の namespace に制限します。ユーザーの
RoleBinding
オブジェクトの例apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: edit-custom-resource-edit-binding namespace: <namespace> subjects: - kind: User name: <username> roleRef: kind: Role name: custom-resource-edit apiGroup: rbac.authorization.k8s.io
- オブジェクト定義を YAML ファイルに保存します。
以下のコマンドを実行してオブジェクトを作成します。
$ oc create -f <filename>.yaml
10.2.4. 集約されたクラスターロールを使用した拡張機能リソースへのユーザーアクセスの許可
クラスター管理者は、集約されたクラスターロールを使用して拡張機能リソースへのユーザーアクセスを許可するように、ロールベースのアクセス制御 (RBAC) ポリシーを設定できます。
既存のデフォルトのクラスターロールを自動的に拡張するには、次のラベルを 1 つ以上 ClusterRole
オブジェクトに追加して、集約ラベル を追加できます。
ClusterRole
オブジェクトの集約ラベル
# .. metadata: labels: rbac.authorization.k8s.io/aggregate-to-admin: "true" rbac.authorization.k8s.io/aggregate-to-edit: "true" rbac.authorization.k8s.io/aggregate-to-view: "true" # ..
これにより、すでに view
、edit
、または admin
ロールを持っているユーザーが、ClusterRole
オブジェクトによって指定されたカスタムリソースとやり取りできるようになります。特定のユーザーまたはグループに、ロールまたはクラスターロールのバインディングを追加する必要はありません。
前提条件
- クラスター拡張機能がクラスターにインストールされている。
- API グループとリソース名のリストがある。「クラスター拡張機能によって公開される API グループとリソースの確認」の説明を参照してください。
手順
クラスター拡張機能によって提供される API グループとリソースを指定するクラスターロールのオブジェクト定義を作成し、集約ラベルを追加して 1 つ以上の既存のデフォルトクラスターロールを拡張します。
集約ラベルを使用した
ClusterRole
オブジェクトの例apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: view-custom-resource-aggregated labels: rbac.authorization.k8s.io/aggregate-to-view: "true" rules: - apiGroups: - <cluster_extension_api_group> resources: - <cluster_extension_custom_resource> verbs: - get - list - watch
create
、update
、delete
などの適切な動詞を使用して、edit
およびadmin
用の同様のClusterRole
オブジェクトを作成できます。集約ラベルを使用すると、カスタムリソースの権限がデフォルトのロールに追加されます。- オブジェクト定義を YAML ファイルに保存します。
以下のコマンドを実行してオブジェクトを作成します。
$ oc create -f <filename>.yaml
関連情報
- Aggregated ClusterRoles (Kubernetes ドキュメント)
10.3. 更新パス
インストールされたクラスター拡張機能の 更新パス (アップグレードエッジまたはアップグレード制約とも呼ばれる) を決定する場合、Operator Lifecycle Manager (OLM) v1 は、OpenShift Container Platform 4.16 以降、OLM (Classic) セマンティクスをサポートします。このサポートは、replaces
、skips
、skipRange
ディレクティブを含め、OLM (Classic) の動作に従いますが、いくつかの違いがあります。
OLM (Classic) セマンティクスをサポートすることにより、OLM v1 はカタログからの更新グラフを正確に反映します。
元の OLM (Classic) 実装との違い
複数の後継候補がある場合の OLM v1 の動作は、次のように異なります。
- OLM (Classic) では、チャネルヘッドに最も近い後継が選択されます。
- OLM v1 では、後継の中でセマンティックバージョン (semver) が最も大きいものが選択されます。
次のファイルベースカタログ (FBC) チャネルエントリーのセットを検討してください。
# ... - name: example.v3.0.0 skips: ["example.v2.0.0"] - name: example.v2.0.0 skipRange: >=1.0.0 <2.0.0
1.0.0
がインストールされている場合、OLM v1 の動作は次のように異なります。-
v2.0.0
がスキップされ、replaces
チェーン上にないため、OLM (Classic) はv2.0.0
への更新パスを検出しません。 -
OLM v1 には
replaces
チェーンの概念がないため、OLM v1 は更新パスを検出します。OLM v1 は、現在インストールされているバージョンに対応するreplace
、skip
、またはskipRange
の値を持つすべてのエントリーを検索します。
-
10.3.1. バージョン範囲のサポート
Operator Lifecycle Manager (OLM) v1 では、Operator または拡張機能のカスタムリソース (CR) で比較文字列を使用してバージョン範囲を指定できます。CR でバージョン範囲を指定すると、OLM v1 は、そのバージョン範囲内で解決できる Operator の最新バージョンをインストールまたは更新します。
解決されるバージョンのワークフロー
- 解決されるバージョンは、Operator と環境の制約を満たす Operator の最新バージョンです。
- 正常に解決された場合、指定された範囲内の Operator 更新は自動的にインストールされます。
- 指定された範囲外にある場合、または正常に解決できない場合、その更新はインストールされません。
10.3.2. バージョン比較文字列
Operator または拡張機能のカスタムリソース (CR) の spec.version
フィールドに比較文字列を追加することで、バージョン範囲を定義できます。比較文字列は、スペースまたはコンマで区切られた値と、二重引用符 ("
) で囲まれた 1 つ以上の比較演算子のリストです。文字列の間に比較演算子の OR
または二重縦棒 (||
) を含めることで、別の比較文字列を追加できます。
比較演算子 | 定義 |
---|---|
| 等しい |
| 等しくない |
| より大きい |
| より小さい |
| より大か等しい |
| より小か等しい |
次の例のような範囲比較を使用して、Operator または拡張機能の CR でバージョン範囲を指定できます。
バージョン範囲の比較例
apiVersion: olm.operatorframework.io/v1 kind: ClusterExtension metadata: name: <clusterextension_name> spec: namespace: <installed_namespace> serviceAccount: name: <service_account_installer_name> source: sourceType: Catalog catalog: packageName: <package_name> version: ">=1.11, <1.13"
すべてのタイプの比較文字列でワイルドカード文字を使用できます。OLM v1 では、x
、X
、およびアスタリスク (*
) をワイルドカード文字として使用できます。ワイルドカード文字と比較演算子の等号 (=
) を使用する場合は、パッチまたはマイナーバージョンレベルでの比較を定義します。
ワイルドカード比較 | 一致する文字列 |
---|---|
|
|
|
|
|
|
|
|
比較演算子のチルダ (~
) を使用して、パッチリリースを比較できます。パッチリリースの比較では、次のメジャーバージョンまでのマイナーバージョンを指定します。
パッチリリースの比較 | 一致する文字列 |
---|---|
|
|
|
|
|
|
|
|
|
|
比較演算子のキャレット (^
) を使用して、メジャーリリースを比較できます。最初の stable リリースが公開される前にメジャーリリース比較を使用する場合、マイナーバージョンにより API の安定レベルが定義されます。セマンティックバージョン (semver) 仕様では、最初の安定リリースは 1.0.0
バージョンとして公開されます。
メジャーリリースの比較 | 一致する文字列 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10.3.3. ターゲットバージョンを指定するカスタムリソース (CR) の例
Operator Lifecycle Manager (OLM) v1 では、クラスター管理者はカスタムリソース (CR) で Operator または拡張機能のターゲットバージョンを宣言的に設定できます。
次のフィールドのいずれかを指定して、ターゲットバージョンを定義できます。
- チャネル
- バージョン番号
- バージョン範囲
CR でチャネルを指定すると、OLM v1 は、指定されたチャネル内で解決できる最新バージョンの Operator または拡張機能をインストールします。指定されたチャネルに更新が公開されると、OLM v1 はそのチャネルから解決できる最新リリースに自動的に更新します。
チャネルを指定した CR の例
apiVersion: olm.operatorframework.io/v1
kind: ClusterExtension
metadata:
name: <clusterextension_name>
spec:
namespace: <installed_namespace>
serviceAccount:
name: <service_account_installer_name>
source:
sourceType: Catalog
catalog:
packageName: <package_name>
channels:
- latest 1
- 1
- オプション: 指定したチャネルから解決できる最新のリリースをインストールします。チャネルへの更新は自動的にインストールされます。
channels
パラメーターの値を配列として指定します。
CR で Operator または拡張機能のターゲットバージョンを指定すると、OLM v1 は指定されたバージョンをインストールします。CR でターゲットバージョンが指定されている場合、カタログに更新が公開されても OLM v1 はターゲットバージョンを変更しません。
クラスターにインストールされている Operator のバージョンを更新する必要がある場合は、Operator の CR を手動で編集する必要があります。Operator のターゲットバージョンを指定すると、Operator のバージョンが指定されたリリースに固定されます。
ターゲットバージョンを指定した CR の例
apiVersion: olm.operatorframework.io/v1
kind: ClusterExtension
metadata:
name: <clusterextension_name>
spec:
namespace: <installed_namespace>
serviceAccount:
name: <service_account_installer_name>
source:
sourceType: Catalog
catalog:
packageName: <package_name>
version: "1.11.1" 1
- 1
- オプション: ターゲットバージョンを指定します。インストールされている Operator または拡張機能のバージョンを更新する必要がある場合は、CR のこのフィールドを目的のターゲットバージョンに手動で更新する必要があります。
Operator または拡張機能の許容可能なバージョン範囲を定義する場合は、比較文字列を使用してバージョン範囲を指定できます。バージョン範囲を指定すると、OLM v1 は、Operator Controller で解決できる最新バージョンの Operator または拡張機能をインストールします。
バージョン範囲を指定した CR の例
apiVersion: olm.operatorframework.io/v1
kind: ClusterExtension
metadata:
name: <clusterextension_name>
spec:
namespace: <installed_namespace>
serviceAccount:
name: <service_account_installer_name>
source:
sourceType: Catalog
catalog:
packageName: <package_name>
version: ">1.11.1" 1
- 1
- オプション: 必要なバージョン範囲が、バージョン
1.11.1
より大きいことを指定します。詳細は、「バージョン範囲のサポート」を参照してください。
CR を作成または更新した後、次のコマンドを実行して設定ファイルを適用します。
コマンド構文
$ oc apply -f <extension_name>.yaml
10.3.4. 更新またはロールバックの強制
OLM v1 は、次のメジャーバージョンへの自動更新や以前のバージョンへのロールバックをサポートしていません。メジャーバージョンの更新またはロールバックを実行する場合は、手動で更新を確認して強制する必要があります。
手動更新またはロールバックを強制した場合の影響を確認する必要があります。更新またはロールバックの強制を検証しないと、データ損失などの致命的な結果が生じる可能性があります。
前提条件
- カタログがインストールされています。
- Operator または拡張機能がインストールされている。
- サービスアカウントを作成し、インストールする拡張機能をインストール、更新、管理するために十分なロールベースのアクセス制御 (RBAC) を割り当てました。詳細は GCP サービスアカウントの作成 を参照してください。
手順
次の例に示すように、Operator または拡張機能のカスタムリソース (CR) を編集します。
CR の例:
apiVersion: olm.operatorframework.io/v1 kind: ClusterExtension metadata: name: <clusterextension_name> spec: namespace: <installed_namespace> 1 serviceAccount: name: <service_account_installer_name> 2 source: sourceType: Catalog catalog: packageName: <package_name> channels: - <channel_name> 3 version: <version_or_version_range> 4 upgradeConstraintPolicy: SelfCertified 5
- 1
pipelines
やmy-extension
など、バンドルをインストールする namespace を指定します。拡張機能は継続してクラスタースコープであり、異なる namespace にインストールされているリソースが含まれる可能性があります。- 2
- 拡張機能をインストール、更新、管理するために作成したサービスアカウントの名前を指定します。
- 3
- オプション: チャネル名を、
pipelines-1.14
やlatest
などの配列の形で指定します。 - 4
- オプション: インストールまたは更新するパッケージのバージョンまたはバージョン範囲 (
1.14.0
、1.14.x
、>=1.16
など) を指定します。詳細は、「ターゲットバージョンを指定するカスタムリソース (CR) の例」および「バージョン範囲のサポート」を参照してください。 - 5
- オプション: アップグレード制約ポリシーを指定します。更新またはロールバックを強制するには、フィールドを
SelfCertified
に設定します。指定されていない場合、デフォルト設定はCatalogProvided
になります。CatalogProvided
設定が更新されるのは、新しいバージョンがパッケージ作成者によって設定されたアップグレード制約を満たしている場合だけです。
次のコマンドを実行して、Operator または拡張機能 CR に変更を適用します。
$ oc apply -f <extension_name>.yaml
関連情報
10.3.5. OpenShift Container Platform バージョンとの互換性
クラスター管理者は、OpenShift Container Platform クラスターを次のマイナーバージョンに更新する前に、インストールされているすべての Operator がクラスターの次のマイナーバージョン (4.y+1) と互換性のあるバンドルバージョンに更新されていることを確認する必要があります。
たとえば、Kubernetes は定期的に特定の API を非推奨とし、後続のリリースで削除します。拡張機能が非推奨の API を使用している場合、OpenShift Container Platform クラスターをその API が削除された Kubernetes バージョンに更新すると、拡張機能が機能しなくなる可能性があります。
Operator の作成者は、特定のバンドルバージョンがサポートされておらず、何らかの理由で特定のクラスターマイナーバージョン以降の OpenShift Container Platform で正しく動作しないことがわかっている場合、Operator と互換性のある OpenShift Container Platform の最大バージョンを設定できます。
作成者は、Operator プロジェクトのクラスターサービスバージョン (CSV) で olm.maxOpenShiftVersion
アノテーションを設定することで、インストール済みの Operator を互換性のあるバージョンに更新する前に管理者がクラスターを更新するのを防ぐことができます。
olm.maxOpenShiftVersion
アノテーションを含む CSV の例
apiVersion: operators.coreos.com/v1alpha1
kind: ClusterServiceVersion
metadata:
annotations:
"olm.properties": '[{"type": "olm.maxOpenShiftVersion", "value": "<cluster_version>"}]' 1
- 1
- Operator と互換性のある OpenShift Container Platform (4.y) の最新のマイナーバージョンを指定します。たとえば、
value
を4.18
に設定すると、このバンドルがクラスターにインストールされている場合に、クラスターが 4.18 より後のマイナーバージョンに更新されなくなります。olm.maxOpenShiftVersion
フィールドが省略されている場合、この Operator によってクラスターの更新はブロックされません。
OLM v1 は、クラスターの次のマイナーバージョン (4.y+1) を決定するときに、メジャーバージョンとマイナーバージョン (x と y) のみを比較対象として考慮します。パッチリリースまたはプレリリースバージョンとも呼ばれる z-stream バージョン (4.y.z) は無視されます。
たとえば、クラスターの現在のバージョンが 4.18.0
の場合、次のマイナーバージョンは 4.19
です。現在のバージョンが 4.18.0-rc1
の場合も、次のマイナーバージョンは 4.19
です。
関連情報
- Deprecated API Migration Guide (Kubernetes ドキュメント)
10.3.5.1. olm クラスター Operator によってブロックされたクラスターの更新
インストール済み Operator の olm.maxOpenShiftVersion
フィールドが設定されており、クラスター管理者が、Operator が有効な更新パスを提供しないバージョンにクラスターを更新しようとすると、クラスターの更新が失敗し、olm
クラスター Operator の Upgradeable
ステータスが False
に設定されます。
この問題を解決するには、クラスター管理者は、インストールされている Operator を有効な更新パスのあるバージョンに更新するか (有効な更新パスがある場合)、Operator をアンインストールする必要があります。その後、クラスターの更新を再度試みることができます。
10.4. カスタムリソース定義 (CRD) アップグレードの安全性
クラスター拡張機能によって提供されるカスタムリソース定義 (CRD) を更新すると、Operator Lifecycle Manager (OLM) v1 は CRD アップグレードの安全性事前チェックを実行し、その CRD の以前のバージョンとの下位互換性を確保します。CRD 更新は、クラスター上で変更が進行する前にその検証に合格する必要があります。
関連情報
10.4.1. 禁止されている CRD アップグレード変更
既存のカスタムリソース定義 (CRD) に対する次の変更は、CRD アップグレードの安全性事前チェックによって検出され、アップグレードが妨げられます。
- 既存の CRD バージョンに新しい必須フィールドを追加する
- 既存の CRD バージョンから既存フィールドを削除する
- 既存の CRD バージョンで既存のフィールドタイプを変更する
- 以前はデフォルト値がなかったフィールドに新しいデフォルト値を追加する
- フィールドのデフォルト値を変更する
- フィールドの既存のデフォルト値を削除する
- これまで列挙制限がなかった既存フィールドに新しい列挙制限を追加する
- 既存フィールドから既存の列挙値を削除する
- 既存バージョンで既存フィールドの最小値を増やす
- 既存バージョンで既存フィールドの最大値を減らす
- 以前は制約がなかったフィールドに、最小または最大のフィールド制約を追加する
最小値と最大値の変更に関するルールは、minimum
、minLength
、minProperties
、minItems
、maximum
、maxLength
、maxProperties
、および maxItems
の制約に適用されます。
既存の CRD に対する次の変更は、CRD アップグレードの安全性事前チェックによって報告され、アップグレードが防止されます。ただし、操作は技術的には Kubernetes API サーバーによって処理されます。
-
スコープを
Cluster
からNamespace
へ、またはNamespace
からクラスター
に変更する - 既存の保存された CRD バージョンを削除する
CRD アップグレード安全性事前チェックで禁止されているアップグレード変更のいずれかが検出されると、CRD アップグレードで検出された禁止されている変更ごとにエラーがログに記録されます。
CRD への変更が禁止されている変更カテゴリーのいずれにも該当せず、許可されている変更として適切に検出もされない場合、CRD アップグレードの安全性事前チェックによってアップグレードが防止され、"未知の変更" としてエラーがログに記録されます。
10.4.2. 許可された CRD アップグレード変更
既存のカスタムリソース定義 (CRD) に対する次の変更は、下位互換性の観点で安全であり、CRD アップグレードの安全性事前チェックによってアップグレードが停止されることはありません。
- フィールドで許可された列挙値のリストに新しい列挙値を追加する
- 既存バージョンで既存の必須フィールドをオプションフィールドに変更する
- 既存バージョンで既存フィールドの最小値を減らす
- 既存バージョンで既存フィールドの最大値を増やす
- 既存バージョンを変更せずに新規 CRD バージョンを追加する
10.4.3. CRD アップグレードの安全性事前チェックを無効にする
カスタムリソース定義 (CRD) アップグレード安全性事前チェックは、CRD を提供する ClusterExtension
オブジェクトに、preflight.crdUpgradeSafety.disabled
フィールドを true
の値で追加することで無効にできます。
CRD アップグレードの安全性事前チェックを無効にすると、保存されている CRD バージョンとの下位互換性が失われ、クラスターでその他の予期しない結果が発生する可能性があります。
個々のフィールド検証を無効にすることはできません。CRD アップグレードの安全性事前チェックを無効にすると、すべてのフィールド検証が無効になります。
次のチェックは Kubernetes API サーバーによって処理されます。
-
スコープを
Cluster
からNamespace
へ、またはNamespace
からクラスター
に変更する - 既存の保存された CRD バージョンを削除する
Operator Lifecycle Manager (OLM) v1 を介して CRD アップグレードの安全性事前チェックを無効にした後も、これら 2 つの操作は Kubernetes によって引き続き防止されます。
前提条件
- クラスター拡張機能がインストールされている。
手順
CRD の
ClusterExtension
オブジェクトを編集します。$ oc edit clusterextension <clusterextension_name>
preflight.crdUpgradeSafety.disabled
フィールドをtrue
に設定します。例10.19
ClusterExtension
オブジェクトの例apiVersion: olm.operatorframework.io/v1alpha1 kind: ClusterExtension metadata: name: clusterextension-sample spec: installNamespace: default packageName: argocd-operator version: 0.6.0 preflight: crdUpgradeSafety: disabled: true 1
- 1
true
に設定します。
10.4.4. 安全でない CRD 変更の例
次の例は、CRD アップグレードの安全性事前チェックで検出される、サンプルカスタムリソース定義 (CRD) のセクションに対する特定の変更を示しています。
次の例では、いかが変更前の CRD オブジェクトの状態であると想定します。
例10.20 CRD オブジェクトの例
apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.13.0 name: example.test.example.com spec: group: test.example.com names: kind: Sample listKind: SampleList plural: samples singular: sample scope: Namespaced versions: - name: v1alpha1 schema: openAPIV3Schema: properties: apiVersion: type: string kind: type: string metadata: type: object spec: type: object status: type: object pollInterval: type: string type: object served: true storage: true subresources: status: {}
10.4.4.1. スコープの変更
次のカスタムリソース定義 (CRD) の例では、scope
フィールドが Namespaced
から Cluster
に変更されています。
例10.21 CRD におけるスコープ変更の例
spec: group: test.example.com names: kind: Sample listKind: SampleList plural: samples singular: sample scope: Cluster versions: - name: v1alpha1
例10.22 エラー出力の例
validating upgrade for CRD "test.example.com" failed: CustomResourceDefinition test.example.com failed upgrade safety validation. "NoScopeChange" validation failed: scope changed from "Namespaced" to "Cluster"
10.4.4.2. 保存されたバージョンの削除
次のカスタムリソース定義 (CRD) の例では、既存の保存バージョン v1alpha1
が削除されています。
例10.23 CRD で保存されたバージョンを削除した例
versions: - name: v1alpha2 schema: openAPIV3Schema: properties: apiVersion: type: string kind: type: string metadata: type: object spec: type: object status: type: object pollInterval: type: string type: object
例10.24 エラー出力の例
validating upgrade for CRD "test.example.com" failed: CustomResourceDefinition test.example.com failed upgrade safety validation. "NoStoredVersionRemoved" validation failed: stored version "v1alpha1" removed
10.4.4.3. 既存フィールドの削除
次のカスタムリソース定義 (CRD) の例では、pollInterval
プロパティーフィールドが v1alpha1
スキーマから削除されています。
例10.25 CRD の既存フィールドの削除例
versions: - name: v1alpha1 schema: openAPIV3Schema: properties: apiVersion: type: string kind: type: string metadata: type: object spec: type: object status: type: object type: object
例10.26 エラー出力の例
validating upgrade for CRD "test.example.com" failed: CustomResourceDefinition test.example.com failed upgrade safety validation. "NoExistingFieldRemoved" validation failed: crd/test.example.com version/v1alpha1 field/^.spec.pollInterval may not be removed
10.4.4.4. 必須フィールドの追加
次のカスタムリソース定義 (CRD) の例では、pollInterval
プロパティーが必須フィールドに変更されています。
例10.27 CRD に必須フィールドを追加する例
versions: - name: v1alpha2 schema: openAPIV3Schema: properties: apiVersion: type: string kind: type: string metadata: type: object spec: type: object status: type: object pollInterval: type: string type: object required: - pollInterval
例10.28 エラー出力の例
validating upgrade for CRD "test.example.com" failed: CustomResourceDefinition test.example.com failed upgrade safety validation. "ChangeValidator" validation failed: version "v1alpha1", field "^": new required fields added: [pollInterval]
Legal Notice
Copyright © 2024 Red Hat, Inc.
OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).
Modified versions must remove all Red Hat trademarks.
Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.
Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.