我有一个操作员,里面有两个控制器。controllerA监视CRD_A,如果它找到类型A的CR (我们在集群中只能有一个这种类型的CR ),控制器将创建一个podA并将CR设置为podA的所有者。controllerB监视CRD_B,如果它发现类型B的CR,则控制器检查podA是否存在,并通过向podA发送包含来自CR的信息的HTTP请求来设置pod。这是操作员工作的简单概述。
问题是,当podA被删除时(我或者Kubernetes想重新安排它),controllerA的协调就会被触发,因为CR_A是podA的所有者,它会创建一个新的podA。但我也希望协调controllerB,因为它必须设置podA,因为现在它不协调,因为podA和controllerB之间没有连接。
当发生这样的事件时,触发controllerB协调的正确方式是什么?我不能将两个CRs设置为pod的所有者。我认为controllerA应该以某种方式向controllerB发送协调事件,但我不知道这是怎么发生的,这是正确的方式吗?
发布于 2021-02-15 19:33:58
我想你上周在Slack上问过这个问题,但粗略的回答是“使用手表地图”。https://github.com/coderanger/migrations-operator/blob/088a3b832f0acab4bfe02c03a4404628c5ddfd97/components/migrations.go#L63-L91就是一个例子。它从低级监视(A的实例)获取事件,然后编写一些代码来匹配要协调的根对象(B的实例)。
https://stackoverflow.com/questions/66206071
复制相似问题