私は今、Kubernetes と Operator SDK から始めています。最初のオペレーターを構築しようとしていますが、おそらく簡単な質問があります。
質問
調整ループでカスタム リソース yaml の構成変更を検出し、変更に応じてアクションを実行するにはどうすればよいですか?
CR 仕様で指定された構成プロパティがいくつかあります。
apiVersion: my.example.com/v1alpha1
kind: StoreApp
metadata:
name: mystoreapp
spec:
username: technicalUser
password: abcd1234
catalogs:
- name: Bikes
description: Bikes_description
- name: Cars
description: Cars_description
この種の新しいカスタム リソースを追加するときに、コントローラーが新しいポッドを作成し、アプリ イメージが (Web サーバーで) 内部で実行されるようにしたいと考えています。初めてアプリを起動して実行するときに、オペレーターからの HTTP 要求を介して (仕様からカタログを追加するために) 構成したいと考えています。これまでのところ問題ありませんが、アプリの稼働中にこれらのカタログを変更する方法についても説明します。
たとえば、仕様に新しいカタログを追加したい (kubectl パッチを使用)。オペレーターの調整メソッドが呼び出されますが、仕様が変更されたことをどのように理解できますか? アプリに HTTP 呼び出しを行ってすべてのカタログを取得し、それらを仕様のカタログと比較することをお勧めします。これは、変更があることを理解する正しい方法ですか?
何かが更新されたことを確認する他の 2 つの方法を考えていますが、それらが適切に機能するかどうか、またこれが最善の方法であるかどうかはわかりません。
最初のアイデアは、client.Get(...) を使用して StoreApp のインスタンスを要求することですが、私が理解している限り、これは API サーバーを呼び出し、mystoreapp の更新バージョンを取得します。これらのオブジェクトのキャッシュのように機能するローカル インデックスについて読みましたが、キャッシュされたオブジェクトと API サーバーから返されたオブジェクトに違いがあるかどうかを確認できます。しかし、このローカル インデックスからオブジェクトを取得する方法が見つからなかったため、2 つのオブジェクトを比較できませんでした。
ホール スペック オブジェクトのハッシュを格納するマップを作成し、このハッシュを client.Get(...) で取得したオブジェクトのハッシュと毎回チェックします。これでうまくいくと思いますが、これを行うためのより良い方法があるはずです。
K8s 用の Java オペレーターをいくつか読みましたが、onAdd、onUpdate、onDelete などのメソッドがありました。Operatod SDK で同様のものを見つけることができませんでした。Operator SDK にこのようなものはありますか?
どの回答も参考になります。前もって感謝します!
敬具、Hristiyan