我在 k8s 运算符中编写了一段代码,该任务需要更长的时间才能完成,从而阻塞了我的协调器直到完成任务。我想实现一个逻辑,我不必等到完成任务,而是想在完成任务后收到协调器的通知。
正如您所建议的,最佳实践是使操作员的协调过程尽可能短暂,以确保操作员可以快速协调事件并及时通过资源状态传达更新。优化操作员协调方法的最佳方法对于操作员来说始终是唯一的,但我提供了一些可能适用于您的操作员的场景:
场景 1:协调 CR 时,您的操作员需要创建一组子资源并确保它们处于某种状态。
在这种情况下,最好的选择是在子资源达到正确状态时使用 所有者标签重新排队 CR。您的运营商的协调方法需要更新为:
场景 2:您的操作员在协调资源时需要执行长时间运行的逻辑
在这种情况下,将长时间运行的逻辑移动到 Kubernetes Job 或外部运行的进程中可能是有意义的。一旦作业完成,您的操作员控制器将需要重新排队 CR,类似于场景 1 中描述的过程。
也可以将操作员配置为同时协调多个 CR,但这不会解决协调方法中固有的设计问题。
希望这对您有所帮助,如果上述情况不适用,请联系我们提供更多详细信息。