2.2.3. ClusterObjectSets
ClusterObjectSets は、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
Operator Lifecycle Manager (OLM) v1 の一部として、ClusterExtension オブジェクトを使用してコンテンツをインストールまたはアップグレードすると、operator-controller は ClusterObjectSet リソースを作成します。ClusterObjectSet オブジェクトを使用すると、Kubernetes リソースを安全かつ段階的に展開できます。
ClusterObjectSet オブジェクトは、クラスタースコープのリソースです。このオブジェクトは、インストールするコンテンツではありません。ClusterExtension オブジェクトの 1 つのリビジョンに関するコントローラーの内部レコードです。関連リソースを段階的に展開し、各フェーズ間に準備状況チェックを組み込んでいます。
ClusterObjectSet オブジェクトは、関連する Kubernetes リソースセットの管理時に発生する問題を解決します。
- 変更不可能な改訂内容
- 改訂番号、フェーズ、オブジェクト、および競合保護ストラテジーは不変であり、一度設定されると変更できません。これにより、各改訂時に何がデプロイされたかを明確に記録した監査証跡が提供されます。
- 段階的ロールアウト
- リソースはフェーズごとにグループ化され、CRD は Deployments の前に配置され、順次デプロイされます。フェーズは、そのフェーズに含まれるすべてのオブジェクトが readiness プローブに合格した後にのみ進行します。マニフェストはフェーズごとに整理され、クラスターに適用され、次のフェーズに進む前にいくつかのステータスプローブに合格する必要があります。こうすることで、インストールが不完全にならないようにします。
- 安全な移行
- アップグレード中は、新しいリビジョンが正常に移行されるまで、古いリビジョンと新しいリビジョンの両方がアクティブな状態を維持します。オブジェクトの所有権は、リビジョン間で自動的に移行します。
- 単独所有
-
各リソースは一度に 1 つの
ClusterObjectSetによってのみ管理されるため、競合は発生しません。 - 大規模なリソースサポート
- オブジェクトマニフェストはインラインで保存することも、シークレットとして外部化することもできるため、etcd のオブジェクトサイズ制限である 1.5 MiB を超えるバンドルも可能になります。
アーカイブされた ClusterObjectSet のリビジョンは、その ClusterExtension オブジェクトに適用された内容の履歴として、クラスター上に保持されます。
各 ClusterObjectSet には、以下の内容が含まれています。
- リビジョン番号
- バージョンを識別する、永続的に連続する整数。バンドルのバージョンが変更されると、新しいリビジョンが作成されます。アップグレード中は、新しいリビジョンが完了するまで、古いリビジョンと新しいリビジョンの両方がアクティブな状態を維持できます。以前のリビジョンはアーカイブされます。
- ライフサイクルの状態
-
これは
ClusterObjectSetの状態を示しており、状態はActive(管理および調整済み) またはArchivedのいずれかになります。lifecycleStateはActiveからArchivedに遷移しますが、元に戻ることはありません。 - フェーズのリスト
-
ClusterObjectSet内のオブジェクトは、フェーズごとに整理されています。各フェーズは関連するリソースをグループ化し、フェーズは順次適用されます。フェーズ内では、すべてのオブジェクトが特定の順序なく同時に適用されます。 - 競合防止ストラテジー
-
ClusterObjectSetがクラスター上の既存のオブジェクトを採用できるかどうかを制御します。 - ステータス状態
- リビジョンが現在展開中かどうかを示し、展開の進捗状況、利用可能状況、および成功状況を報告します。
一度に 1 つのクラスターオブジェクトを管理できる ClusterObjectSet は最大で 1 つです。非常に大きなバンドルでは、マニフェストを Secret オブジェクトに格納することで、サイズ制限によってインストールやアップグレードが妨げられることがないようにしています。
さらに、ClusterObjectSet によって作成された大規模なオブジェクトバンドルの管理もサポートされています。ClusterObjectSet は Kubernetes マニフェストを .spec.phases[].objects[].object に埋め込みます。現在、最大 20 フェーズ、1 フェーズあたり 50 オブジェクトまで使用できるため、etcd のオブジェクトサイズ制限である 1.5 MiB を超える可能性があります。CRD、Deployments、RBAC ルール、および Webhook 設定を多数抱える、大規模な Operator は、この制限に頻繁に達し、API サーバーが ClusterObjectSet を拒否してインストールまたはアップグレードが失敗する原因となります。
この問題を解決するには、オブジェクトごとの参照を使用して、オブジェクトを Secret リソースに外部化できます。フェーズデータは不変であり、リビジョンリコンサイラーによってのみ使用されるため、外部化に適しています。