元控制器:如何停止同步钩子和资源生成的调用

时间:2019-06-03 12:30:19

标签: kubernetes metacontroller kubernetes-operator

我正在使用Metacontroller来实现Kubernetes运算符。

我的问题如下:

  1. Metacontroller永远不会停止为控制器调用同步钩子(在这种情况下为composite controllers),并且
  2. 父资源status.observedGeneration字段正在不断更新(据我了解,这意味着资源已重新创建)。

复合控制器文档(特别是response documentation)建议,如果返回的父状态或子级集合没有任何变化,Metacontroller应该停止调用同步钩子。

我还从复合控制器清单中删除了spec.resyncPeriodSecondsspec.parentResource.revisionHistory(以免由于计时器事件或父级status字段的更改而触发对同步钩子的任何调用)。 / p>

可悲的是,这些都不起作用。如何告诉Metacontroller停止调用同步钩子并停止创建资源?

1 个答案:

答案 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/blob/985572b9052a306f7e4d4fb84f2ced6f74247dd5/dynamic/clientset/clientset.go#L200

我为此创建了一个问题:https://github.com/GoogleCloudPlatform/metacontroller/issues/176

希望这会在将来使这种情况更加明显。