5.7.7. Operator 条件の有効化
Operator Lifecycle Manager (OLM) は、Operator を管理する一方で OLM の動作に影響を与える複雑な状態を通信するためのチャネルを Operator に提供します。デフォルトで、OLM は Operator のインストール時に OperatorCondition カスタムリソース定義 (CRD) を作成します。OperatorCondition カスタムリソース (CR) に設定される条件に基づいて、OLM の動作は随時変わります。
Operator 条件をサポートするには、Operator は OLM によって作成された OperatorCondition CR を読み取ることができ、次のタスクを完了することができる必要があります。
- 特定の条件を取得します。
- 特定の条件のステータスを設定します。
これは、operator-lib ライブラリーを使用して実行できます。Operator の作成者は、ライブラリーがクラスター内の Operator が所有する OperatorCondition CR にアクセスできるように Operator に controller-runtime クライアント を指定できます。
ライブラリーは汎用的な Conditions インターフェイスを提供します。これには、OperatorCondition CR で conditionType の Get および Set を実行するための以下のメソッドがあります。
Get-
特定の条件を取得するために、ライブラリーは
controller-runtimeのclient.Get機能を使用します。これには、conditionAccessorにあるタイプがtypes.NamespacedNameのObjectKeyが必要です。 Set-
特定の条件のステータスを更新するために、ライブラリーは
controller-runtimeのclient.Update機能を使用します。conditionTypeが CRD にない場合、エラーが生じます。
Operator は CR の status サブリソースのみを変更することができます。Operator は status.conditions 配列を削除したり、条件を追加できるようにこれを更新したりすることができます。条件にあるフィールドの形式および説明の詳細は、アップストリームの Condition GoDocs を参照してください。
Operator SDK 1.28.0 は operator-lib v0.11.0 をサポートします。
前提条件
- Operator プロジェクトが Operator SDK を使用して生成されている。
手順
Operator プロジェクトで Operator 条件を有効にするには、以下を実行します。
Operator プロジェクトの
go.modファイルで、operator-framework/operator-libを必要なライブラリーとして追加します。module github.com/example-inc/memcached-operator go 1.15 require ( k8s.io/apimachinery v0.19.2 k8s.io/client-go v0.19.2 sigs.k8s.io/controller-runtime v0.7.0 operator-framework/operator-lib v0.3.0 )Operator ロジックに独自のコンストラクターを作成すると、次の結果が得られます。
-
controller-runtimeクライアントを許可します。 -
conditionTypeを受け入れます。 -
条件を更新または追加する
Conditionインターフェイスを返します。
現時点で OLM は
Upgradeable状態をサポートするため、Upgradeable条件にアクセスするためのメソッドを持つインターフェイスを作成できます。以下に例を示します。import ( ... apiv1 "github.com/operator-framework/api/pkg/operators/v1" ) func NewUpgradeable(cl client.Client) (Condition, error) { return NewCondition(cl, "apiv1.OperatorUpgradeable") } cond, err := NewUpgradeable(cl);この例では、
NewUpgradeableコンストラクターが、タイプConditionの変数condを使用するためにさらに使用されます。cond変数には、OLM のUpgradeable条件を処理するために使用できるGetおよびSetメソッドが含まれます。-