【问题标题】:How to scale a CRD Controller in Kubernetes如何在 Kubernetes 中扩展 CRD 控制器
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-15
      • 1970-01-01
      • 2012-01-10
      相关资源
      最近更新 更多