如何在Kubernetes中缩放CRD控制器
我正在阅读大量关于 我已经用我的业务逻辑实现了一个,有时我会遇到这样的竞争条件:如何在Kubernetes中缩放CRD控制器,kubernetes,Kubernetes,我正在阅读大量关于 我已经用我的业务逻辑实现了一个,有时我会遇到这样的竞争条件: 我创建了一个自定义对象,我们将其命名为Foo,名称为bar 我的业务逻辑适用,假设它创建了一个Deployment,并生成了一个名称,我将该名称(作为参考)保存在Foo对象中 我删除自定义对象 我用相同的名称快速重新创建它,有时我会得到以下日志: 问题是因为我的Deployment有一个生成的名称,可能保存(Foo)失败了,所以我得到了两个Deployment,有两个名称 目前我还没有找到解决方法,但它提出了一
- 我创建了一个自定义对象,我们将其命名为
,名称为Foo
bar
- 我的业务逻辑适用,假设它创建了一个
,并生成了一个名称,我将该名称(作为参考)保存在Deployment
对象中Foo
- 我删除自定义对象
- 我用相同的名称快速重新创建它,有时我会得到以下日志:
Deployment
有一个生成的名称,可能保存(Foo)失败了,所以我得到了两个Deployment
,有两个名称
目前我还没有找到解决方法,但它提出了一个问题
如果我有多个控制器在运行,该怎么办?
我启动了两个控制器,通过创建一个新对象,我得到了相同的竞争条件
那么,什么是扩展CRD控制器并避免这种竞争条件的最佳设计?通常,您只运行一个控制器副本,或者在任何给定时间至少只有一个控制器处于活动状态。只要您小心地聚合编写代码,那么从技术上讲,这并不重要,但实际上没有太多理由运行多个
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