1

2 つのコントローラーを持つオペレーターがいます。controllerA は CRD_A を監視し、このタイプ A の CR (クラスター内にこのタイプの CR を 1 つだけ持つことができます) を見つけると、コントローラーは podA を作成し、CR を podA の所有者として設定します。controllerB は CRD_B を監視し、タイプ B の CR が見つかった場合、コントローラーは podA が存在するかどうかを確認し、CR からの情報を含む HTTP 要求を podA に送信して Pod をセットアップします。これは、オペレーターの作業の簡単な概要です。

問題は、podA が削除されると (私または Kubernetes が再スケジュールしたい場合)、controllerA の調整がトリガーされることです。これは、CR_A が podA の所有者であり、新しい podA が作成されるためです。しかし、podA と controllerB の間に接続がないため、現在は調整されていないため、podA をセットアップする必要があるため、controllerB も調整する必要があります。

そのようなイベントが発生したときに controllerB の調整をトリガーする正しい方法は何ですか? ポッドの所有者として 2 つの CR を設定できません。どういうわけか、controllerAは調整イベントをcontrollerBに送信する必要があると思いますが、これがどのように発生するのかわかりません。これは正しい方法ですか?

4

1 に答える 1

2

先週、Slack でこの件について質問されたと思いますが、大まかな答えは「ウォッチ マップを使用する」です。https://github.com/coderanger/migrations-operator/blob/088a3b832f0acab4bfe02c03a4404628c5ddfd97/components/migrations.go#L63-L91はその一例です。低レベルのウォッチ (A のインスタンス) からイベントを取得し、調整するルート オブジェクト (B のインスタンス) に一致するコードを記述します。

于 2021-02-15T11:33:58.347 に答える