首页 > 解决方案 > 如何在 Kubernetes 中扩展 CRD 控制器

问题描述

我正在阅读很多关于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

事情是因为我Deployment有一个生成的名字,也许保存(Foo)失败了,我得到了两个Deployment有两个名字的。

我暂时没有找到修复它的方法,但它提出了一个问题。

如果我有多个控制器正在运行怎么办?

我已经启动了两个控制器,并且通过创建一个新对象得到了相同的竞争条件。

那么,扩展 CRD 控制器并避免这种竞争条件的最佳设计是什么?

标签: kubernetes

解决方案


通常你只运行一个控制器的副本,或者在任何给定时间至少只有一个处于活动状态。只要你小心翼翼地编写代码,那么它在技术上应该不重要,但实际上没有太多理由运行多个。


推荐阅读