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>"
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
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
- オプション: 指定したチャネルから解決できる最新のリリースをインストールします。チャネルへの更新は自動的にインストールされます。
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"
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
- オプション: ターゲットバージョンを指定します。インストールされている 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"
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.11.1
より大きいことを指定します。詳細は、「バージョン範囲のサポート」を参照してください。
CR を作成または更新した後、次のコマンドを実行して設定ファイルを適用します。
コマンド構文
oc apply -f <extension_name>.yaml
$ 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
CustomResourceDefinition 'logfilemetricexporters.logging.kubernetes.io' already exists in namespace 'kubernetes-logging' and cannot be managed by operator-controller
このエラーメッセージは、オブジェクトがすでに別のクラスター拡張機能によって管理されており、再割り当てまたは共有できないことを示します。
2.2.2.3. 留意事項
クラスターまたは拡張機能の管理者は、次の留意事項を確認する必要があります。
- バンドルの一意性
- 同じ CRD を提供する Operator バンドルが複数回インストールされていないことを確認します。これにより、所有権の競合によるインストール失敗の可能性を回避できます。
- オブジェクトの共有回避
- 類似のリソースと対話するために異なるクラスター拡張機能が必要な場合は、それらが別々のオブジェクトを管理していることを確認します。単独所有の強制により、クラスター拡張機能は同じオブジェクトを共同で管理できません。