具有 2 个控制器的 Kubernetes 操作员
Kubernetes operator with 2 controllers
我有一个操作员,里面有 2 个控制器。 controllerA 监视 CRD_A,如果它找到一个这种类型 A 的 CR(我们在集群中只能有一个这种类型的 CR),则控制器创建一个 podA 并将 CR 设置为 podA 的所有者。
controllerB 监视 CRD_B,如果它找到类型 B 的 CR,则控制器检查 podA 是否存在,并通过使用来自 CR 的信息向 podA 发送 HTTP 请求来设置 pod。
这是运营商工作的简单概述。
问题是当 podA 被删除时(我或 Kubernetes 想要重新安排它)触发 controllerA 的协调,因为 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 的一个实例)。
我有一个操作员,里面有 2 个控制器。 controllerA 监视 CRD_A,如果它找到一个这种类型 A 的 CR(我们在集群中只能有一个这种类型的 CR),则控制器创建一个 podA 并将 CR 设置为 podA 的所有者。 controllerB 监视 CRD_B,如果它找到类型 B 的 CR,则控制器检查 podA 是否存在,并通过使用来自 CR 的信息向 podA 发送 HTTP 请求来设置 pod。 这是运营商工作的简单概述。
问题是当 podA 被删除时(我或 Kubernetes 想要重新安排它)触发 controllerA 的协调,因为 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 的一个实例)。