假设我有以下 CRD:
...
kind: SomeCRD
metadata:
ownerReferences:
- uid: aaa
name: name-a
...
当我运行时kubectl apply -f some.yaml
some.yaml 如下
...
kind: SomeCRD
metadata:
ownerReferences:
- uid: bbb
name: name-b
...
我希望将 ownerrefs 合并如下:
...
kind: SomeCRD
metadata:
ownerReferences:
- uid: aaa
name: name-a
- uid: bbb
name: name-b
...
那可能吗?目前kubectl apply
只会简单地将现有的 ownerReferences 替换为aaa
,bbb
同时它将合并 ownerReferencesaaa
和bbb
用于 Pod 等本机类型。
如果我理解正确,默认情况下 CRD 不支持战略合并,但从 1.16/1.17 开始,我们可以在 CRD 的架构中定义合并策略(k8s doc)。理想情况下,我们可以metadata.ownerReferences
在 someCRD 的模式中定义合并策略,这样可以解决这里的问题,但metadata
属于 apiserver,不能在 CRD 中重新定义。感觉就像metadata
是陷入了某种不幸的状态,它是 k8s 原生类型,但在 CRD 中被视为非结构化字段。
有什么方法可以完成这项工作还是我错过了什么?
提前致谢!:)