2.2. Operator Framework パッケージ形式
Operator Framework パッケージング形式を使用すると、OpenShift Container Platform の Operator Lifecycle Manager (OLM) 向けに Operator メタデータをバンドルして公開できます。この形式は、バンドルイメージ、依存関係、およびファイルベースのカタログスキーマを対象としています。
2.2.1. Bundle Format リンクのコピーリンクがクリップボードにコピーされました!
バンドル形式は、Operator Framework パッケージング形式であり、Operator メタデータをカタログに配布する作業を簡素化します。Operator バンドルとは、Kubernetes マニフェストとメタデータを格納する、実行不可能なコンテナーイメージとして提供される単一の Operator バージョンのことです。
バンドルイメージの保存および配布は、podman、docker、および Quay などのコンテナーレジストリーを使用して管理されます。
Operator メタデータには以下を含めることができます。
- Operator を識別する情報 (名前およびバージョンなど)。
- UI を駆動する追加情報 (アイコンや一部のカスタムリソース (CR) など)。
- 必須および提供される API。
- 関連するイメージ。
マニフェストを Operator Registry データベースに読み込む際に、以下の要件が検証されます。
- バンドルには、アノテーションで定義された 1 つ以上のチャネルが含まれる必要がある。
- すべてのバンドルには、1 つのクラスターサービスバージョン (CSV) がある。
- CSV がクラスターリソース定義 (CRD) を所有する場合、その CRD はバンドルに存在する必要がある。
2.2.1.1. マニフェスト リンクのコピーリンクがクリップボードにコピーされました!
バンドルマニフェストは、Operator バンドル内の Kubernetes オブジェクトであり、Operator のデプロイメントとロールベースアクセス制御 (RBAC) モデルを定義します。
バンドルには、1 つのクラスターサービスバージョン (CSV) と、通常はその CSV が所有する API のカスタムリソース定義 (CRD) が、その CSV の /manifests ディレクトリーに含まれています。
Bundle Format のレイアウトの例
etcd
├── manifests
│ ├── etcdcluster.crd.yaml
│ └── etcdoperator.clusterserviceversion.yaml
│ └── secret.yaml
│ └── configmap.yaml
└── metadata
└── annotations.yaml
└── dependencies.yaml
2.2.1.1.1. 追加のサポート対象 Kubernetes オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
Operator バンドルでは、任意で /manifests ディレクトリーに追加の Kubernetes オブジェクトタイプを含めることができます。これは、クラスターサービスバージョン (CSV) とともにデプロイ可能です。含まれる場合、Operator Lifecycle Manager (OLM) は、CSV と並行して、これらのオブジェクトのライフサイクルを作成および管理します。
以下のオプションオブジェクトタイプがサポートされています。
-
ClusterRole -
ClusterRoleBinding -
ConfigMap -
ConsoleCLIDownload -
ConsoleLink -
ConsoleQuickStart -
ConsoleYamlSample -
PodDisruptionBudget -
PriorityClass -
PrometheusRule -
Role -
RoleBinding -
Secret -
Service -
ServiceAccount -
ServiceMonitor -
VerticalPodAutoscaler
OLM は、これらのオプションオブジェクトのライフサイクルを次のように管理します。
- CSV が削除されると、OLM はオプションオブジェクトを削除します。
CSV がアップグレードされると、以下を実行します。
- オプションオブジェクトの名前が同じである場合、OLM はこれを更新します。
- オプションオブジェクトの名前がバージョン間で変更された場合、OLM はこれを削除し、再作成します。
2.2.1.2. Annotations リンクのコピーリンクがクリップボードにコピーされました!
metadata/annotations.yaml ファイル内の Operator バンドルアノテーションは、バンドルのインデックス化方法を記述する集約メタデータを定義します。これらのアノテーションは、メディアタイプ、マニフェストパス、パッケージ名、チャネル、およびカタログ登録のデフォルトチャネルを指定します。
バンドルには、/metadata ディレクトリーに annotations.yaml ファイルが含まれています。
annotations.yaml の例
annotations:
operators.operatorframework.io.bundle.mediatype.v1: "registry+v1"
operators.operatorframework.io.bundle.manifests.v1: "manifests/"
operators.operatorframework.io.bundle.metadata.v1: "metadata/"
operators.operatorframework.io.bundle.package.v1: "test-operator"
operators.operatorframework.io.bundle.channels.v1: "beta,stable"
operators.operatorframework.io.bundle.channel.default.v1: "stable"
各項目の説明:
annotations.operators.operatorframework.io.bundle.mediatype.v1-
Operator バンドルのメディアタイプまたは形式を指定します。
registry+v1形式の場合、これに CSV および関連付けられた Kubernetes オブジェクトが含まれることを意味します。 annotations.operators.operatorframework.io.bundle.manifests.v1-
Operator マニフェストが含まれるディレクトリーへのイメージのパスを指定します。このラベルは今後使用するために予約され、現時点ではデフォの
manifests/に設定されています。manifests.v1の値は、バンドルに Operator マニフェストが含まれることを示します。 annotations.operators.operatorframework.io.bundle.metadata.v1-
バンドルに関するメタデータファイルが含まれるディレクトリーへのイメージのパスを指定します。このラベルは今後使用するために予約され、現時点ではデフォの
metadata/に設定されています。metadata.v1の値は、このバンドルに Operator メタデータがあることを意味します。 annotations.operators.operatorframework.io.bundle.package.v1- バンドルのパッケージ名を指定します。
annotations.operators.operatorframework.io.bundle.channels.v1- Operator Registry に追加される際にバンドルがサブスクライブするチャネルのリストを指定します。
annotations.operators.operatorframework.io.bundle.channel.default.v1- レジストリーからインストールされる場合に Operator がサブスクライブされるデフォルトチャネルを指定します。
一致しない場合、annotations.yaml ファイルは、これらのアノテーションに依存するクラスター上の Operator Registry のみがこのファイルにアクセスできるために権威を持つファイルになります。
2.2.1.3. 依存関係 リンクのコピーリンクがクリップボードにコピーされました!
Operator 依存関係は、OpenShift Container Platform へのインストール中に Operator Lifecycle Manager (OLM) が解決しなければならない Operator 間の関係を定義します。これらの依存関係は、バンドルの metadata/ フォルダーにある任意の dependencies.yaml ファイルに記述できます。
依存関係の一覧には、依存関係の内容を指定するために各項目の type フィールドが含まれます。次のタイプの Operator 依存関係がサポートされています。
olm.package-
このタイプは、特定の Operator バージョンの依存関係であることを意味します。依存関係情報には、パッケージ名とパッケージのバージョンを semver 形式で含める必要があります。たとえば、
0.5.2などの特定バージョンや>0.5.1などのバージョンの範囲を指定することができます。 olm.gvk- このタイプの場合、作成者は CSV の既存の CRD および API ベースの使用方法と同様に group/version/kind (GVK) 情報で依存関係を指定できます。これは、Operator の作成者がすべての依存関係、API または明示的なバージョンを同じ場所に配置できるようにするパスです。
olm.constraint- このタイプは、任意の Operator プロパティーに対するジェネリック制約を宣言します。
以下の例では、依存関係は Prometheus Operator および etcd CRD に指定されます。
dependencies.yaml ファイルの例
dependencies:
- type: olm.package
value:
packageName: prometheus
version: ">0.27.0"
- type: olm.gvk
value:
group: etcd.database.coreos.com
kind: EtcdCluster
version: v1beta2
2.2.1.4. opm CLI について リンクのコピーリンクがクリップボードにコピーされました!
opm CLI は、OpenShift Container Platform のバンドルイメージから Operator カタログを作成および維持するための Operator Framework ツールです。これを使用すると、Operator Lifecycle Manager (OLM) がカタログソースを通じて参照するカタログコンテナーイメージをビルドできます。
カタログには、コンテナーイメージの実行時に提供される組み込まれた API を使用してクエリーできる、Operator マニフェストコンテンツへのポインターのデータベースが含まれます。OpenShift Container Platform では、Operator Lifecycle Manager (OLM) は、CatalogSource オブジェクトが定義したカタログソース内のイメージ参照できます。これにより、クラスター上にインストールされた Operator への頻度の高い更新を可能にするためにイメージを一定の間隔でポーリングできます。
-
opmCLI のインストール手順は、CLI ツール を参照してください。