我有一个操作符,其中有2个控制器。控制器会监视CRD_A,如果它发现了一个这种类型的CR(在集群中只能有一个这种类型的CR),控制器就会创建一个podA,并将CR设置为该podA的所有者。控制器B监视CRD_B,如果发现类型为B的CR,则检查podA是否存在,并通过向podA发送带有来自CR的信息的HTTP请求来设置pod。这是操作符工作的简单概述。
问题是,当podA被删除时(由我或Kubernetes想要重新调度它),控制器的调和被触发,因为CR_A是podA的所有者,它创建了一个新的podA。但是我还想让controllerB协调因为它必须设置podA,因为现在它没有协调因为podA和controllerB之间没有连接。
当这样的事件发生时,触发controllerB调和的正确方法是什么?我不能设置两个cr作为pod的所有者。我认为controllerA应该发送调和事件到controllerB但我不知道这是怎么发生的,这是正确的方式吗?
我想你上周在Slack上问过这个问题,但粗略的答案是"使用观察地图"。https://github.com/coderanger/migrations-operator/blob/088a3b832f0acab4bfe02c03a4404628c5ddfd97/components/migrations.go#L63-L91就是一个例子。它从低级监视(A的一个实例)中获取事件,然后您编写一些代码将其匹配回要调和的根对象(B的一个实例)。