Оператор Kubernetes с 2 контроллерами

У меня есть оператор, у которого есть 2 контроллера. Контроллер A следит за CRD_A, и если он находит CR (у нас может быть только один CR этого типа в кластере) этого типа A, контроллер создает podA и устанавливает CR как владельца podA. Контроллер B наблюдает за CRD_B, если он находит CR типа B, контроллер проверяет, существует ли podA, и настраивает модуль, отправляя HTTP-запрос на podA с информацией из CR. Это простой обзор работы оператора.

Проблема в том, что когда podA удаляется (я или Kubernetes хочет перепланировать его), запускается согласование controllerA, потому что CR_A является владельцем podA и создает новый podA. Но я также хочу, чтобы controllerB был согласован, потому что он должен настроить podA, потому что теперь он не согласован, потому что нет соединения между podA и controllerB.

Как правильно инициировать согласование контроллера B, когда происходит такое событие? Я не могу назначить двух CR в качестве владельцев модуля. Я думаю, что как-то controllerA должен отправить событие согласования на controllerB, но я не знаю, как это может произойти, и правильно ли это?


person aliench0    schedule 15.02.2021    source источник


Ответы (1)


Я думаю, вы спрашивали об этом в Slack на прошлой неделе, но грубый ответ - использовать карту часов. https://github.com/coderanger/migrations-operator/blob/088a3b832f0acab4bfe02c03a4404628c5ddfd97/components/migrations.go#L63-L91 является примером одного из них. Он получает событие от часов низкого уровня (экземпляр A), а затем вы пишете некоторый код, чтобы сопоставить его с тем, какой корневой объект согласовать (экземпляр B).

person coderanger    schedule 15.02.2021
comment
Спасибо за ответ, я впервые спрашиваю об этом. Я постараюсь ответить здесь позже. Спасибо еще раз. :) - person aliench0; 15.02.2021