5.11. 高可用性またはシングルノードのクラスターの検出およびサポート
OpenShift Container Platform クラスターの高可用性 (HA) モードと非 HA モードの両方で Operator を適切に実行するには、Operator SDK を使用してクラスターのインフラストラクチャートポロジーを検出し、クラスターのトポロジーに適合するリソース要件を設定します。
OpenShift Container Platform クラスターは、複数のノードを使用する高可用性 (HA) モード、またはシングルノードを使用する非 HA モードで設定できます。シングルノード OpenShift とも呼ばれるシングルノードクラスターには、より慎重なリソース制約がある可能性があります。したがって、シングルノードクラスターにインストールされた Operator がそれに応じて調整でき、正常に実行できることが重要です。
OpenShift Dedicated で提供されるクラスター高可用性モード API にアクセスすることにより、Operator の作成者は、Operator SDK を使用して、Operator がクラスターのインフラストラクチャートポロジー (HA モードまたは非 HA モード) を検出できるようにすることができます。カスタム Operator ロジックは、検出されたクラスタートポロジーを使用して、Operator およびそれが管理するオペランドまたはワークロードの両方のリソース要件を、トポロジーに最も適したプロファイルに自動的に切り替えるように開発することができます。
Operator プロジェクトの関連スキャフォールディングおよびテストツールなど、Red Hat がサポートするバージョンの Operator SDK CLI ツールは非推奨となり、OpenShift Dedicated の今後のリリースで削除される予定です。Red Hat は、現在のリリースライフサイクル中にこの機能のバグ修正とサポートを提供しますが、この機能は今後、機能拡張の提供はなく、OpenShift Dedicated リリースから削除されます。
新しい Operator プロジェクトを作成する場合、Red Hat がサポートするバージョンの Operator SDK は推奨されません。既存の Operator プロジェクトを使用する Operator 作成者は、OpenShift Dedicated 4 でリリースされるバージョンの Operator SDK CLI ツールを使用してプロジェクトを維持し、OpenShift Dedicated の新しいバージョンを対象とする Operator リリースを作成できます。
Operator プロジェクトの次の関連ベースイメージは 非推奨 ではありません。これらのベースイメージのランタイム機能と設定 API は、バグ修正と CVE への対応のために引き続きサポートされます。
- Ansible ベースの Operator プロジェクトのベースイメージ
- Helm ベースの Operator プロジェクトのベースイメージ
サポートされていない、コミュニティーによって管理されているバージョンの Operator SDK は、Operator SDK (Operator Framework) を参照してください。
5.11.1. クラスター高可用性モード API について
OpenShift Dedicated は、Operator がインフラストラクチャートポロジーの検出に使用するクラスター高可用性モード API を備えています。インフラストラクチャー API は、インフラストラクチャーに関するクラスター全体の情報を保持します。Operator Lifecycle Manager(OLM) 管理の Operator は、高可用性モードに基づいてオペランドまたは管理ワークロードを異なる方法で設定する必要がある場合にインフラストラクチャー API を使用できます。
インフラストラクチャー API では、infrastructureTopology
ステータスは、コントロールプレーンノードで実行されないインフラストラクチャーサービスの期待値を表します。通常、これは値が master
以外の ロール
のノードセレクターでわかります。controlPlaneTopology
ステータスは、通常コントロールプレーンノードで実行されるオペランドの期待値を表します。
ステータスがいずれの場合もデフォルト設定は HighlyAvailable
で、複数ノードクラスターで Operator が行う動作を表します。SingleReplica
設定は、シングルノード OpenShift とも呼ばれるシングルノードクラスターで使用されます。この設定は、オペランドを高可用性運用向けに設定しないよう Operator に指示するものです。
OpenShift Dedicated インストーラーは、次のルールに従って、クラスターの作成時のレプリカ数に基づいて controlPlaneTopology
および infrastructureTopolog
ステータスフィールドを設定します。
-
コントロールプレーンのレプリカ数が 3 未満の場合には、
controlPlaneTopology
のステータスはSingleReplica
に設定されます。それ以外の場合は、HighlyAvailable
に設定されます。 -
ワーカーレプリカ数が 0 の場合に、コントロールプレーンノードもワーカーとして設定されます。したがって、
infrastructureTopology
のステータスはcontrolPlaneTopology
ステータスと同じです。 -
ワーカーレプリカ数が 1 の場合、
infrastructureTopology
はSingleReplica
に設定されます。それ以外の場合は、HighlyAvailable
に設定されます。
5.11.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)