【发布时间】:2019-07-18 06:54:25
【问题描述】:
我正在阅读很多关于 CRD Controller 的文档
我已经用我的业务逻辑实现了一个,但有时我会遇到这种竞争条件:
- 我创建了一个自定义对象,我们称它为
Foo,名称为bar - 我的业务逻辑适用,假设它创建了一个带有生成名称的
Deployment,并将名称(作为参考)保存在Foo对象中 - 我删除了自定义对象
- 我很快用相同的名称重新创建它,有时我会得到这个日志:
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 控制器并避免这种竞争条件的最佳设计是什么?
【问题讨论】:
标签: kubernetes