如果我正在实现我的Kubernetes CRD,easy peasy似乎实现了自定义 * 终结器 *:代码片段相当简单,因为对象上的第一个删除请求设置metadata.deletionTimestamp
字段的值,而不是删除触发监视对象的定制控制器执行其处理的任何终结器的对象。
然而,让我们想象一下,我想为一个默认的Kubernetes资源设置一个 * 自定义终结器 *,比如名称空间、部署或其他:这可能吗?
如果我正在实现我的Kubernetes CRD,easy peasy似乎实现了自定义 * 终结器 *:代码片段相当简单,因为对象上的第一个删除请求设置metadata.deletionTimestamp
字段的值,而不是删除触发监视对象的定制控制器执行其处理的任何终结器的对象。
然而,让我们想象一下,我想为一个默认的Kubernetes资源设置一个 * 自定义终结器 *,比如名称空间、部署或其他:这可能吗?
2条答案
按热度按时间jaql4c8m1#
好的,以
Namespace
为例进行了一点测试。如果打开另一个终端,可以看到资源处于
Terminating
状态。因此,实际上资源被标记为删除,因为我得到了
deletionTimestamp
:要完成删除,我只需要一个简单的Watch(使用Kubernetes Go Client)来获取对象的更改(或一个Dynamic Admission Controll来获取事件,以异步模式处理业务逻辑(类似于删除前钩子)并删除完全限定的Finalizer...为了简单起见,我用
kubectl
测试了删除操作,结果成功了。仅供参考,Finalizer 必须是完全限定的,因为有一个验证过程,所以它必须根据模式
prometherion/whatever_you_want
声明,注意第一部分必须遵守DNS-1123
规范。efzxgjgh2#
完全删除需要一些时间,因为存在终结器