5.13. 高可用性またはシングルノードのクラスターの検出およびサポート
OpenShift Container Platform クラスターは、複数のノードを使用する高可用性 (HA) モード、または単一ノードを使用する非 HA モードで設定できます。シングルノード OpenShift とも呼ばれるシングルノードクラスターには、より慎重なリソース制約がある可能性があります。したがって、単一ノードクラスターにインストールされた Operator がそれに応じて調整でき、正常に実行できることが重要です。
OpenShift Container Platform で提供されるクラスター高可用性モード API にアクセスすることにより、Operator の作成者は、Operator SDK を使用して、Operator がクラスターのインフラストラクチャートポロジー (HA モードまたは非 HA モード) を検出できるようにすることができます。カスタム Operator ロジックは、検出されたクラスタートポロジーを使用して、Operator およびそれが管理するオペランドまたはワークロードの両方のリソース要件を、トポロジーに最も適したプロファイルに自動的に切り替えるように開発することができます。
Operator プロジェクトの関連スキャフォールディングおよびテストツールなど、Red Hat がサポートするバージョンの Operator SDK CLI ツールは非推奨となり、OpenShift Container Platform の今後のリリースで削除される予定です。Red Hat は、現在のリリースライフサイクル中にこの機能のバグ修正とサポートを提供しますが、この機能は今後、機能拡張の提供はなく、OpenShift Container Platform リリースから削除されます。
新しい Operator プロジェクトを作成する場合、Red Hat がサポートするバージョンの Operator SDK は推奨されません。既存の Operator プロジェクトを使用する Operator 作成者は、OpenShift Container Platform 4.16 でリリースされるバージョンの Operator SDK CLI ツールを使用してプロジェクトを維持し、OpenShift Container Platform の新しいバージョンを対象とする Operator リリースを作成できます。
Operator プロジェクトの次の関連ベースイメージは 非推奨 ではありません。これらのベースイメージのランタイム機能と設定 API は、バグ修正と CVE への対応のために引き続きサポートされます。
- Ansible ベースの Operator プロジェクトのベースイメージ
- Helm ベースの Operator プロジェクトのベースイメージ
OpenShift Container Platform で非推奨となったか、削除された主な機能の最新の一覧は、OpenShift Container Platform リリースノートの 非推奨および削除された機能 セクションを参照してください。
サポートされていない、コミュニティーによって管理されているバージョンの Operator SDK は、Operator SDK (Operator Framework) を参照してください。
5.13.1. クラスター高可用性モード API について
OpenShift Container Platform には、クラスターの高可用性モード API が同梱されており、Operator が使用して、インフラストラクチャートポロジーが検出できるようにします。インフラストラクチャー API は、インフラストラクチャーに関するクラスター全体の情報を保持します。Operator Lifecycle Manager(OLM) 管理の Operator は、高可用性モードに基づいてオペランドまたは管理ワークロードを異なる方法で設定する必要がある場合にインフラストラクチャー API を使用できます。
インフラストラクチャー API では、infrastructureTopology
ステータスは、コントロールプレーンノードで実行されないインフラストラクチャーサービスの期待値を表します。通常、これは値が master
以外の ロール
のノードセレクターでわかります。controlPlaneTopology
ステータスは、通常コントロールプレーンノードで実行されるオペランドの期待値を表します。
ステータスがいずれの場合もデフォルト設定は HighlyAvailable
で、複数ノードクラスターで Operator が行う動作を表します。SingleReplica
設定は単一ノード OpenShift としても知られる単一ノードクラスターで使用され、Operator はオペランドを高可用性の操作向けに設定すべきでないことを示します。
OpenShift Container Platform インストーラーは、以下のルールに従って、クラスターのレプリカ数に基づいて controlPlaneTopology
と infrastructureTopology
ステータスのフィールドを設定します。
-
コントロールプレーンのレプリカ数が 3 未満の場合には、
controlPlaneTopology
のステータスはSingleReplica
に設定されます。それ以外の場合は、HighlyAvailable
に設定されます。 -
ワーカーレプリカ数が 0 の場合に、コントロールプレーンノードもワーカーとして設定されます。したがって、
infrastructureTopology
のステータスはcontrolPlaneTopology
ステータスと同じです。 -
ワーカーレプリカ数が 1 の場合、
infrastructureTopology
はSingleReplica
に設定されます。それ以外の場合は、HighlyAvailable
に設定されます。
5.13.2. Operator プロジェクトでの API 使用状況の例
Operator の作成者は、以下の例のように、通常の Kubernetes コンストラクトおよび controller-runtime
ライブラリーを使用してインフラストラクチャー API にアクセスできるように Operator プロジェクトを更新できます。
controller-runtime
ライブラリーの例
// Simple query nn := types.NamespacedName{ Name: "cluster", } infraConfig := &configv1.Infrastructure{} err = crClient.Get(context.Background(), nn, infraConfig) if err != nil { return err } fmt.Printf("using crclient: %v\n", infraConfig.Status.ControlPlaneTopology) fmt.Printf("using crclient: %v\n", infraConfig.Status.InfrastructureTopology)
Kubernetes のコンストラクトの例
operatorConfigInformer := configinformer.NewSharedInformerFactoryWithOptions(configClient, 2*time.Second) infrastructureLister = operatorConfigInformer.Config().V1().Infrastructures().Lister() infraConfig, err := configClient.ConfigV1().Infrastructures().Get(context.Background(), "cluster", metav1.GetOptions{}) if err != nil { return err } // fmt.Printf("%v\n", infraConfig) fmt.Printf("%v\n", infraConfig.Status.ControlPlaneTopology) fmt.Printf("%v\n", infraConfig.Status.InfrastructureTopology)