1

处理 CRD 实例后,我试图通过我在 python 中的自定义入口控制器修补 CRD 的状态。

在状态补丁之后,我从 crd 实例上的 kube-api 服务器接收到一个修改事件,因为在状态更新后资源版本正在增加。

事件示例:

{'type': 'MODIFIED', 'object': {'apiVersion': '...', 'kind': '...', 'metadata': {'creationTimestamp': '...', 'generation': 1, ' name':'thro','namespace':'default','resourceVersion':'9927551','selfLink':'...','uid':'...'},'spec':{'...},' status': {'state': 'Success', 'status_message': 'CRD Activated'}}}

我的要求是忽略此修改事件,因为规范没有变化。但唯一的方法是跟踪 CRD 实例对象的上一代值,并比较一代中是否有更新。我想避免。

4

1 回答 1

0

我认为您可以使用metadata.generation忽略状态更新,添加observedGeneration到 CRD status,就像部署控制器所做的那样。

这是来自部署控制器的代码。

if d.Status.ObservedGeneration < d.Generation {
  d.Status.ObservedGeneration = d.Generation
  dc.client.AppsV1().Deployments(d.Namespace).UpdateStatus(d)
}
return nil
于 2021-09-15T05:54:33.280 回答