首页 > 解决方案 > 使用运算符创建具有空环境变量的子 Pod 会导致无限循环

问题描述

我有一个元控制器(操作员)。它使用自定义 CRD。当它收到sync调用时,它会创建几个子资源:

pod 是使用有效图像创建的。在它的环境变量中,有一个设置了一个空字符串。

{ "name": "PARTITIONS", "value": "" }

这将返回到元控制器。元控制器开始创建子对象。

然后它注意到由于PARTITIONS变量,观察到的状态和实际状态之间存在差异。

I0611 00:45:24.908380       1 manage_children.go:210] reflect diff: a=observed, b=desired:
object[spec][containers][0][env][11][value]:
  a: <nil>
  b: ""

因此,它会杀死启动的 pod,并再次向我的端点发送同步请求。

这会导致无限循环,因为我的端点查看 request.children,发现 pod 丢失,添加一个新 pod 并返回。过了一会儿,它又被删除了,无穷无尽。

这是 Metacontroller 中的错误吗?

标签: kuberneteskubernetes-podkubernetes-operator

解决方案


metacontroller项目中确认这是它如何序列化空字符串以比较差异的错误。


推荐阅读