我正在使用Metacontroller来实现Kubernetes运算符。
我的问题如下:
status.observedGeneration
字段正在不断更新(据我了解,这意味着资源已重新创建)。复合控制器文档(特别是response documentation)建议,如果返回的父状态或子级集合没有任何变化,Metacontroller应该停止调用同步钩子。
我还从复合控制器清单中删除了spec.resyncPeriodSeconds
和spec.parentResource.revisionHistory
(以免由于计时器事件或父级status
字段的更改而触发对同步钩子的任何调用)。 / p>
可悲的是,这些都不起作用。如何告诉Metacontroller停止调用同步钩子并停止创建资源?
答案 0 :(得分:1)
您可能需要为CRD启用“状态”子资源:https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/#status-subresource
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: myresource
spec:
...
subresources:
status: {}
否则,Metacontroller会将状态更新视为普通资源更新,这又会创建一个新的.metadata.resourceVersion
/ .metadata.generation
,因为Metacontroller总是添加一个更新的.status.observedGeneration
字段。
我为此创建了一个问题:https://github.com/GoogleCloudPlatform/metacontroller/issues/176
希望这会在将来使这种情况更加明显。