我正在阅读许多有关CRD Controller的文档
我已经用我的业务逻辑实现了一个,有时候我遇到了这种竞争状况:
Foo
称为bar
Deployment
,并将该名称(作为引用)保存在Foo
对象中< / li>
error syncing 'default/bar': Operation cannot be fulfilled on Foo.k8s.io "bar":
the object has been modified; please apply your changes to the latest version
and try again, requeuing
问题是因为我的Deployment
具有生成的名称,也许保存(Foo)失败了,所以我得到了两个带有两个名称的Deployment
。
我暂时还没有找到修复它的方法,但这引起了一个问题。
如果我有多个控制器正在运行?
我已经启动了两个控制器,并且通过创建一个新对象而获得了相同的竞争条件。
那么,缩放CRD控制器并避免这种竞争条件的最佳设计是什么?
答案 0 :(得分:3)
通常,您只运行一个控制器副本,或者在任何给定时间至少运行一个副本。只要您小心地以聚合方式编写代码,那么从技术上讲就没有关系,但实际上没有太多理由运行多个代码。