kubernetes - 如何在 Kubernetes 中扩展 CRD 控制器
问题描述
我正在阅读很多关于CRD 控制器的文档
我已经用我的业务逻辑实现了一个,有时我遇到了这种竞争条件:
- 我创建了一个自定义对象,让我们
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 控制器并避免这种竞争条件的最佳设计是什么?
解决方案
通常你只运行一个控制器的副本,或者在任何给定时间至少只有一个处于活动状态。只要你小心翼翼地编写代码,那么它在技术上应该不重要,但实际上没有太多理由运行多个。
推荐阅读
- javascript - 在 QML 中获取对动态创建的 ChartView 的引用
- python - 如何将两个文本文件与文件路径进行比较并在另一个文本文件中输出差异?
- python - GridsearchCV 异常
- sql - 产生3年
- javascript - 怎样才能达到“熔岩”留下痕迹的效果
- php - 如何根据值将多维数组拆分为数组 - PHP
- html - Html ccs 自定义单选按钮从右到左
- apache - 服务器无法读取 htaccess 文件,拒绝访问是安全的(VBOX 6.0 和 Ubuntu 18.04 上的共享文件夹)
- javascript - 默认 ol 和 li 样式,带有不同的项目符号和数字颜色
- javascript - Bootstrap 通知 - JS 函数仅在第一次迭代时淡出通知