带有 2 个控制器的 Kubernetes 操作员

问题描述

我有一个操作员,里面有 2 个控制器。控制器 A 监视 CRD_A,如果它找到这种类型 A 的 CR(我们在集群中只能有一个这种类型的 CR),控制器会创建一个 podA 并将 CR 设置为 podA 的所有者。 控制器 B 监视 CRD_B,如果它找到类型 B 的 CR,控制器检查 podA 是否存在,并通过使用来自 CR 的信息向 podA 发送 HTTP 请求来设置 pod。 这是操作员工作的简单概述。

问题是当 podA 被删除(被我或 Kubernetes 想要重新调度它)时,控制器 A 的协调被触发,因为 CR_A 是 podA 的所有者,它会创建一个新的 podA。但是我也希望controllerB能够被reconciled,因为它必须设置podA,因为现在它没有reconciled,因为podA和controllerB之间没有连接。

当这样的事件发生时,触发控制器B的协调的正确方法是什么?我无法将两个 CR 设置为 pod 的所有者。我认为控制器 A 应该以某种方式向控制器 B 发送协调事件,但我不知道这是怎么发生的,这是正确的方法吗?

解决方法

我认为您上周在 Slack 中询问过这个问题,但粗略的回答是“使用手表地图”。 https://github.com/coderanger/migrations-operator/blob/088a3b832f0acab4bfe02c03a4404628c5ddfd97/components/migrations.go#L63-L91 就是一个例子。它从低级监视(A 的实例)获取事件,然后您编写一些代码将其与要协调的根对象(B 的实例)相匹配。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...