【问题标题】:Kubernetes operator with 2 controllers具有 2 个控制器的 Kubernetes 操作员
【发布时间】:2021-02-15 19:33:58
【问题描述】:

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

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

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

【问题讨论】:

    标签: kubernetes operator-sdk


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回答,这是我第一次询问这个问题。我稍后会在这里尝试回答。再次感谢。 :)
    猜你喜欢
    • 2023-01-05
    • 2019-06-08
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多