如何在Kubernetes中扩展CRD控制器

时间:2019-07-17 21:09:01

标签: kubernetes

我正在阅读许多有关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控制器并避免这种竞争条件的最佳设计是什么?

1 个答案:

答案 0 :(得分:3)

通常,您只运行一个控制器副本,或者在任何给定时间至少运行一个副本。只要您小心地以聚合方式编写代码,那么从技术上讲就没有关系,但实际上没有太多理由运行多个代码。