首页 > 解决方案 > 如何使用 watch api 避免丢失历史删除事件

问题描述

我正在使用 watch API 实现一个自定义资源控制器。在 kubernetes 中创建/删除对象时,需要在 aws 中创建/删除对象。

当它启动手表时,它会收到一个历史事件列表。但是,我注意到如果创建一个对象然后删除,这些事件会在历史事件流中“取消”。也就是说,当我启动手表时,我没有看到给定对象的 ADDED 事件和 DELETED 事件,我根本看不到任何事件,就好像它从未存在过一样。这意味着如果一个对象在控制器关闭时被删除,它会在它重新启动时完全错过这个删除事件。

对于需要在删除 kubernetes 对象时执行操作的控制器(例如,删除 AWS 中的对象),推荐的方法是什么?有没有办法让 kubernetes 保持 DELETED 事件?是否只是期望控制器通过轮询所有命名空间中的所有对象列表而不是使用 watch API 来工作?

标签: kuberneteskubernetes-custom-resources

解决方案


如果您需要将一个系统中的现有对象的状态或列表与另一个系统中的对象同步,您应该能够获取两个系统上的对象列表,比较它们并处理差异。

如果你只依赖于观察像 CREATE 和 DELETE 这样的即时事件,你迟早会得到不同步的系统。

我能想象到的关于 Kubernetes apiserver 事件的唯一可靠信息来源是审计日志


推荐阅读