如果我的自定义操作员失败,我应该在哪里提交事件?

Where do I submit events on failure of my custom operator?

我正在开发一个 mysql 用户操作员,但我对报告任何问题的正确方法有些困惑。

计划是在 CRD 上监视 MysqlUser 并在指定的数据库中创建 Secret 和 mysql 用户。显然,这两者都可能出错,此时我需要报错。

status.conditions中的一些k8s对象跟踪事件。还有 Event 对象,但我只看到 kubelet / controllermanager 到目前为止使用的对象。

如果说,我在创建 mysql 用户时遇到问题,因为我的操作员无法与 mysql 对话,但 CRD 是有效的,它应该转到事件还是 CRD 的状态?

这听起来类似于卷插件 (kubelet) 报告的事件,例如,kubelet 无法从 NFS 服务器挂载卷,因为服务器地址无效,因此无法接受它。

status.conditions 中的跟踪事件在这种情况下用处不大,因为用户通常无法控制 kubelet(或您的情况下的运算符)与下划线资源的交互方式。通常,status.conditions 仅表示对象的状态,而不表示它处于这种状态的原因。

这只是我对如何做出选择的理解。不知道有没有什么规定。

CRD 还没有状态部分 (1.7)。通过事件通知非常好,这就是将它们放在首位的原因。